我正在尝试创建一个我打算从OSX应用程序打印的多页PDF文档。
困难的部分是找到一个体面的教程来理解整个过程。一个人必须使用超自然能力来猜测它是如何工作的或在这里问:)
这就是重点。
每次创建PDF上下文时,我都会看到这一行
UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, 612, 792), nil);
如果我理解正确,假设PostScript点是1/72英寸,那么
612 x 792 points = 8.5 x 11 inch = 215.9 mm x 279.4 = US Letter paper size.
但我在这里看到一个问题,此页面将以72 dpi打印,对吗?相当低的分辨率。如何创建类似300 dpi的东西?只是按比例增加点数,或者在这种情况下创建2550x3300点的上下文?
这是正确的做法吗?
另一点是:我正在创建整个页面的上下文。我怎么知道我能真正打印出来的?所有区域都可以在PDF文档中打印吗?
答案 0 :(得分:4)
我想在你的问题的第二部分写一点(因为我认为第一部分已经被KenS充分回答了。但是我认为在你的第二个问题中混淆的可能性太大了,并且想要详细说明。
正如KenS所说," P"在PDF中代表"便携式"这是另一种说法,PDF被设计为独立于设备。这就是为什么有一个坐标系统可以使用72个点然后进行转换"在打印时间到实际打印设备工作的任何分辨率(或查看设备,因为我们可能只是在谈论在屏幕上或在iPad上看到PDF)。
第二个结果是PDF本身并不知道也不关心打印机可以做什么。当您使用代码示例中显示的调用创建页面时,您将创建一个PDF文件,其中的MediaBox设置为US Letter大小。就PDF而言,您可以在整个页面区域(以及其外部)绘制内容。
这并没有说明该内容是否真的可以打印。如果您的打印机可以在页面范围内打印,那么您可以将内容放在页面边缘。如果您的打印机需要半英寸的抓取区域而无法打印,则打印机可能会剪切您的某些内容。如果您将PDF发送到专业的图形艺术工作流程,某些内容实际上可能需要“流血”#34; (延伸到页面外部)以便将页面切割成最终尺寸不会导致问题。
PDF文件本身并不关心 - 它与设备无关。您决定将内容放在页面上的位置。你可以:
a)决定使用其他一些代码来获取特定打印机的实际可打印区域并相应地格式化您的内容。
b)决定创建一个可在"大多数"正确打印的PDF。体面的打印机。
b)确实遵循PDF规范的精神而不是a),但有时a)更容易: - )
答案 1 :(得分:3)
Ken和David的答案都是正确的。这个答案旨在解决(我认为是)该问题背后混淆的更深层次。 PDF(和我心爱的Postscript)是矢量图形格式,而不是 - 我重复 - 不就像图像(字节图)格式一样。这种区别延伸到PDF宇宙的 atoms 点。
PDF中的一个点就像几何类中的一个点。它仅指定飞机上的位置。它不包括任何区域。它无限小。
但是 - 你说 - PDF可以包含嵌入的图像!所以它们必须组合成相同的细节水平才能在同一个文件中共存!
没有。 PDF维护嵌入式图像,嵌入式。图像数据存在于其自己的局部上下文中,其中页面上的放置和位置(较大的,共同的上下文)由矢量几何工具(仿射(双线性)变换)控制。
现在,有一种感觉,哪些点有分辨率。由于一个点表示为计算机字,因此它必须能够在计算机字的范围内表示。因此,对于32位整数,我们有大约40亿的范围,而且范围要宽得多,但32位浮点(标准化的尾数指数形式)的精度较低。因此,如果你变得足够低或者足够小,那么数字本身就会触底。我相信Adobe的解释器声称浮点值的精度为8位十进制数,而标准C库只声称为6.因此,您无法真正处理维度 5000万,5000万的图像,因为矢量机器崩溃了。
但是这些都不需要关注任何正常使用。只有当你尝试像深度分形缩放这样疯狂的事情时才会出现,但你可能也不会用pdf这样做。
答案 2 :(得分:2)
该页面不以72 dpi打印,仅仅是坐标系统。 PDF文件(通常)是基于矢量的,即使不是可以包含任意分辨率的图像,也可以使用' P' PDF格式代表Portable,因此您通常不必担心解决问题。
PDF的可打印区域包含在MediaBox或BleedBox中,受CropBox的限制,一般来说,您不必担心这些。