使用python在PDF中查找和识别流

时间:2017-08-07 09:10:06

标签: python pdf pypdf2 pdfrw

我已经尝试了大约一周的时间来自动从pdf中提取图像。不幸的是,我在这里找到的答案毫无帮助。我使用pypdf2看到了相同代码的多种变体,其中包含['/XObject'],结果为KeyError

我正在寻找的东西似乎隐藏在溪流中,我无法在pypdf2的词典中找到它(即使在递归地探索整个结构之后,调用{{ 1}}在我能找到的每个间接对象上。)

使用.getObject()我已经在pdf上写了一页并使用pypdf2打开它,找到一些带有Notepad++过滤器的流。

/FlateDecode稍微有点帮助,允许我使用pdfrw来获取 A 流(不知道如何获取其他人)。

使用PdfReader(path).pages[page].Contents.stream,我将其解压缩,并从以下开始:

zlib

(它还包含许多浮点数,包括正数和负数)

根据我的发现,/Part <</MCID 0 >>BDC 与ghostscript有关。

此时我放弃了,决定寻求帮助。

是否有一个python工具,至少提取所有流(并标识BDC标签?)

有没有办法让我找出隐藏在那里的东西?我期待一些图像格式的开始标记,这显然不是。如何进一步解析此结果以查找可能隐藏在其中的任何图像?

我正在寻找可以适用于任何正确显示的PDF的内容。一些工具可以进一步解析,或者至少帮助我理解流,或者甚至是一个可以帮助我理解正在发生的事情的参考。

编辑:正如帕特里克所说,似乎我正在咆哮着错误的树。我去了溪流,因为在FlateDecode中打开PDF时,或者在运行用于解析PDF的各种python脚本时,我找不到任何xObjects。我设法找到了我怀疑的图像,没有Notepad++标签,但看起来像是一个流标签 - 虽然信息没有被压缩。

1 个答案:

答案 0 :(得分:1)

除非您要提取不常见的内嵌图像,否则内容流不是查找图像的地方。更常见的情况是XObject类型的Streams,子类型Image,它们通常位于页面的Resource-&gt; XObject字典中(参见@mkl指示的PDF参考文档的7.3.3,7.8.3和8.95节)。

或者,Image XObjects也可以在Form XObjects(子类型Form,它表示它们有自己的内容流)中找到它们自己的Resource-&gt; XObject字典,因此搜索Image XObjects可以是递归的。

Image XObject也可以有一个softMask,它本身就是它自己的Image XObject。表单XObjects也用于平铺模式,因此可以想象包含Image XObjects(但它们也不常见),或者在Annotation的Normal Appearance中使用(但是Image XObjects在这样的Annotations中不太常用,除了3D或者3D多媒体注释)。