Ghostscript 将 PostScript 转换为 PDF 似乎忽略了页面大小/BoundingBox

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

我使用 ImageMagick 从 TIFF 图像创建了 PostScript 文件。

我使用的命令行是:

convert input.tif[0] -density 600 -alpha Off -size 5809x9408 -depth 16 intermediate.ps

这将获取我输入的 tiff 图像(只是主图像,而不是使用 [0] 的缩略图)并从位图创建一个 .ps 文件。

当我查看 PostScript 文件的标题时,我可以看到它具有正确的页面大小:

%!PS-Adobe-3.0
%%Creator: (ImageMagick)
%%Title: (intermediate.ps)
%%CreationDate: (2017-05-22T08:43:44+10:00)
%%BoundingBox: -0 -0 697 1129
%%HiResBoundingBox: 0 0 697.08 1129
%%DocumentData: Clean7Bit
%%LanguageLevel: 1
%%Orientation: Portrait
%%PageOrder: Ascend
%%Pages: 1
%%EndComments

然而,当我使用 GhostScript 将其转换为 PDF 时,除非我费尽心思指定其他内容,否则 gs 会裁剪它并将其放在 US Letter 大小的页面上。

gs -dPDFA=1 -dBATCH -dNOPAUSE -sDEVICE=pdfwrite -sDefaultRGBProfile=AdobeRGB1998.icc -dOverrideICC -sOutputFile=output.pdf -r600 -P PDFA_def.ps intermediate.ps

当我打开生成的 PDF 时,裁剪框为 612 x 792 pt,即 US Letter。它应该是 697 x 1129 pt,即 PostScript 文件中边界框的大小。

我使用 Acrobat Distiller 创建了一个自定义 .joboptions 文件,用于设置图像压缩等,在该文件中,如果我在末尾指定页面大小,则生成的 PDF 会显示正确的大小:

<<
  /HWResolution [600 600]
  /PageSize [697.080 1128.960]
>> setpagedevice

现在对于一次性转换来说这不是一个大问题,但我必须转换大量图像,并且我不想为每个文件手动设置页面大小。

pdf ghostscript imagemagick-convert postscript
1个回答
0
投票

您上面引用的行是注释,并且从现有的注释来看,表明这是一个EPS文件,而不是PostScript程序。

主要区别在于 EPS 是“封装的”,这意味着它旨在逐字放置在 PostScript 程序中。封闭的程序包含有关媒体大小的智能,并安排设置上下文,以便对 EPS 进行缩放、旋转、平移,使其适合媒体。

为了成功做到这一点,EPS 文件必须遵循一定的规则;特别是它本身不得设置任何介质大小(因为这会扰乱封闭的程序)。

所以在我看来,您拥有的可能是一个 EPS 文件,它根本不需要任何媒体大小。因此,您必须告诉 Ghostscript 您想用它做什么也就不足为奇了。

现在为了让封闭程序放置 EPS,它需要知道其特征、内容的大小和形状。这就是评论的目的。通常,EPS 文件由应用程序(例如 MS Word、LibreOffice 等)读取,该应用程序解析出这些注释并在生成最终的 PostScript 程序时使用这些信息。 EPS 使用注释来存储此信息的原因正是这样,它不会影响 EPS 的实际内容,因此可以包含整个 EPS,而无需应用程序进一步处理。

简短的回答是,如果您阅读 Ghostscript 文档这里,您会找到

EPSCrop
EPSFitPage
命令行开关的描述,它们将为您完成所有工作。

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