我有一堆 PDF 文件,其中一些是纯文本,但有些完全或部分保存为“每页一个图像”,因为它们是从扫描仪生成的。
我需要提取PDF 中包含的所有图像,然后分别检查每个图像。
我能够使用此处找到的 python 脚本提取大部分图像,请参见问题:
一些包含的图像是使用 JBIG2 编码的,我找不到任何 python 或其他工具来将 jbig2 转换为可以使用通用图形工具轻松打开的东西。
好吧,我已经为此苦苦挣扎了好几个星期,SO 的许多答案帮助我度过了难关,但总是缺少一些东西,显然这里没有人遇到过 jbig2 编码图像的问题。
在我要扫描的一堆 PDF 中,jbig2 编码的图像非常流行。
据我了解,有许多复印/扫描机可以扫描纸张并将其转换为包含 jbig2 编码图像的 PDF 文件。
因此,经过多天的测试,决定寻求dkgedal 很久以前在这里提出的答案。
这是我在 Linux 上的一步一步:(如果你有其他操作系统,我建议使用 Linux docker,这会容易得多。)
第一步:
apt-get install poppler-utils 然后我能够运行名为 pdfimages 的命令行工具,如下所示:
pdfimages -all myfile.pdf ./images_found/
Run Code Online (Sandbox Code Playgroud)
使用上面的命令,您将能够提取myfile.pdf 中包含的所有图像,并将它们保存在 images_found 中(您必须之前创建 images_found )
在列表中,您可以找到多种类型的图像(取决于您的 pdf),例如:png、jpg、tiff;所有这些都可以使用任何图形工具轻松读取。
然后您将得到一些名为 -145.jb2e 和 -145.jb2g 的文件。
这 2 个文件包含一张用 jbig2 编码的图像,该图像保存在 2 个不同的文件中,一个用于标题,一个用于数据
我又花了很多天的时间试图找出如何将这些文件转换为可读的文件,最后我遇到了这个名为jbig2dec的工具
所以首先你需要安装这个神奇的工具:
apt-get 安装 jbig2dec
然后你可以运行:
jbig2dec -t png -145.jb2g -145.jb2e
Run Code Online (Sandbox Code Playgroud)
您最终将能够将所有提取的图像转换为有用的东西。
祝你好运!