Postscript资源文件:如何传递函数参数?

时间:2014-01-03 21:29:47

标签: ghostscript postscript resource-files

我在任何postscript文件中都有一些postscript资源文件用于绘制对象(flaggs)(灵感来自Terry Burton的postscriptbarcode)。

用于绘制标志的文件位于子文件夹Flaggs(不带扩展名.ps)以及一些帮助文件, 特别是sethexcolor,定义一个函数sethexcolor,从十六进制字符串设置RGB颜色。

我在子文件夹Flaggs上面有一个文件sample.ps,代码为:

100 600 moveto
100 /square /Flaggs findresource exec   % draw a square of size 100
showpage

文件square包含代码:

1 dict
dup /sethexcolor dup /Flaggs findresource put
begin
/square {
    /size exch def
    currentpoint translate
    /red (ff0000) def
    red sethexcolor
    % 1 0 0 setrgbcolor
} bind def
/square dup load /Flaggs defineresource pop
end

我正在使用ghostscript 9.10在Windows 7中工作。 使用命令行参数-P调用Ghostscript以首先查找当前文件夹中的文件。 (在命令shell中可以使用gswin32c [-P] -h查看搜索路径)。通常情况下这很好(例如使用postscriptbarcode,见上文)。

但是这里不起作用:从sample.ps开始,我收到一条错误消息:

Error: /undefined in sethexcolor
Operand stack:
   (ff0000)

(使用1 0 0 setrgbcolor设置RGB颜色后,它可以正常工作。)

如果我将red sethexcolor更改为red /sethexcolorred //sethexcolor,则不会显示错误消息,并绘制正方形 - 但是黑色,不是红色。

这个postscript代码有什么问题? 为什么无法在同一文件夹中运行square调用函数sethexcolor

沃尔夫冈

1 个答案:

答案 0 :(得分:2)

尝试

red //sethexcolor exec

使用直接名称(带//)将在构造square过程体时加载当前定义。由于sethexcolor(大概)是一个过程,因此必须明确exec才能执行。