我已经尝试了大约一周来自动从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或多媒体注释)。