如何调整EPS文件的BoundingBox?

Goo*_*bot 5 pdf postscript ghostscript eps

我想裁剪一个PSPDF文件的主要区域来创建一个EPS没有空格的文件.的命令ghostrcipt,ps2pdf,epstools可以裁剪主绘图出来的文档文件.

问题是它们只能以原始形式裁剪,但我想创建一个EPS文件BoundingBox 0 0 x y; 裁剪并移动到左下角.

我们想要在PS文档中插入生成的EPS文件时的差异.具有时BoundingBox x0 y0 x y,PS文档在点x0 y0处插入EPS文件,而不是我们所在的位置.

例:

考虑一个简单的PS文件

%!
/Times-Roman findfont 
11 scalefont setfont

72 700 moveto
(This is a test)show
Run Code Online (Sandbox Code Playgroud)

如果EPS使用像这样的命令将其转换为

ps2eps test.ps test.eps
Run Code Online (Sandbox Code Playgroud)

它会产生

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

它已经在其原始坐标中被裁剪,结果BoundingBox72 700 127 708.现在,如果尝试EPSPS文档中插入此文件,它会尝试嵌套在此坐标处.

如果用它创建一个EPS文件将很有用BoundingBox: 0 0 55 8.当然,所有绘图坐标(此处为moveto)必须使用此新引用进行修改.

注意:如上所述,我修复BoundingBox参考点的目的是使其可以在PS文档中导入.因此,这个问题的另一个答案是:如何在PS文档中插入EPS文件而不管其BoundingBox.

例如,如何在200 200 255 208PS文档的位置插入此EPS文件.我尝试使用以下代码插入EPS,但除非从0 0以下位置启动BoundingBox,否则它将无法工作:

200 200 translate 
save 
/showpage {} bind def 
(test.eps)run 
restore
Run Code Online (Sandbox Code Playgroud)

lus*_*oog 3

简单地取消翻译怎么样?

-72 -700 translate
Run Code Online (Sandbox Code Playgroud)

eps 本身中,还是在包含之前的准备部分中?


尴尬的!

以下打字稿说明了一个 awk 脚本,该脚本在 DSC 注释的指导下对 eps 执行所需的修改(就像妈妈以前所做的那样!)。

优点是:如果您可以保证输入 EPS 充分符合 DSC 以提供这些标记,则此方法将比通过Ghostscript 传递文件快几个数量级。

简单性既是该程序的优点,也是其局限性。它扫描 DSC 注释,从 BoundingBox 注释中提取值,抑制 HiResBoundingBox,并在页面注释后添加 postscript 'translate' 和 'rectclip' 命令。只要每股收益确实是真实的,这应该会产生正确的结果。但是另一个答案中的 Ghostscript 方法将在不太可靠的 DSC 一致性的输入文件上产生结果(因为它没有采取快捷方式,它将 DSC 视为注释并完全忽略它们)。

严格来说,“rectclip”不是必需的,但问题要求输出被“裁剪”。

592(1)11:27 AM:~ 0> cat epscrop.awk
/%%BoundingBox: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)/{x=$2;y=$3;w=$4-x;h=$5-y;print $1,0,0,w,h}
!/%%BoundingBox:/&&!/%%HiRes/{print}
/%%Page /{print -x,-y,"translate"; print 0,0,w,h,"rectclip"}


593(1)11:27 AM:~ 0> awk -f epscrop.awk etest.eps
%!PS-Adobe-2.0 EPSF-2.0
%%BoundingBox: 0 0 55 8
%%EndComments
% EPSF created by ps2eps 1.68
%%BeginProlog
save
countdictstack
mark
newpath
/showpage {} def
/setpagedevice {pop} def
%%EndProlog
%%Page 1 1
-72 -700 translate
0 0 55 8 rectclip
/Times-Roman findfont
11 scalefont setfont
72 700 moveto
(This is a test)show
%%Trailer
cleartomark
countdictstack
exch sub { end } repeat
restore
%%EOF
Run Code Online (Sandbox Code Playgroud)