想要使用ghostscript将eps文件和文本转换为单个复合路径

时间:2014-01-17 06:18:53

标签: ghostscript postscript eps

我想要的是将eps文件添加到已写入文本的临时ps文件中,然后我使用ghostscript将我的ps文件转换为eps文件,但是当我在AI大纲模式中看到我的eps文件时,我看到我周围的额外方块eps文件是大小框,不应该在那里,应该是单个复合框的一部分

Ghostscript版本是9.05,在我将eps包含到ps之前我需要调整它的大小。因此,调整大小的eps文件将页面边框显示为大纲模式。实际上并不存在,但当它进入机器时,它将切断不应该是这种情况的路径。

1 个答案:

答案 0 :(得分:1)

好吧,我想我对你正在做的事情以及可能陷入困境的地方有所了解。正如我评论的那样,你通过ghostscript多次运行该文件。每次必须解释postscript代码并构造内部显示列表表示,然后在输出端重新创建适当的postscript代码。所以它是克隆问题克隆的克隆。任何小的打嗝都可能导致级联故障。

所以,足够的说教。另一种方法是将eps文件操作为 text

因此,如果我们希望缩放图像以填充500x500平方,我们将以BoundingBox评论中的数字为指导。我将引用链接问题中的这个愚蠢的文件作为例子:

%!PS-Adobe-2.0 EPSF-2.0
%%BoundingBox: 72 700 127 708  %<-- modify this
%%HiResBoundingBox: 72.000000 700.000000 127.000000 707.500000  %<-- delete this
%%EndComments
% EPSF created by ps2eps 1.68
%%BeginProlog
save
countdictstack
mark
newpath
/showpage {} def
/setpagedevice {pop} def
%%EndProlog
%%Page 1 1     %<-- insert translate and scale after this line
/Times-Roman findfont 
11 scalefont setfont
72 700 moveto
(This is a test)show
%%Trailer
cleartomark
countdictstack
exch sub { end } repeat
restore
%%EOF

因此,BoundingBox为%%BoundingBox: 72 700 127 708,它需要0 0 500 500或更确切地说(以保持宽高比)0 0 x 5000 0 500 y其中x或y(以较小者为准)碰巧是)&lt; 500.现有尺寸为127-72 x 708 - 700 = 55 x 8.因此我们的比例系数为500/55。但我们也希望将左下角转换为原点,最简单的方法是将其转换为原点,因此缩放不会影响数字的解释。

因此,要将72 700 127 708带到0 0 500 y,首先我们将-72 -700 translate添加到文件中,然后将边界框修改为0 0 55 8,并删除那个愚蠢的HiRes行:我们真的不需要它。

然后,我们添加500 55 div dup scale(让翻译做数学,嘻嘻)。因此,最大x现在将为500,但是,哦,要为y添加什么?快速计算得出72!

所以,这个awk程序会将eps文件修改为500点宽,y缩放得恰当。

/%%BoundingBox: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)/{x=$2;y=$3;w=$4-x;h=$5-y;print $1,0,0,500,(500/w)*h}
!/%%BoundingBox:/&&!/%%HiRes/{print}
/%%Page /{print -x,-y,"translate"; print 500,w,"div dup scale"}

用法:

$ awk -f epsscale.awk etest.eps