我的应用程序需要打印一些东西。布局应该有点动态(有时特定字段可能包含更多数据,这可能需要它们自动换行或类似的),但打印输出不应超过一页。如果数据太多,我想稍微减小字体大小,然后重试,然后重复,直到所有内容都适合一个页面(永远不会so许多数据的字体会小得难以阅读)。
我需要在同一页上打印文本和图像。
布局应如下所示:
+------------------------------------------------------------------+
| +------+ +-------+ |
| | seal | text field 1 | photo | |
| | | text field 2 | | |
| +------+ +-------+ |
| ---------------------------------------------------------------- |
| text header 1: text data |
| text header 2: longer text data |
| text header 3 with long title: very long text data which does |
| not fit on a single line |
| ---------------------------------------------------------------- |
| text header 4: text data |
. .
. (...) (...) .
. .
| |
+------------------------------------------------------------------+
数据为text field 1
略有变化,但没有达到重要程度。数据为text field 2
可以相当短,但也可以非常长,并且应该适合两个图像元素之间,必要时可自动换行。两个字段应(大约)在两个图像之间垂直居中。
页面其余部分的数据字段通过中间的垂直线进行分组,但所有数据字段应从页面左侧的相同偏移量开始,该偏移量由最长标头的长度定义。
我已经部分使用独立式解决了这个问题NSView
(独立的,如,不是窗口的一部分)在我的 XIB 文件中。我已经创建了NSTextField
用于保存标题和数据的元素。对齐要求被定义为对NSTextField
元素,如果一切都合适(即不需要自动换行,并且不需要减小字体大小),那么它看起来就应该是这样的。
然而,还存在一些问题:
- 我不知道如何制作
NSTextField
将其文本换行,但保持尽可能小,垂直,以适合所有内容。看来我要么需要将其设置为超过一行高(这将导致行之间出现不必要的空白),要么自动换行会遮盖第二行。
- 打印 API 希望我传递一个
NSView
在我知道页面上的可打印区域是什么之前。因此,我看不到调整大小的选项NSView
所以它最适合页面。目前,这会导致页面具有过大的侧边距或过大的顶部/底部边距,具体取决于所使用的打印机及其设置。
我以正确的方式处理这件事吗?如果是的话,我该如何解决以上两个问题?如果不是,我应该做什么?
我确实查看了 Core Printing API,但这似乎有点太低级了。
Thanks,
如果将Behavior 设置为None 或Selectable,NSTextField 将换行并且高度足够高。
要调整打印视图的大小,您可以创建 NSView 的子类并实现 KnowsPageRange: 和 rectForPage:。在 KnowsPageRange: 中,您计算页数 (1) 并返回 YES。在 rectForPage: 中,您设置高度和宽度约束,以便视图与页面大小相同,调用 [selflayoutSubtreeIfNeeded] 并返回 self.bounds。 [[NSPrintOperation currentOperation] printInfo] 将为您提供打印信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)