将后记解析为 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 表单而导致的效率损失超过了它在实际有价值的罕见情况下的好处。
我有一个 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 表单而导致的效率损失超过了它在实际有价值的罕见情况下的好处。