我已经尝试了大约一周的时间来自动从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++
标签,但看起来像是一个流标签 - 虽然信息没有被压缩。
答案 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多媒体注释)。