我收到了一些包含图片的 pdf 文件。原始图片已丢失,因此我需要提取它们。我有 Adobe Acrobat Pro,因此我使用提取它们Advanced > Document Processing > Export All Images
(有四个选项:jpeg、png、tiff、jpeg2000)。但是,我想以原始格式提取它们,而这显然不是 jpeg:我也测试了pdfimages.exe 来自 xpdf,概述如下,这给出了.ppm 文件,而不是 jpeg。
因此我尝试了 ImageMagick 的识别,它给了我以下信息:
identify images-000.ppm
images-000.ppm PPM 870x1181 870x1181+0+0 8-bit sRGB 3.082MB 0.000u 0:00.000
这是否表明它是嵌入的 .bmp?如何判断?我实际上希望 Acrobat 中有一个功能可以识别图像的格式,但我找不到它。
那么,识别 pdf 中图像的图像格式的最佳方法是什么?
(我更喜欢通过 Acrobat 提取,因为它具有批处理功能)。
答案1
据我所知,PDF 中嵌入的 Image XObject 不存储有关原始图像格式的任何信息。最多,如果它是嵌入的 JPEG,则可以按原样提取,但在所有其他情况下,您最终会得到需要转换的 PxM 图像。
答案2
该图片为便携式像素图文件格式。(见维基百科:Netpbm 格式了解详情)。
可以使用 netbmp 工具将这些转换为更现代的 bmp。
语法如下:ppmtobmp images-000.ppm > images-000.bmp
。
http://netpbm.sourceforge.net/是 netpbm 的主页。
文档中有多张图片吗?或者我们是否可以只在 PDF 中搜索带有 的行identify images-000.ppm
,从该位置剪切文件并将其提供给 ppmtobmp?实现自动化应该不难。
答案3
pdfimage --list
您pdfimage --list myfile.pdf
可以在专栏中阅读恩科原始编码。
以下示例取自扫描仪生成的 PDF 文件,其中包含文本(无颜色)300BPI 分辨率图像,您可能会读到jbig2:
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
-------------------------------------------------------------------------------------------
1 0 image 2340 1654 gray 1 1 jbig2 no 20 0 283 142 39.7K 8.4%
2 1 image 2340 1654 gray 1 1 jbig2 no 25 0 283 142 41.5K 8.8%
3 2 image 2340 1654 gray 1 1 jbig2 no 30 0 283 142 43.1K 9.1%
4 3 image 2340 1654 gray 1 1 jbig2 no 35 0 283 142 46.9K 10%
在这种情况下,格式为jbig2; 您可以从手册(帮助)中阅读
-jbig2
将 JBIG2 格式的图像写入 JBIG2 文件,而不是默认格式。PDF 中的 JBIG2 数据属于嵌入类型。JBIG2 的嵌入类型有一个可选的单独文件,其中包含全局数据。嵌入数据以扩展名 .jb2e 写入,全局数据(如果可用)将以扩展名 .jb2g 写入相同的图像编号。这两个文件的内容与 PDF 中的 JBIG2 数据相同。
您可以使用命令提取它们
pdfimages myfile.pdf -jbig2 A
笔记。 A
是提取图像名称的基础。您将获得文件A-000.jb2e
,A-001.jb2e
...当然,对于其他格式,您应该使用相对选项-png
,-tiff
...
自动提取:-all
选项
pdfimages MyFile.pdf -all B
-全部
以原始格式写入 JPEG、JPEG2000、JBIG2 和 CCITT 图像。CMYK 文件将写入 TIFF 文件。所有其他图像将写入 PNG 文件。这相当于指定选项 -png -tiff -j -jp2 -jbig2 -ccitt。
在这种情况下,B
这是提取的图像名称的基础。
笔记。但是,您可能需要查看--list
输出才能了解哪个 PNG 输出文件最初被编码为 PNG 以及哪个被转换为 PNG。