我想裁剪PS
或PDF
文件的主要区域,以创建没有空格的EPS
文件。 ghostrcipt
,ps2pdf
,epstools
的命令可以裁剪文档文件中的主要图纸。
问题是它们只以原始形式裁剪,但我想用BoundingBox 0 0 x y
创建一个EPS文件;裁剪并移动到左下角。
我们想要在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
如果使用
之类的命令将其转换为EPS
ps2eps test.ps test.eps
它会产生
%!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
它已在原始坐标中裁剪,结果BoundingBox
为72 700 127 708
。现在,如果尝试在EPS
文档中插入此PS
文件,它会尝试在此坐标处嵌套。
如果使用EPS
创建BoundingBox: 0 0 55 8
文件,将会非常有用。当然,所有绘图坐标(此处为moveto)必须使用此新引用进行修改。
注意:如上所述,我修复BoundingBox参考点的目的是使其可以在PS文档中导入。因此,这个问题的另一个答案是:如何在PS文档中插入EPS文件而不管其BoundingBox。
例如,如何在PS文档的200 200 255 208
位置插入此EPS文件。我尝试使用以下代码插入EPS,但除非从0 0
启动BoundingBox,否则它将无效:
200 200 translate
save
/showpage {} bind def
(test.eps)run
restore
答案 0 :(得分:3)
如何简单地 un - 翻译?
-72 -700 translate
in eps本身,还是包含之前的准备部分?
别扭!
以下打字稿说明了执行所需修改的awk脚本 在DSC评论的指导下(就像妈妈过去做的那样!)。
优点是:如果你可以保证输入的EPS足以与DSC一致以提供这些标记,这种方法比传递文件通过<更快几个数量级/ em> ghostscript。
简单是这个计划的优势和局限。它扫描DSC注释,从BoundingBox注释中提取值,抑制HiResBoundingBox,并在Page注释后添加postscript'revert'和'rectclip'。只要EPS确实是真实的,这应该产生正确的结果。但是另一个答案中的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
答案 1 :(得分:3)
要将其转换为您想要的BoundingBox风格的EPS,我会使用Ghostscript并让EPS进行往返:EPS =&gt; PDF =&gt; EPS。
诀窍是确保PDF使用与BoundingBox宽度和高度相同的媒体大小,方法是添加-dEPSCrop
参数。
这两个命令创建&#39; EPS,没有空格&#39; :
第1步:将EPS转换为PDF:
gs \
-o so#12682621.pdf \
-sDEVICE=pdfwrite \
-dEPSCrop \
so#12682621.eps
第二步:将PDF转换回EPS:
gs \
-o so#12682621.roundtripped.eps \
-sDEVICE=epswrite \
so#12682621.pdf
要测试生成的EPS的保真度,您可以使用ImageMagick的compare
以像素方式显示差异(作为PNG文件):
compare \
-density 600 \
12682621.roundtripped.eps \
12682621.eps \
-compose src \
12682621.png
导致:
您会注意到存在一些像素差异。它们是由%%HiResBoundingBox
的707.500000值引起的,这导致稍后出现舍入错误(PNG无法使用半像素&#39;)。