【问题标题】:PostScript - Error when Using Ghostscript "pdfwrite"PostScript - 使用 Ghostscript“pdfwrite”时出错
【发布时间】:2017-10-03 18:32:30
【问题描述】:

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

上下文

这是我的情况。该应用程序是一个“简单”的应用程序,因为它报告了一个 SQL 数据库。无论好坏,它都使用附言来构建报告。它利用嵌入到应用程序目录中的 Ghostscript dll。这是踢球者,有人要求我包含 SSIS 报告,其输出已经是 PDF 格式。出于兼容性考虑,我需要将这些 PDF 转换为 postscript,即使在大多数情况下它们稍后会立即转换回 PDF。我知道这很可能是糟糕的设计,但有某些功能需要这样做,而目前它就是这样。我正在使用 GhostScript 来处理转换。

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

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

当利用我理解为当前接受的协议的“sDevice=ps2write”时,PDF 将不会返回并产生以下错误。

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

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

在应用程序上运行本地 SSIS 包时,可以成功处理生成的 PDF。

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

%!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。

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

【问题讨论】:

  • 您能否发布用于双向转换的完整命令?

标签: c# pdf ssis ghostscript postscript


【解决方案1】:

老实说,如果没有看到原始 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 报告它,但您需要能够提供示例文件和命令行。

【讨论】:

  • 我做了两件我认为有所作为的事情。 1) 我确实更新到了 9.22 2) 我没有意识到你可以在 GhostScript 中混合 pdf 和 postscript 来产生单个输出!这成功了。
猜你喜欢
  • 2017-04-12
  • 2017-04-07
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多