1

我已经尝试了大约一周的时间来自动从 pdf 中提取图像。不幸的是,我在这里找到的答案没有帮助。我已经看到使用 pypdf2 对同一代码进行多种变体,所有变体都包含['/XObject']在其中,这导致KeyError.

我正在寻找的似乎隐藏在流中,我在 's 的字典中找不到pypdf2(即使在递归探索整个结构后,调用.getObject()我能找到的每个间接对象)。

使用pypdf2我已经从 pdf 中写出一页并使用 , 打开它Notepad++,以找到一些带有/FlateDecode过滤器的流。

pdfrw稍微有帮助,让我可以PdfReader(path).pages[page].Contents.stream用来获取A流(不知道如何获取其他流)。

使用zlib,我将其解压缩,并得到以下内容:

/Part <</MCID 0 >>BDC

(它还包含很多浮点数,正负都有)

据我BDC所知,与ghostscript有关。

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

是否有python工具至少可以提取所有流(并识别FlateDecode标签?)

有没有办法让我识别其中隐藏的内容?我期望某些图像格式的开始标签,这显然不是。如何进一步解析此结果以找到可能隐藏在其中的任何图像?

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

编辑:正如帕特里克所说,我似乎在叫错树。xObjects我去了流,因为在打开 PDFNotepad++或运行用于解析 PDF 的各种 python 脚本时找不到任何内容。我设法找到了我怀疑的图像,没有xObject标签,但看起来像一个流标签 - 尽管信息没有被压缩。

4

1 回答 1

0

除非您要提取不常见的内联图像,否则内容流不是查找图像的地方。更常见的情况是 XObject 类型的流,子类型 Image,通常可以在页面的 Resource->XObject 字典中找到(请参阅@mkl 指示的 PDF 参考的第 7.3.3、7.8.3 和 8.95 节)。

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

一个 Image XObject 也可以有一个 softMask,它本身就是它自己的 Image XObject。Form XObjects 也用于 Tiling Patterns,因此可以想象包含 Image XObjects(但它们也不那么常见),或用于 Annotation 的 Normal Appearance(但 Image XObjects 在此类 Annotations 中不太常用,除了可能是 3D 或多媒体注释)。

于 2017-08-08T15:11:56.187 回答