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

时间:2017-05-21 23:31:56

标签: pdf ghostscript imagemagick-convert postscript

我使用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会裁剪它并将其放在美国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

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

1 个答案:

答案 0 :(得分:0)

您在上面引用的行是评论,并且根据现有评论,建议这是 EPS 文件,而不是PostScript程序。

主要区别在于EPS是“封装的”,这意味着它意图逐字放置在PostScript程序中。封闭程序包含有关媒体大小的情报,并安排设置上下文,以便EPS按比例缩放,旋转,翻译,以便适当地适合媒体。

为了成功完成此操作,EPS文件必须遵循一定的规则;特别是它本身不能设置任何媒体大小(因为这会混淆封闭程序)。

所以我觉得你所拥有的是一个不会要求任何媒体大小的EPS文件。所以你必须告诉Ghostscript你想用它做什么就不足为奇了。

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

简短的回答是,如果您阅读Ghostscript文档here,您将找到place_label_city_small_sEPSCrop命令行开关的说明,这些开关将为您完成所有工作。