PDF到EPS或PS到EPS的转换,保持页面大小

问题描述 投票:0回答:1

我需要将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。您可以下载这些文件herehere。他们看起来像这样:

enter image description here

但是将它们转换为EPS后,结果是PS to EPSPDF to EPS。它们看起来像这样,第一个是PS到EPS的结果,第二个是PDF到EPS的结果(它们是使用EPS Viewer打开的,光栅化了图像,这是低质量的原因):

enter image description here

enter image description here

如您所见,它们都没有原始的300x300 pts尺寸,我尝试了许多Ghostscript选项,但无法通过正确的边界框获得EPS。我只需要将PDF或PS转换为EPS,无论是更简单还是提供更好的结果。

pdf ghostscript vector-graphics postscript eps
1个回答
0
投票

您所要求的或多或少是与通常所要求的相反。

通常,人们希望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不会为您这样做。

© www.soinside.com 2019 - 2024. All rights reserved.