从 Linux 命令行查找 PDF 中的色彩空间

rze*_*lek 6 linux pdf image

我需要检查给定的 PDF 文件是否完全在 CMYK 色彩空间中。您可能知道,打印需要它。

目前,它是使用 Adob​​e 的 GUI 应用程序完成的,但这需要很多时间,并且我们需要使用 Linux 脚本来自动化它。

我测试了许多库,但每个库都给了我无效的结果或不支持更新的 PDF 规范。

  • 我还没有找到解决方案ghostscript
  • 从 pdf 导出图像并不是一个足够好的解决方案,因为还需要验证路径和其他媒体。
  • identify -verbose给出无效的结果(糟糕的色彩空间,而且也糟糕的 DPI)。

据我所知,PDF 文档中的元素可以有不同的颜色空间,我想检查每个元素是否都是 CMYK。

Cra*_*isz 6

您可以通过pdfimages执行此操作:

pdfimages -list filename.pdf
Run Code Online (Sandbox Code Playgroud)

对于包含 CMYK 图像的文件,输出类似于:

page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    5197  6732  cmyk    4   8  jpeg   no         5  0   600   601 32.3M  24%
   1     1 mask     5197  6732  -       1   1  jpeg   no         5  0   600   601 32.3M 775%
Run Code Online (Sandbox Code Playgroud)

如果所有图像都使用 ICC 配置文件,则输出类似于:

page   num  type   width height color comp bpc  enc interp  object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
   1     0 image    5197  6732  icc     3   8  jpeg   no         8  0   600   601 7080K 6.9%
   1     1 mask     5197  6732  -       1   1  jpeg   no         8  0   600   601 7080K 166%
Run Code Online (Sandbox Code Playgroud)


pli*_*nth 1

从编码的角度来看,您需要使用一个工具来渲染 PDF 文档中的每个页面,但它需要调用每个 PDF 绘图命令的瓶颈,而不是实际绘制内容。

从那里,您需要拦截所有颜色运算符、所有 gstate 运算符、所有图像运算符,并在所有 Form XObject 上递归并标记所有非 CMYK 的内容。请注意,某些颜色空间会很棘手,例如您可以拥有一个在幕后使用 CMYK ICC 颜色空间的调色板颜色空间。您还可能遇到这样的情况:应用程序将颜色设置为 RGB 颜色,从不标记页面,然后在标记之前切换到 CMYK。