PDF解析——提取单页
PDF Parsing -- Extract single page
我最近在 Python 中编写了一个程序,它允许我读取 PDF,接受用户的一些命令,并输出部分或全部原始 PDF,页面顺序不同。您还可以 select 您感兴趣的页面。当时,有一个很棒的图书馆 PyPDF2。它完成了所有繁重的工作。
现在,我正在使用另一种语言 (Haskell) 工作,这种语言基本上没有我能找到的 PDF 支持。我正在考虑建立自己的个人图书馆。但是,在查看 PDF 文件的内容时,我发现很难确定特定页面的位置。我可以知道文件中总共有多少页,但我无法查看文件的特定部分并说,"This is page X of Y." 那么,我如何根据页面分离出内容?如果我不知道页面内容是什么,我怎么能根据页面拆分文件呢?
您首先需要一份 PDF 规范。您可以从 Adobe 网站免费下载:
http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf
在该文档中,请查看第 7.7.3 节,其中解释了 "Page Tree" 的工作原理。
基本上,一个 PDF 文件包含一棵树(Adobe 建议它应该是一棵平衡树,但您没有义务遵守这一点)以 "Pages" 对象开头,可选择包含一些中间对象级别对象并以 "Page" 个对象结尾。例如:
Pages
. Pages
. Page (1)
. Page (2)
. Page (3)
. Pages
. Pages
. Page (4)
. Page (5)
. Pages
. Page (6)
. Page (7)
这棵树的层数没有限制。要找到给定的页面,您必须从头到尾遍历树,在找到叶 "Page" 对象时分配页码。我在上面的例子中指出了这些对象代表的页码(从页面索引 1 开始)。
获得页面对象后,您可以使用它(可能还有它的父对象)来查找该页面所需的资源。再次查看 "Resources" 词典的 PDF 规范,注意有关继承的讨论。
我最近在 Python 中编写了一个程序,它允许我读取 PDF,接受用户的一些命令,并输出部分或全部原始 PDF,页面顺序不同。您还可以 select 您感兴趣的页面。当时,有一个很棒的图书馆 PyPDF2。它完成了所有繁重的工作。
现在,我正在使用另一种语言 (Haskell) 工作,这种语言基本上没有我能找到的 PDF 支持。我正在考虑建立自己的个人图书馆。但是,在查看 PDF 文件的内容时,我发现很难确定特定页面的位置。我可以知道文件中总共有多少页,但我无法查看文件的特定部分并说,"This is page X of Y." 那么,我如何根据页面分离出内容?如果我不知道页面内容是什么,我怎么能根据页面拆分文件呢?
您首先需要一份 PDF 规范。您可以从 Adobe 网站免费下载: http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf
在该文档中,请查看第 7.7.3 节,其中解释了 "Page Tree" 的工作原理。
基本上,一个 PDF 文件包含一棵树(Adobe 建议它应该是一棵平衡树,但您没有义务遵守这一点)以 "Pages" 对象开头,可选择包含一些中间对象级别对象并以 "Page" 个对象结尾。例如:
Pages
. Pages
. Page (1)
. Page (2)
. Page (3)
. Pages
. Pages
. Page (4)
. Page (5)
. Pages
. Page (6)
. Page (7)
这棵树的层数没有限制。要找到给定的页面,您必须从头到尾遍历树,在找到叶 "Page" 对象时分配页码。我在上面的例子中指出了这些对象代表的页码(从页面索引 1 开始)。
获得页面对象后,您可以使用它(可能还有它的父对象)来查找该页面所需的资源。再次查看 "Resources" 词典的 PDF 规范,注意有关继承的讨论。