将postscript解析为pdf时出错

时间:2018-03-27 06:00:35

标签: debugging ghostscript postscript

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

我正在尝试解决此错误。但我发现没有解决方案。请帮我理解这个问题。 This is postscript file

1 个答案:

答案 0 :(得分:1)

好的,开始几点观察;

该文件长8页,使用多种形式,并且它使用的第一个表单具有嵌套表单。这真的不适合作为示例文件,你期待其他程序员挖掘很多无关紧要的东西来帮助你。当您发布示例时,请尝试将其减少到重现问题所需的最低值。

您是否真的尝试自己调试此问题?如果是这样你做了什么? (为什么不从减少文件复杂性开始?)

我不想冒犯,但这是你最近发表的第三个相当天真的帖子,你有很多PostScript编程经验吗?有人为你提供过该语言的培训吗?看来你是代表一个商业组织工作,你应该和你的直线经理谈谈,如果还没有给你一些培训,你可以尝试安排一些培训。

PostScript程序会给出您说明的错误

  

在execform中未定义

实际上,错误是特定于Ghostscript的错误消息:

  

错误:/ undefined in - .execform1 -

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

在大大降低了文件的复杂性之后,问题与使用Forms完全无关。违规表格执行如下代码:

2 RM
0.459396 w
[(\0\1\0\2)]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

显然,这是使用prolog中定义的许多其他函数,但重要的是它执行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是相当罕见的(确实发生了,但非重用很多更常见)。由于为所有未重复使用表单的文件描述每个PDF表单XObject的PostScript表单而导致的效率损失超出了实际上有价值的罕见情况的好处。