PDF文件的结构?
对于一个小项目,我必须parsingPDF文件,并采取其中的一个特定部分(一个简单的字符链)。 我想使用python来做到这一点,我发现了几个能够在某些方面做我想做的事情的库。
但现在经过一些研究,我想知道什么是一个PDF文件的真正结构,有没有人知道是否有一个规格或在网上任何解释? 我已经find了Adobe的链接,但似乎它是一个无效的链接:(
这是一个链接到Adobe的参考资料
http://www.adobe.com/devnet/pdf/pdf_reference.html
你应该知道,虽然PDF只是介绍,而不是结构。 parsing并不容易。
当我第一次开始使用PDF时,我发现PDF参考很难浏览。 它可能会帮助您了解文件结构的概述是否在语法中find,Adobe称为文档结构的是对象结构而不是文件结构。 这也在语法中find。 附录A中隐藏了操作符的描述 – 对理解内容stream中发生的事情非常有用。 如果你有使用颜色空间的痛苦,你会发现隐藏在graphics中! 希望这些指针能帮助你比我更快地find东西。
如果您使用Windows, pdftron CosEdit允许您浏览对象结构以了解它。 有一个免费的演示可用,使您可以检查文件,但不保存它。
我发现GNU Introduction to PDF有助于理解结构。 它包括一个易于阅读的示例PDF文件 ,他们详细描述。
其他有用的链接:
- PDF简洁的书更长,有有用的图片。
- PDF内容介绍是一个不是深入的介绍,但提供了一个快速的概述,并有大量的图片。
这里是PDF 1.7的原始参考 ,这里有一篇描述PDF文件结构的文章。 如果你使用Vim,那么pdftk插件是一个很好的方式来探索这个文档,而且它的原始forms也不会那么简单,而pdftk实用程序本身(和它的GPL源代码)是一个很好的方式来分离文档。
我正在尝试做几乎相同的事情。 PDF参考是一个非常困难的文件阅读。 本教程是我认为的一个更好的开始。
这可能会有所帮助:(从PDF32000.book的第11页开始)
通过将PDF语法看作四个部分,可以更好地理解PDF语法,如图1所示:
•对象。 PDF文档是由一小组基本types的数据对象组成的数据结构。 第7.2节“词汇约定”描述了用于编写对象和其他语法元素的字符集。 第7.3节“对象”描述对象的语法和基本属性。 第7.3.8节“stream对象”提供了最复杂的数据typesstream对象的完整细节。
•文件结构。 PDF文件结构确定对象如何存储在PDF文件中,如何访问它们以及如何更新。 这个结构独立于对象的语义。 第7.5节“文件结构”描述了文件结构。 第7.6节“encryption”描述了一种用于保护文档内容免受未经授权访问的文件级机制。
•文件结构。 PDF文档结构指定如何使用基本对象types来表示PDF文档的组件:页面,字体,注释等等。 第7.7节“文件结构”描述了整个文件结构; 后面的条款解决了组件的详细语义。
•内容stream。 PDF内容stream包含描述页面或其他graphics实体的外观的一系列指令。 这些指令虽然也是以对象的forms表示,但它们在概念上与表示文档结构的对象不同,并分别进行了描述。 第7.8节“内容stream和资源”讨论了PDF内容stream及其相关资源。
看起来像浏览一个PDF文件将需要多一点努力。
从PDF中提取文本是一个难题,因为PDF具有这样的面向布局的结构。 您可以在CPAN上看到我的成功尝试的文档和源代码 (我的实现是在Perl中)。 PDF数据结构非常酷,devise良好,但比写更容易编写。
如果您想使用PythonparsingPDF,请查看PDFMINER 。 这是parsingPDF文件到目前为止最好的库。
Didier有一个parsingPDF的工具:
files/software/pdf-parser_V0_4_3.zip
或在这里:
http://blog.didierstevens.com/programs/pdf-tools/其中编目了几个相关的pdf分析工具。;
另一个工具是在这里:
获得一些线索的一种方法是创build一个由空白页面组成的PDF文件。 我的电脑上有CutePDF Writer,并制作了一页空白的写字板文档。 打印到.pdf文件,然后用记事本打开.pdf文件。
接下来,使用此文件的副本,并删除可能感兴趣的文本的行或块,然后在Acrobat Reader中重新加载。 如果要制作一个有效的单页PDF文档,您将很惊讶。
我试图组成一个电子表格来从代码创build一个PDF表单。