从linux命令行查找PDF中的颜色空间



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

目前,它是使用Adobe的GUI应用程序完成的,但它需要很多时间,我们需要用linux脚本自动化它。

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

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

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

您可以通过pdfimages:

pdfimages -list filename.pdf

对于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%

如果所有图像都使用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%

从编码的角度来看,您需要访问能够呈现PDF文档中的每个页面的工具,但它需要调用每个PDF绘制命令的瓶颈,而不是实际绘制内容。

从那里你需要拦截所有的颜色操作符,所有的gstate操作符,所有的图像操作符和递归在所有的Form XObjects和标记一切不是CMYK。请注意,有些颜色空间会很棘手,例如,你可以有一个使用CMYK ICC颜色空间的调色板颜色空间。你也可能遇到这样的情况:应用程序将颜色设置为RGB颜色,从不标记页面,然后在标记之前切换到CMYK。

最新更新