对于一个小型项目,我必须解析pdf文件并采用其中的特定部分(简单的字符链)。我想使用python做到这一点,并且我发现了一些能够以某种方式实现我想要的功能的库。
但是现在经过一些研究,我想知道pdf文件的真实结构是什么,有人知道在线上是否有任何规格或解释吗?我在Adobe上找到了一个链接,但似乎是一个死链接:(
Answers:
我发现GNU PDF入门对理解结构很有帮助。它包括一个易于阅读的示例PDF文件,它们以完整的详细描述。
其他有用的链接:
刚开始使用PDF时,我发现很难浏览PDF参考。它可能会帮助您了解在语法中找到了文件结构的概述,并且Adobe称其为文档结构是对象结构而不是文件结构。这也可以在语法中找到。附录A中隐藏了运算符的描述-对理解内容流中正在发生的事情非常有用。如果您有使用色彩空间的烦恼,您会发现它隐藏在图形中!希望这些指针可以帮助您比我更快地找到事物。
如果使用Windows,pdftron CosEdit允许您浏览对象结构以了解它。有一个免费的演示程序,可让您检查文件但不保存。
这可能会帮助您了解一些信息:(摘自PDF32000.book第11页)
通过将PDF语法分为四个部分,可以最好地理解它,如图1所示:
•对象。PDF文档是由少量基本类型的数据对象组成的数据结构。第7.2节“词汇约定”描述了用于编写对象和其他句法元素的字符集。第7.3节“对象”描述了对象的语法和基本属性。第7.3.8节“流对象”提供了最复杂的数据类型流对象的完整详细信息。
•文件结构。PDF文件结构确定如何将对象存储在PDF文件中,如何访问对象以及如何更新对象。这种结构独立于对象的语义。第7.5节“文件结构”描述了文件结构。第7.6节“加密”描述了一种文件级机制,用于保护文档内容免受未经授权的访问。
•文档结构。PDF文档结构指定如何使用基本对象类型来表示PDF文档的组件:页面,字体,注释等。第7.7节“文档结构”描述了整个文档结构;后面的条款介绍了组件的详细语义。
•内容流。PDF内容流包含描述页面或其他图形实体外观的一系列指令。这些指令虽然也表示为对象,但它们在概念上与表示文档结构的对象不同,因此分别进行了描述。第7.8节“内容流和资源”讨论了PDF内容流及其相关资源。
导航PDF文件似乎需要付出更多努力。
如果要使用Python解析PDF,请查看PDFMINER。这是迄今为止解析PDF文件的最佳库。
pdf2txt -t html -d -Y exact -o foo.html foo.pdf
。这是查看PDF页面结构的非常不错的工具。我还在为自己的项目进行一些改进。
您需要使用PDF参考手册来开始阅读有关PDF文件的详细信息和结构。我建议从1.7版开始。
在Windows上,我使用了免费工具PDF Analyzer来查看PDF文件的内部结构。阅读参考手册时,这将有助于您的理解。
(我隶属于PDF Analyzer,无意推广)
要从PDF中提取文本,请在Linux,BSD等计算机上尝试操作;如果在Windows上,请使用Cygwin:
pdfinfo -layout some_pdf_file.pdf
some_pdf_file.txt
创建一个名为的纯文本文件。PDF文件布局越简单,.txt文件输出就越直接。
十六进制字符经常出现在.txt文件输出中,在文本编辑器中看起来很奇怪。这些十六进制字符通常在PDF中代表卷曲的单引号和双引号,项目符号点,连字符等。
要查看出现十六进制字符的上下文,请运行以下grep命令,并保持原始PDF方便,以查看代码在PDF中代表什么字符:
grep -a --color=always "\\\\[0-9][0-9][0-9]" some_pdf_file.txt
这将提供文档中不同八进制代码的唯一列表:
grep -ao "\\\\[0-9][0-9][0-9]" some_pdf_file.txt|sort|uniq
要将这些十六进制字符转换为ASCII等效项,可以使用grep,sed和bc的组合,我将尽快发布该过程。