将后记解析为 pdf 时出错

Error in Parsing the postscript to pdf

我有一个 postscript 文件,当我尝试将其转换为 pdf 或使用 postscript 打开它时出现以下错误 undefined in execform

我正在尝试修复此错误。但是我没有找到解决方案。请帮助我理解这个问题。 This is postscript file

好的,下面是一些观察;

文件长8页,使用了很多表格,第一个使用的表格有嵌套表格。这真的不适合作为示例文件,您期望其他程序员挖掘大量无关紧要的内容来帮助您。当您 post 一个示例时,请尝试将其减少到重现问题所需的最低限度。

你真的试过自己调试这个问题吗?如果是这样,你做了什么? (为什么不从降低文件复杂性开始?)

我不想冒犯,但这是你最近做的第三个相当幼稚的 posting,你有很多 PostScript 编程经验吗?有没有人为您提供任何语言培训?看来您是在代表一家商业组织工作,如果您还没有接受过一些培训,您应该与您的直属经理谈谈并尝试安排一些培训。

PostScript 程序不会给出您所说的错误

undefined in execform

实际上错误是 Ghostscript-specific 错误消息:

Error: /undefined in --.execform1--

这就是 .execform1 运算符(注意前导“.”表示 Ghostscript 内部运算符)。这很重要,因为首先准确引用错误消息很重要,其次,对于熟悉 Ghostscript 的人来说,它会告诉您错误发生在执行表单 PaintProc 时,而不是执行 execform 运算符时。

在大大降低了文件的复杂度后,问题与使用Forms完全无关。有问题的表单执行如下代码:

2 RM
0.459396 w
[([=10=][=10=])]435.529999 -791.02002 T

(这是第一次出现,也是错误发生的地方)

执行名为 T 的过程,定义为:

/T{neg _LY add /_y ed _LX add /_x ed/_BLSY _y _BLY sub D/_BLX _x D/_BLY _y D _x _y TT}bd

显然,它使用了序言中定义的许多其他函数,但重要的一点是它执行 TT,定义为 :

/TT{/_y ed/_x ed/_SX _x _LX sub D/_SY _y _LY sub D/_LX _x D/_LY _y D _x _y m 0 _rm eq{ dup type/stringtype eq{show}{{ dup type /stringtype eq{show}{ 0 rmoveto}?}forall}?} if 
1 _rm eq {gsave 0 _scs eq { _sr setgray}if 1 _scs eq { _sr _sg _sb   setrgbcolor}if  2 _scs eq { _sr _sg _sb _sk  setcmykcolor} if   dup type/stringtype eq{true charpath }{{dup type /stringtype eq{true charpath } { 0 rmoveto}?}forall}? S grestore} if 
2 _rm eq {gsave 0 _fcs eq { _fr setgray}if 1 _fcs eq { _fr _fg _fb   setrgbcolor}if  2 _fcs eq { _fr _fg _fb _fk  setcmykcolor} if  dup type/stringtype eq{true charpath }{{dup type /stringtype eq{true charpath } { 0 rmoveto}?}
forall}? gsave fill grestore 0 _scs eq { _sr setgray}if 1 _scs eq { _sr _sg _sb   setrgbcolor}if  2 _scs eq { _sr _sg _sb _sk  setcmykcolor}if  S grestore} if

在TT执行时保持的条件下(RM设置_rm为2),我们通过这段代码:

gsave 0 _fcs eq

然而,_fcs最初是未定义的,只有在执行/fcs函数时才定义。您的程序从不执行 /fcs,因此 _fcs 未定义,导致错误。

您在 PostScript 表单中定义每个页面是否有原因?这不是最优的,如果解释器实际上支持表单,那么您将无用地使用 VM(因为您只执行每个表单一次)。

如果是因为原始 PDF 输入使用 PDF Form XObjects,我建议您不要尝试在 PostScript 中复制它们。在 PDF 中重复使用 Form XObjects 是相当罕见的(它确实发生了,但 non-reuse 比 更常见)。由于为所有未重复使用表单的文件的每个 PDF 表单 XObject 描述 PostScript 表单而导致的效率损失超过了它在实际有价值的罕见情况下的好处。