PDF'先进'信息提取

时间:2012-11-08 10:49:56

标签: python pdf fonts colors dpi

我正在尝试编写或多或少的PDF软件证明。

我想提取一些信息,但不知道怎么做。

我需要提取的内容:

Bleed:                    I got this somewhat working with pyPdf, given
                          that the document uses 72 dpi, which sadly isn't
                          always the case. I need to be able to calculate
                          the bleed in millimeters.

Print resolution (dpi):   If I read the PDF spec[1] correctly this ought to
                          always be 72 dpi, unless a page has UserUnit set,
                          which was only introduced in PDF-1.6, but shouldn't
                          print documents always be at least 300 dpi? I'm
                          afraid that I misunderstood something…

                          I'd also need the print resolution for images, if
                          they can differ from the default page resolution,
                          that is.

Text color:               I don't have the slightest clue on how to extract
                          this, the string 'text colour' only shows up once
                          in the whole spec, without any explanation how it
                          is set.

Image colormodel:         If I understand it correctly I can read this out
                          in pyPdf with page['/Group']['/CS'] which can be:
                           - /DeviceRGB
                           - /DeviceCMY
                           - /DeviceCMYK
                           - /DeviceGray
                           - /DeviceRGBK
                           - /DeviceN

Font 'embeddedness':      I read in another post on stackoverflow that I
                          can just iterate over the font resources and if a
                          resource has a '/FontFile'-key that means that
                          the font is embedded. Is this correct?

如果除了pyPdf之外的其他库更能够提取此信息(或组合 他们非常欢迎他们。到目前为止,我偶然发现了pyPdf,pdfrw 和pdfminer。所有这些都没有最全面的文档。

[1] http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/PDF32000_2008.pdf

1 个答案:

答案 0 :(得分:2)

  

如果我正确阅读PDF规范1,那么它应该始终是72 dpi,   除非页面设置了UserUnit,这仅在PDF-1.6中引入,   但不应该打印文件总是至少300 dpi?我耽心   我误解了一些事情......

你确实误解了一些事情。默认用户空间单位,默认为1/72英寸但可以在PDF-1.6之后在每页基础上更改,定义打印分辨率,它只定义坐标中单位的长度默认情况下由用户给出(即,除非任何大小改变转换处于活动状态)对应于。

对于打印,所有数据都将转换为依赖于设备的空间,其分辨率与用户空间坐标无关。打印分辨率取决于打印设备及其驱动程序;由于安全设置允许低质量打印,它们可能会受到限制。

  

如果图像不同,我还需要图像的打印分辨率   默认的页面分辨率,即。

图像(嗯,位图图像,在PDF中也有矢量图形)各自具有它们各自的分辨率,然后可以在渲染之前被变换(例如放大)。因此,对于“图像打印分辨率”,您必须检查每个位图图像以及插入它的每个页面内容。如果图像旋转,倾斜和不对称拉伸,我想知道你将用什么数字作为分辨率......;)

  

文字颜色:我对如何提取这个字符串没有丝毫的线索   “文字颜色”仅在整个规格中出现一次,没有任何   解释如何设置。

请查看spec中的第9.2.3节:

  

用于绘制字形的颜色应为当前颜色   图形状态:非描边颜色或描边颜色   (或两者),取决于文本呈现模式(见9.3.6,“文本   渲染模式“)。默认颜色应为黑色(在DeviceGray中),   但是可以通过执行适当的方式获得其他颜色   颜色设置操作符或操作符(参见8.6.8,“颜色操作符”)   在绘制字形之前。

在那里你可以找到许多有趣的部分。但请注意,文字不仅仅是彩色的;它也可以呈现为应用于任何背景的剪辑路径。

  

我在stackoverflow上的另一篇文章中读到了我可以迭代的内容   字体资源,如果资源有'/ FontFile'键意味着   字体是嵌入的。这是对的吗?

我会建议更精确的分析。还有其他相关的密钥,例如'/ FontFile2'和'/ FontFile3',必须使用正确的。

不要低估你的任务......你应该开始定义你搜索的属性在旋转,拉伸和倾斜的字形,矢量图形和位图图像(如PDF)的混合环境中的含义。