PostScript - 使用 Ghostscript 时出错 "pdfwrite"

PostScript - Error when Using Ghostscript "pdfwrite"

我想先了解一下我正在使用遗留代码,因此我不得不忍受不太理想的情况,因此我正在做一些古怪的事情。在我获得重写批准之前,我将不得不到期。

上下文

这是我的情况。该应用程序是一个 "simple" 应用程序,因为它报告了 SQL 数据库。不管是好是坏,它都使用 postscript 构建报告。它利用嵌入到应用程序目录中的 Ghostscript dll。更重要的是,有人要求我包括输出已经是 PDF 格式的 SSIS 报告。为了兼容性,我需要将这些 PDF 转换为 postscript,即使在大多数情况下它们稍后会立即转换回 PDF。我知道这很可能是糟糕的设计,但某些功能需要这个,而这只是目前的情况。我正在使用 GhostScript 来处理转换。

观察到的行为 以下行为是将 PDF 转换为 PS、通过应用程序然后转换回 PDF 后观察到的行为。

当使用 "sDevice=pswrite" 时,一切正常,除了报告以较差的分辨率编译,尽管我如何调整分辨率选项。

当利用 "sDevice=ps2write" 据我所知是当前接受的协议时,PDF 将不会呈现并产生以下错误。

ERROR:
undefined
OFFENDING COMMAND:
U1!‘WVt92\a
STACK:
--nostringval--
20

仅当使用来自通过 Web 客户端访问的报表服务器的报表时才会出现上述错误。我可以确认 PDF returns 成功并且没有损坏。

当应用程序上 运行 本地 SSIS 包时,生成的 PDF 能够被成功处理。

当使用PS2Write将原始PDF转换为PS时,评论填充如下

%!PS-Adobe-3.0
%%BoundingBox: 0 0 612 792
%%Creator: GPL Ghostscript 905 (ps2write)
%%LanguageLevel: 2
%%CreationDate: D:20171003154139-05'00'
%%Pages: 3
%%EndComments

pswrite 产生

%!PS-Adobe-3.0
%%Pages: (atend)
%%BoundingBox: 21 30 761 576
%%HiResBoundingBox: 21.600000 30.400000 760.566016 575.100000
%.....................................
%%Creator: GPL Ghostscript 905 (pswrite)
%%CreationDate: 2017/10/03 15:53:40
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%EndComments
%%BeginProlog

怀疑

我怀疑 PDF 的标准不兼容,无法转换为 PostScript。例如,无法处理的较新的 PDF 版本。或者它可能包含不兼容的内容,例如字体或 img。

有没有办法确定地找到这个?有没有人遇到过类似的情况,解决方案是什么?关于要研究什么或要尝试什么的任何指示?

老实说,如果没有看到原始 PDF 文件,可能没有人会提供帮助。只要出现错误,即使是虚拟文件也可以。

但是,我首先想到的是您似乎在使用 Ghostscript 9.05。现在已经 5 岁了,当前版本是(即将)9.22。在那段时间对 ps2write 进行了 多次 修复,至少有 50 个或更多,我建议您做的第一件事就是升级并查看问题是否消失。

其次,您还不清楚为什么需要将 PDF 文件转换为 PostScript。如果您所做的只是通过 Ghostscript 连同一些额外的 PostScript 将这些内容反馈回来,以便将组合转换为 PDF,则您不需要先将 PDF 文件转换为 PostScript。 Ghostscript 完全能够混合使用 PDF 和 PostScript 文件,因此您可以简单地将 PDF 插入 SQL 输出的 PostScript 之间,以生成单个组合 PDF。

这有很多优点;首先也是最明显的是,您不应该遇到转换问题。其次,PDF 文件中无法在 PostScript 中表示的任何构造(例如透明度)意味着内容将呈现为图像,而 PostScript 将只包含一个大位图。就像 pswrite 输出一样,避免转换意味着不会发生这种情况。第三,它比首先将所有 PDF 文件转换为 PostScript 更快。

如果您绝对不能那样做,那么我会尝试当前的代码,看看它是否更好。如果没有,那么你已经发现了一个错误,我建议你在 https://bugs.ghostscript.com 报告它,你将需要能够提供示例文件和命令行。