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

使用python查找和识别PDF中的流,python,pdf,pypdf2,pdfrw,Python,Pdf,Pypdf2,Pdfrw,我已经尝试了大约一周从pdf自动提取图像。不幸的是,我在这里找到的答案毫无帮助。我在使用pypdf2的同一代码上看到了多个变体,它们都带有['/XObject'],这会导致键错误 我所寻找的似乎隐藏在流中,这在pypdf2的字典中找不到(即使递归地探索整个结构,对我能找到的每个间接对象调用.getObject()) 使用pypdf2我已经从pdf中写下了一页,并使用Notepad++打开它,以使用/FlateDecode过滤器查找一些流 pdfrw稍有帮助,允许我使用PdfReader(path

我已经尝试了大约一周从pdf自动提取图像。不幸的是,我在这里找到的答案毫无帮助。我在使用pypdf2的同一代码上看到了多个变体,它们都带有
['/XObject']
,这会导致
键错误

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

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

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

使用
zlib
,我对它进行了解压缩,得到了以下内容:

/Part <</MCID 0 >>BDC
/Part BDC
(它还包含许多浮点数字,包括正数和负数)

据我所知,
BDC
与ghostscript有关

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

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

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

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


编辑:正如帕特里克所说,似乎我找错了方向。因为在
Notepad++
中打开PDF时,或者在运行用于解析PDF的各种python脚本时,我找不到任何
xObject
,所以我转到了streams。我设法找到了我怀疑的图像,没有
xObject
标记,但是有一个看起来像流标记的东西——尽管信息没有被压缩。

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

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


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

有很多工具生成PDF文件(其中许多近乎缺陷),如果没有看到给你带来麻烦的特定文档的样本,就很难给出建议。你可以分享一些样本吗?@PauloScardine抱歉,我意识到我的措辞意味着我在寻找关于特定PDF的帮助。PDF文档正确地显示在阅读器中,我可以毫无问题地从中提取一页。只是不能为流的内容找到任何引用(或者任何可以为我轻松做到的python工具。那也很好)。无论如何,正在寻找能够在任何正确显示的PDF文档上工作的内容。您得到了一些以:
/Part BDC
开头的内容,但此时放弃了?为什么?您成功地到达了PDF内容流。您只需使用PDF规范ISO 32000-1来解释流内容。@mkl因为我的搜索es没有提到ISO 320000-1。我会查一下。谢谢!作为提示:自2008年以来,Adobe一直在提供免费下载的版本