首页 > 解决方案 > Ghostscript / pdfwrite 以彩色 PDF 和 CMYK 颜色而不是 RGB 生成灰色页面

问题描述

背景

在 PHP Web 应用程序中,我使用 DomPDF 从 HTML 和 CSS 创建动态 PDF,并使用 Ghostscript 的pdfwrite设备将该动态创建的 PDF 与两个现有的第三方 PDF 合并。

我有 3 个具有不同 ghostscript 版本的环境:

Dev  (Win10)    GPL Ghostscript 8.64 (2009-02-03) 
Test (Linux)    GPL Ghostscript 9.06 (2012-08-08) 
Prod (Linux)    GPL Ghostscript 8.70 (2009-07-31)

问题

预期的

实际结果

DOMPDF 创建的 PDF 本身是gs此处的输入,看起来还不错。

identify在 PDF 上输出

(ImageMagick 6.9.9-34 Q16 x86)

开发上的输出:

XXX.pdf[0] PDF 595x842 595x842+0+0 16-bit sRGB 69761B 0.000u 0:00.010
XXX.pdf[1] PDF 595x842 595x842+0+0 16-bit sRGB 69761B 0.000u 0:00.004
XXX.pdf[2] PDF 595x842 595x842+0+0 16-bit sRGB 69761B 0.000u 0:00.000

产品上的输出:

XXX.pdf[0] PDF 595x842 595x842+0+0 16-bit ColorSeparation CMYK 2004080B 0.016u 0:00.013
XXX.pdf[1] PDF 595x842 595x842+0+0 16-bit ColorSeparation CMYK 2004080B 0.016u 0:00.007
XXX.pdf[2] PDF 595x842 595x842+0+0 16-bit ColorSeparation CMYK 2004080B 0.000u 0:00.003

Prod 上的所有输入 PDFgs都是 sRGB,根据identify

<third-party-pdf> PDF 595x842 595x842+0+0 16-bit sRGB 65728B 0.000u 0:00.000
<dompdf-created>  PDF 595x842 595x842+0+0 16-bit sRGB 29348B 0.000u 0:00.000

注意:我不确定identify颜色空间的确切含义(因为 PDF 文档甚至页面页面不需要具有单一的颜色空间 AFAIK)。虽然大多数对象是 RGB,但第三方 PDF 也可能包含一些 Pantone 色对象。

到目前为止我尝试过的

也许有人知道进一步调查最有希望的方法是什么,或者例如,我如何将测试环境的确切 gs 配置应用于 prod 环境(我怀疑它是 100% 可能的,因为涉及不同的版本)。

标签: phpcolorsghostscript

解决方案


好吧,使用三个不同的(而且都是相当老的,即使是最新的也是 6 岁)版本的 Ghostscript 肯定不会有帮助。

首先要注意的是 Ghostscript 不会合并”PDF 文件。这里描述了实际的过程

因此,所有输入文件都将被完全解释,分解为图形基元,然后重新组装一个新文件。现在一般来说,除非另有说明,否则 pdfwrite 设备将尝试在原始颜色空间中保持颜色规范。您的观点是正确的,PDF 文件可能包含多个不同的颜色空间,因此我会非常谨慎地对待“识别”结果。

你没有提供输入文件,也没有提供任何输出文件,所以我无法对它们进行任何分析,所以它真的不可能告诉你发生了什么。Ghostscript 本身和 pdfwrite 设备没有我认为您期望的任何“配置”。所有配置都是通过命令行完成的,因此如果您为所有安装运行相同的命令行,那么您正在运行相同的“配置”。

我不确定为什么您在“应用确切的选项”时遇到问题。您肯定可以确定您自己的代码正在创建的 Ghostscript 命令行吗?

无论如何,旧版本显然不如新版本功能丰富和功能强大。可以想象,有一个特定于您的 8.70 版本的错误,这是由于一个新功能在该版本中存在问题(请注意,此处的次要版本号凸起表示发生了重大变化)。这也可以解释为什么您从(非常)旧版本中获得 sRGB,而从较新版本中获得 CMYK。

如果您提供要查看的文件,我会告诉您有什么区别。我的建议是在所有三个平台上使用相同的版本,我建议使用不到 6 年的软件可能会有所帮助。尤其是因为您让自己对许多已知的、已发布的安全漏洞持开放态度。至少其中一个已经“在野外”看到过。

我也不会使用您提供的某些命令行开关,-dUseCIEColor 是一个糟糕的主意,请不要这样做(如果您这样做,较新版本的 Ghostscript 会特别警告您)。不要无故更改 ColorConversionStrategy。颜色管理在 8.x 和 9.x 系列之间完全改变了,在此之前 -sOutptuICCProfile 将不起作用,因此您正在尝试应用早期版本不支持的控件。


推荐阅读