GhostScript:Windows 7转换成功,Linux失败



我正在使用Ghostscript 9.05从PDF生成图像作为应用程序的一部分(在Java中作为进程运行)。

我最近遇到了一个问题,即一些 PDF 到图像的转换在 linux 框上失败,并出现以下错误:

**** This file had errors that were repaired or ignored.
**** The file was produced by:
**** >>>> Acrobat Distiller 8.3.1 (Macintosh) <<<<
**** Please notify the author of the software that produced this
**** file that it does not conform to Adobe's published PDF 
**** specification.

每个页面都会抛出与此类似的错误:

**** Warning: File has insufficient data for an image.
%%BoundingBox: 77 36 797 1082
%%HiResBoundingBox: 77.760003 36.720001 796.320030 1081.440041
Page 141
warning: ignoring invalid option raw
error: cannot decode code stream
unable to decode JPX image data.

但是,在 Win7 计算机上本地运行相同的转换时,不会发生错误。

我知道它的简短和狭窄是"将 PDF 发回并让他们向您发送一个工作文件"——但我很好奇为什么这会在 linux 盒子上失败,但在 Windows 机器上没有错误地成功(并产生无错误的图像)?

有什么想法吗?

我目前不愿意打开错误报告,因为我不知道的 Linux 和 WIndows 版本之间可能存在显着差异。

更新

在查看了Ghostscript如何在我们的Linux机器上构建(我们正在运行Ubuntu 12.04 64位长期支持版本)之后,我收集了以下信息:

对于 jpeg2000 操作,Ghostscript 使用的是 JasPer JPEG-2000 运行时库版本 1.900.1-13(JPEG-2000 Part-1 的 ISO 参考实现)。

JasPer是使用libjpeg-turbo8库构建的。

根据贾斯珀网站

JasPer 软件已包含在 JPEG-2000 Part-5

标准(即 ISO/IEC 15444-5)中,作为 JPEG-2000 Part-1 编解码器的官方参考实现。

Ghostscript被列为已知使用JasPer的项目之一。看起来Ubuntu正在使用JasPer,ISO参考实现,Ghostscript的Ubuntu包源代码将JasPer(libjasper-dev)列为构建的依赖项,而不是openJPEG。[来源]

目前看来,唯一的选择是尝试不同版本的 linux,构建 ghostscript 版本并对其进行测试。

一种可能性是你运行的是64位Linux和32位Windows二进制文件。

然而,最有可能的问题是你的Linux发行版选择使用"共享库"构建Ghostscript。Ghostscript使用的某些第三方库(例如FReeType,Litle CMS等)可以动态链接而不是静态链接,并在运行时加载。

我注意到这些图像是JPX(JPEG 2000),这些图像将使用OpenJPEG库。然而,Ghostscript 附带的 OpenJPEG 源代码不是 1.5 版本,而是 1.5 加上从即将推出的 2.0 中提取的一些位以及我们需要添加的一些修复(并且上游,我们相信它们将被合并到 2.0 中)。我们希望在不久的将来,当下一个版本发布时,可以使用此代码的标准版本。

如果您的Linux发行版选择使用OpenJPEG作为共享库构建Ghostscript,那么您将无法从这些源代码更改中受益,并且JPX解码器也无法正常工作。GS 的 Windows 版本没有"开箱即用"的方法来将第三方库构建为 DLL,因此(除非您自己做了很多工作)它始终使用我们提供的第三方库的源代码。

如果你自己从源代码(在Linux上)构建GS,那么你很可能会发现它的行为非常好。我还冒昧地建议PDF文件实际上没有任何问题,只是使用了OpenJPEG的版本。

每次我们提交到 Ghostscript 存储库时,我们都会进行大约 60,000 次测试,但显然我们针对实际发布的代码进行这些测试。至少这意味着我们对我们发送的内容有合理程度的信心,前提是您使用我们提供的代码。我们不建议使用共享库构建 Ghostscript,但我们所说的一切都不能说服各种 Linux 发行商,所以这是我们必须忍受的。

最新更新