目前,我正在考虑与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 Reference。 :-)
更具体地说,PDF文件包含元数据,该元数据指示如何将PDF的物理页面映射到逻辑页码以及应如何格式化页码。这是您获得规范结果的地方。示例2 of this page显示了它在PDF标记中的外观。您必须将其捕获,解析并自己执行映射。
在PyPDF中,要获取此信息,请尝试作为起点:
pdf.trailer["/Root"]["/PageLabels"]["/Nums"]
顺便说一句,当您看到
IndirectObject
实例时,可以调用其getObject()
方法来检索所指向的实际对象。如您所说,您可以选择检查文本对象并尝试找出哪个是页码。您可以为此使用页面对象的
extractText()
,但是您将返回一个字符串,并且必须尝试从中找出页面编号。 (当然,页码可能是罗马的或字母的,而不是数字的,有些页面可能没有编号。)相反,请查看extractText()
的实际工作方式(毕竟PyPDF是用Python编写的)并使用它作为例程的基础,该例程分别检查页面上的每个文本对象以查看其是否像页码。警惕上面有很多页码的TOC/索引页!关于python - 使用pyPDF从文档中检索页码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12360999/