通过 Ghostscript 将 PS 文件转换为 PDF/A,色彩空间问题

Posted

技术标签:

【中文标题】通过 Ghostscript 将 PS 文件转换为 PDF/A,色彩空间问题【英文标题】:Convert PS files to PDF/A via Ghostscript, color space problems 【发布时间】:2014-11-17 10:33:26 【问题描述】:

我遇到了与thread 中讨论的非常相似的问题。使用 GhostScript 9.14 我正在尝试从 Postscript 文件创建有效的 PDF/A。我正在调用以下命令:

"gswin64.exe" -dPDFA=1 -dBATCH -dNOPAUSE -dNOOUTERSAVE
-sColorConversionStrategy=/RGB -sOutputICCProfile=AdobeRGB1998.icc -sDEVICE=pdfwrite 
-sOutputFile=output.pdf -dPDFACompatibilityPolicy=2  "PDFA_defRGB.ps" input.ps

这样做之后,我通过 Apache 的 PDFBox 和通过 www.pdf-tools.com 在线验证。 PDF-tools 告诉我:

Validating file "output.pdf" for conformance level pdfa-1b
A device-specific color space (DeviceCMYK) without an appropriate output intent is used.
The document does not conform to the requested standard.
The document contains device-specific color spaces.

如果我使用 -sColorConversionStrategy=/CMYK 和适当的 CMYK-.icc.file 和 PDFA_def,验证也会失败。给你:

Validating file "output.pdf" for conformance level pdfa-1b
The value of the key N is 3 but must be 4.
A device-specific color space (DeviceCMYK) without an appropriate output intent is used.
The document does not conform to the requested standard.
The document doesn't conform to the PDF reference (missing required entries, wrong value    
types, etc.).
The document contains device-specific color spaces.

Java PDFBox 验证令人惊讶地返回 true(PDF/A 有效)。

如果我使用-sColorConversionStrategy=/UseDeviceIndependentColor 而不是/CMYK,在线验证会失败,结果如上。 PDFBox 再次返回一个有效文件。 如果我使用-sColorConversionStrategy=/UseDeviceIndependentColor 和顶部所示的 RGB 设置,在线验证将失败,与第一条错误消息相同:

Validating file "output.pdf" for conformance level pdfa-1b
A device-specific color space (DeviceCMYK) without an appropriate output intent is used.
The document does not conform to the requested standard.
The document contains device-specific color spaces.

PDFBox 验证也失败。

当使用 -sProcessColorModel=DeviceCMYK 而不是 -sColorConversionStrategy 时,在线验证和 PDFBox 都会检测到有效的 PDF/A。

output.pdf validated successfully.
Status Information
output.pdf (pdfa-1b)

那么,有什么问题吗?据我了解 GhostScript 命令,-sColorConversionStrategy 应确保将输入 PS 的颜色空间转换为输出 PDF 的所需颜色空间 - 无需知道输入文件具有什么颜色空间。显然这是不可能的,因为我还测试了一个具有明显色彩空间 CMYK 的 ps 文件,结果与上面发布的相同。

我需要从获取未知 ps 文件作为输入的 Java 代码调用 GhostScript,将它们转换为有效的 PDF/A 文件。那么有没有可能使用 GhostScript 来做到这一点,唯一的保证是输入文件格式是 Postscript?

感谢您的帮助,

克里斯托弗

【问题讨论】:

确保这不是 PDFBox 问题:1) 尝试最新版本的预检repository.apache.org/content/groups/snapshots/org/apache/… 2) 使用不同的软件进行验证,例如pdf-tools.com/pdf/validate-pdfa-online.aspx 【参考方案1】:

验证不是PDFBox的问题。正如我在 GhostScript 的错误网站上所讨论的(参见 http://bugs.ghostscript.com/show_bug.cgi?id=695686#c10),我在第一篇文章中描述的问题应该使用最新的 Ghostscript 代码(不是 9.15 版本,顺便说一句)来解决。

我用一个名为 -dUseCIEColor 的脏 GS 参数解决了这个问题。所以我以这种方式调用 GS:

"gswin64.exe" -dPDFA=1 -dBATCH -dNOPAUSE -dNOOUTERSAVE 
-sColorConversionStrategy=/RGB -dUseCIEColor -sDEVICE=pdfwrite 
-sOutputFile=output.pdf -dPDFACompatibilityPolicy=2  "PDFA_defRGB.ps" input.ps

虽然 Ken Sharp 不鼓励使用该参数,但我以后会使用它。我无法为我的公司编译最新版本的 GS,只允许使用现成的版本。使用 -dUseCIEColor 调用 GS 会生成有效的 PDFA(Java PDFBox 和 www.pdf-tools.com)。

【讨论】:

以上是关于通过 Ghostscript 将 PS 文件转换为 PDF/A,色彩空间问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 ghostscript 将 .ps 转换为 .pcx

Ghostscript -- 将 PS 转换为 PNG、旋转和缩放

如何使用GhostScript避免tiff上的标头截断。将ps转换为tiff

如何将 .ps 文件转换为 .png 文件?

使用 ghostscript 将 Postscript 转换为文本文件

GHOSTSCRIPT - PS 到 PDF 转换纸张大小