使用pyPDF从文档中检索页码
目前,我正在考虑与pyPdf进行一些PDF合并,但是有时输入的顺序不正确,因此我正在寻找每个页面的页码以确定其应进入的顺序(例如,如果有人将一本书分成20张10页的PDF,我想将它们放回去)。
我有两个问题-1.)我知道有时页码存储在文档数据中的某个位置,因为我已经看到在Adobe上呈现的PDF格式为[1243](150个中的10个),但是我已经阅读了此类文档被放入pyPDF中,我找不到任何指示页码的信息-
该文件存储在哪里?
2.)如果没有1号途径,我想我可以遍历给定页面上的对象以尝试找到页码-
可能是它自己的对象中只有一个数字。但是,我似乎找不到确定对象内容的任何明确方法。如果我运行:
pdf.getPage(0).getContents()
这通常会返回:
{'/Filter': '/FlateDecode'}
或返回IndirectObject(num,num)对象的列表。我真的不知道该如何处理这些,据我所知,也没有真正的文档。有没有人熟悉这种可以为我指明正确方向的东西?
-
有关完整文档,请参见Adobe的978页PDF参考。:-)
更具体地说,PDF文件包含元数据,该元数据指示如何将PDF的物理页面映射到逻辑页码以及应如何格式化页码。这是您获得规范结果的地方。该页面的示例2显示了它在PDF标记中的外观。您必须将其捕获,解析并自己执行映射。
在PyPDF中,要获取此信息,请尝试作为起点:
pdf.trailer["/Root"]["/PageLabels"]["/Nums"]
顺便说一句,当您看到一个
IndirectObject
实例时,可以调用其getObject()
方法来检索所指向的实际对象。如您所说,您可以选择检查文本对象并尝试找出哪个是页码。您可以
extractText()
为此使用page对象,但是您将获得一个字符串,并且必须尝试从中找出页码。(当然,页码可能是罗马的或字母的,而不是数字的,有些页面可能没有编号。)相反,请看看extractText()
其工作的实际效果(毕竟PyPDF是用Python编写的)并将其用作例程的基础,该例程分别检查页面上的每个文本对象以查看其是否像页码。警惕上面有很多页码的目录/索引页面!