在一个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
输出(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
根据gs
,所有在Prod上输入到identify
的PDF都是sRGB:
<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 -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile={$concatenatedPDFTempFileName} {$pdfsToConcatString}
(此处为PHP变量语法)gs
个选项之间存在3种差异。-sColorConversionStrategy=RGB -dUseCIEColor=true -sOutputICCProfile=default_rgb.icc
的各种明显命令开关的组合也许有人知道什么是最有希望进行进一步调查的方法,或者例如,我如何将测试环境的确切gs配置应用于产品环境(我怀疑这是100%的可能,因为其中涉及不同的版本)。
答案 0 :(得分:2)
嗯,使用三个不同的(而且都是相当老的,甚至最新的都是6岁)的Ghostscript版本肯定不会有帮助。
首先要注意的是,Ghostscript不会不“合并” PDF文件。描述了实际过程here
因此,所有输入文件将被完全解释,分解为图形基元,然后重新组装一个新文件。现在,通常,除非另有说明,否则pdfwrite设备将尝试维护原始色彩空间中的色彩规范。您的观点是正确的,PDF文件可能包含多个不同的色彩空间,因此,我将谨慎对待“识别”结果。
您没有提供输入文件,也没有提供任何输出文件,因此我无法对其进行任何分析,因此实际上无法告诉您发生了什么。 Ghostscript本身和pdfwrite设备没有我认为您期望的任何“配置”。所有配置都是通过命令行完成的,因此,如果您为所有安装运行相同的命令行,那么您将运行相同的“配置”。
我不确定您为什么在“应用确切选项”时遇到麻烦。您肯定可以确定自己的代码正在创建的Ghostscript命令行吗?
很明显,较新版本而言,较旧版本的功能丰富且功能不足。可以想象的是,由于新功能,您的8.70版本存在一个特定的错误,该错误在该版本中存在(请注意,此处的次要版本号颠簸表明有一些重大更改)。这也可以解释为什么您从(非常)旧版本中获得sRGB,而从较新版本中获得CMYK。
如果您提供要查看的文件,我会告诉您有什么区别。我的建议是在所有三个平台上使用相同的版本,我建议使用少于6年的软件可能会有所帮助。尤其重要的是,您将自己暴露于许多已知的已发布安全漏洞。至少有一个是在“野外”看到的。
我也不会不使用您提供的某些命令行开关,-dUseCIEColor是一个糟糕的主意,请不要这样做(如果您这样做,更新版本的Ghostscript会特别警告您) 。没有正当理由,请勿更改ColorConversionStrategy。在8.x和9.x系列之间,色彩管理“完全”更改,在此之前-sOutptuICCProfile无效,因此,您尝试应用早期版本中不支持的控件。