pdf - 如何调整EPS文件的BoundingBox?

标签 pdf ghostscript postscript eps

我想裁剪 PS 的主要区域或 PDF文件以创建 EPS没有空格的文件。 ghostrcipt的命令, ps2pdf , epstools可以裁剪出文档文件的主图。

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

当我们想要在 PS 文档中插入生成的 EPS 文件时的区别 i。当有 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

它已被裁剪为其原始坐标,结果 BoundingBox72 700 127 708 .现在,如果尝试插入此 EPS PS 中的文件文档,它试图在这个坐标上嵌套。

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

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

例如,如何在位置 200 200 255 208 插入此 EPS 文件一个PS文档。我尝试使用以下代码插入 EPS,但除非 BoundingBox 从 0 0 开始,否则它将无法工作:
200 200 translate 
save 
/showpage {} bind def 
(test.eps)run 
restore

最佳答案

要将其转换为您想要的 BoundingBox 样式的 EPS,我将使用 Ghostscript 并让 EPS 进行往返:EPS => PDF => EPS。

诀窍是通过添加 -dEPSCrop 来确保 PDF 使用与 BoundingBox 宽度和高度相同的媒体尺寸。参数。

这两个命令创建您的“没有空格的 EPS”:

第一步:将 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

结果是:enter image description here

您会注意到存在一些像素差异。它们是由 %%HiResBoundingBox 中的 707.500000 值引起的。 ,这会导致稍后出现舍入错误(PNG 不能有“半像素”)。

关于pdf - 如何调整EPS文件的BoundingBox?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12682621/

相关文章:

pdf - 如何使用命令行为 ghostscript 添加水印?

pdf - Ghostscript多页PDF转换为PNG

c# - 在 PrintPreview 中另存为 PDF

symfony - KnpSnappyBundle 和 Symfony 3.4 : images and/or css cause timeout

pdf - 如何确认 TrueType PDF 字体缺少字形

后记 - 案例陈述的替代方法

linux - 将 RGB PDF 转换为 CMYK 在 Linux 上保持 100% K(黑色)和 100% M(洋红色)

ghostscript - 我可以使用 Ghostscript 将文本(传真)标题叠加到 PDF 和/或 TIFF 上吗?

java - itext 将 xhtml 转换为 pdf

django - 将 pdf 作为附件发送会导致 Chrome 浏览器出现未定义错误