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

标签 python pdf pypdf pdfrw

我已经尝试了大约一周的时间来自动从 pdf 中提取图像。不幸的是,我在这里找到的答案没有任何帮助。我使用 pypdf2 看到了同一代码的多种变体,全部带有 ['/XObject']其中,结果是 KeyError .

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

使用pypdf2我已经写了一页pdf并使用Notepad++打开它,查找一些带有 /FlateDecode 的流过滤。

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

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

/Part <</MCID 0 >>BDC

(它还包含很多 float ,有正数和负数)

据我所知,BDC与 Ghostscript 有关。

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

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

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

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

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

最佳答案

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

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

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

关于python - 使用 python 查找和识别 PDF 中的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45543240/

相关文章:

python - 使用 Python 3.4 的服务器到服务器应用程序的 OAuth 2.0,无法导入名称 'SERVICE_ACCOUNT'

python - 为什么boost python会调用复制构造函数?

python - extract 如何从 pdf 文件中提取特定文本 - python

Python-按页分割pdf

python - 如何使用 PYPDF2 从 pdf 中提取表值?

Mac 上的 Python : error during reading from numbers file

python - 使用 ffmpeg 和 python 2.7 在 Fedora 26 25 24 23 或 22 上安装 OpenCV 2.4.13 或 3.x 时出现 VideoCapture 不工作错误

pdf - 批量重命名pdf文件(IEEE文章)

javascript - 是否可以为已用于加载 PDF 文件的 iframe 触发按键事件

Python将pdf转换为图像?