我需要将PDF或Postscript文件转换为EPS,我尝试通过以下命令使用Ghostscript将Postscript转换为EPS:
gswin32.exe -o output.eps -sDEVICE=eps2write -dFitPage input.ps
或将PDF转换为EPS:
gswin32c.exe -q -dNOCACHE -dNOPAUSE -dBATCH -dSAFER -sDEVICE=eps2write -o output.eps -dFitPage input.pdf
它们都成功完成,但是它们没有保持页面大小。输入的PDF或PS文件是相同的图形,并且它们的页面大小均为300x300pts。您可以下载这些文件here和here。他们看起来像这样:
但是将它们转换为EPS后,结果为PS to EPS和PDF to EPS。它们看起来像这样,第一个是PS到EPS的结果,第二个是PDF到EPS的结果(它们是使用EPS Viewer打开的,光栅化了图像,这是低质量的原因):
如您所见,它们都没有原始的300x300 pts大小,我尝试了许多Ghostscript选项,但无法通过正确的边界框获得EPS。我只需要将PDF或PS转换为EPS,无论是更简单还是提供更好的结果。
答案 0 :(得分:1)
您所要求的或多或少与通常要求的完全相反。
通常,人们希望EPS边界框尽可能紧贴EPS的实际标记,因为EPS文件的正常使用是将其“嵌入”到另一个文档中。如果需要额外的空白,通常在嵌入时将其添加到EPS周围。
实际上,EPS规范指出BoundingBox注释不应包含空格。在EPSF规范的第8页上:
“对于EPS文件,边界框是包围EPS文件单页上所有标记的最小矩形”
使用Ghostscript开关进行处理不会对您有任何帮助,该设备会明确记录输入所产生的标记,并根据这些标记设置BoundiongBox。
也许如果您要解释为什么要使用不正确的BoundingBox注释来生成EPS文件,则可以提出一些建议,但是Ghostscript正是在这里应做的事情。
[附录]
(请参阅下面的评论,此为回复)
我怀疑您随后需要以某种方式更改流程。一种解决方案是使PDF以白色填充整个页面。与许多人的期望相反,后者被视为在页面上做标记,因此整个页面将被视为BoundingBox。
只要您使用的是Ghostscript eps2write设备,您还可以为%% BeginPageSetup解析文档,则eps2write设备仍会在此部分中写出原始文档大小,例如:
%!PS-Adobe-3.0 EPSF-3.0
%%Invocation: path/gswin32c -dDisplayFormat=198788 -dDisplayResolution=96 -sDEVICE=eps2write -sOutputFile=? ?
%%BoundingBox: 101 132 191 256
%%HiResBoundingBox: 101.80 132.80 190.30 255.20
%%Creator: GPL Ghostscript GIT PRERELEASE 951 (eps2write)
....
....
%%EndProlog
%%Page: 1 1
%%BeginPageSetup
4 0 obj
<</Type/Page/MediaBox [0 0 300 300]
/Parent 3 0 R
/Resources<</ProcSet[/PDF]
>>
/Contents 5 0 R
>>
endobj
%%EndPageSetup
您可以在此处看到,即使BoundingBox正确地反映了页面上的标记,原始介质的尺寸也是300x300。注意!这是当前版本的eps2write生成的EPS文件的特征,它不适用于其他来源的EPS文件,将来可能无法与eps2write一起使用。
除此之外,您还想从输入中查找媒体大小并将其分别传递给进行插入的程序,大概是通过将数据放在其他文本文件中来伴随EPS。或者,当然,可以手动或以编程方式编辑BoundingBox的urx,ury坐标。
恐怕Ghostscript不会为您这样做。