使用pyPDF从文档中检索页码

发布于 2021-01-29 15:14:05

目前,我正在考虑与pyPdf进行一些PDF合并,但是有时输入的顺序不正确,因此我正在寻找每个页面的页码以确定其应进入的顺序(例如,如果有人将一本书分成20张10页的PDF,我想将它们放回去)。

我有两个问题-1.)我知道有时页码存储在文档数据中的某个位置,因为我已经看到在Adobe上呈现的PDF格式为[1243](150个中的10个),但是我已经阅读了此类文档被放入pyPDF中,我找不到任何指示页码的信息-
该文件存储在哪里?

2.)如果没有1号途径,我想我可以遍历给定页面上的对象以尝试找到页码-
可能是它自己的对象中只有一个数字。但是,我似乎找不到确定对象内容的任何明确方法。如果我运行:

pdf.getPage(0).getContents()

这通常会返回:

{'/Filter': '/FlateDecode'}

或返回IndirectObject(num,num)对象的列表。我真的不知道该如何处理这些,据我所知,也没有真正的文档。有没有人熟悉这种可以为我指明正确方向的东西?

关注者
0
被浏览
53
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    有关完整文档,请参见Adobe的978页PDF参考。:-)

    更具体地说,PDF文件包含元数据,该元数据指示如何将PDF的物理页面映射到逻辑页码以及应如何格式化页码。这是您获得规范结果的地方。该页面的示例2显示了它在PDF标记中的外观。您必须将其捕获,解析并自己执行映射。

    在PyPDF中,要获取此信息,请尝试作为起点:

    pdf.trailer["/Root"]["/PageLabels"]["/Nums"]
    

    顺便说一句,当您看到一个IndirectObject实例时,可以调用其getObject()方法来检索所指向的实际对象。

    如您所说,您可以选择检查文本对象并尝试找出哪个是页码。您可以extractText()为此使用page对象,但是您将获得一个字符串,并且必须尝试从中找出页码。(当然,页码可能是罗马的或字母的,而不是数字的,有些页面可能没有编号。)相反,请看看extractText()其工作的实际效果(毕竟PyPDF是用Python编写的)并将其用作例程的基础,该例程分别检查页面上的每个文本对象以查看其是否像页码。警惕上面有很多页码的目录/索引页面!



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看