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

我正在寻找的东西似乎隐藏在流中,而在pypdf2的词典中找不到(即使在递归地浏览整个结构之后,在我可以找到的每个间接对象上调用.getObject())。

使用pypdf2我已经从pdf上写了一页,然后使用Notepad++打开了它,以使用/FlateDecode过滤器查找一些流。

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

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

/Part <</MCID 0 >>BDC


(它也包含很多浮点数,正负都可以)

据我发现,BDC与ghostscript有关。

在这一点上,我放弃了,决定寻求帮助。

是否至少有Python工具提取所有流(并标识FlateDecode标签?)

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

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

编辑:正如帕特里克(Patrick)所说,看来我在吠错树。由于在xObjects中打开PDF或运行用于解析PDF的各种python脚本时找不到任何Notepad++,所以我参加了流式会议。我设法找到我怀疑的图像,没有xObject标签,但看起来像流标签-尽管信息没有压缩。

最佳答案

除非您要提取并不常见的内嵌图像,否则内容流不是查找图像的地方。更常见的情况是XObject类型的Stream,其子类型为Image,通常在页面的Resource-> XObject词典中找到(请参阅@mkl所指的PDF Reference的7.3.3、7.8.3和8.95节)。

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

一个Image XObject也可以有一个softMask,它本身就是它自己的Image XObject。表格XObject也用于平铺模式,因此可以想象包含图像XObject(但它们也不常见),或用于注释的正常外观(但是图像XObject在此类注释中使用较少,除了3D或多媒体注释)。

10-06 00:01