如何使用Ghostscript调整PDF大小为8.5 x 11英寸?

3

考虑 这个PDF文件。我正在尝试使用以下命令将其转换为标准的信纸大小(8.5×11英寸)。

gs -dFIXEDMEDIA -dBATCH -dNOPAUSE -sPAPERSIZE=letter \
   -dPDFFitPage -q -sDEVICE=pdfwrite -sOutputFile=out.pdf \
    dean08mapreduce.pdf

这里是输出中的pdfinfo信息。
Producer:       GPL Ghostscript 9.10
CreationDate:   Mon Nov 17 18:25:01 2014
ModDate:        Mon Nov 17 18:25:01 2014
Tagged:         no
Form:           none
Pages:          7
Encrypted:      no
Page size:      596.225 x 792 pts
Page rot:       0
File size:      126908 bytes
Optimized:      no
PDF version:    1.4

这里是原始文件中的 pdfinfo

Producer:       Creo Normalizer JTP
CreationDate:   Fri Dec 21 09:09:07 2007
ModDate:        Fri Dec 21 14:46:23 2007
Tagged:         no
Form:           AcroForm
Pages:          7
Encrypted:      no
Page size:      603 x 801 pts
Page rot:       0
File size:      235239 bytes
Optimized:      yes
PDF version:    1.3

注意输出的高度是正确的,但宽度不正确。它实际上是 8.3 x 11,而不是 8.5 x 11
我已经尝试了这里这里提供的解决方案,但都没有达到我所需的效果。 如何强制使PDF文件大小恰好为8.5 x 11 如果需要可以在两侧添加一些空白区域。
1个回答

5
双重转换不是一个好的方案,因为可能会在每个步骤中引入问题,特别是因为PostScript不支持PDF的图形模型(尤其是它不支持透明度)。您的问题在于原始PDF文件包含一个CropBox,Ghostscript pdfwrite设备保留了它。pdfinfo的输出告诉您考虑了CropBox的PDF文件大小。MediaBox实际上是612x792,即正好8.5x11,这就是您想要的。之所以给出不同的高度是因为新的MediaBox在原始CropBox内部,所以正在给出两个框的交集。如果您不想保留CropBox,则必须构建一个新的CropBox页面或PAGES pdfmark,并将其作为PostScript发送。这并非完全不平凡;在您的情况下,每个页面都有一个CropBox(它不是整个文档的单个默认值),因此您需要覆盖每个页面上的CropBox。要做到这一点,您需要定义一个/EndPage过程,使用pdfmark设置所需的CropBox,并将其在处理PDF文件之前发送。
gs -sDEVICE=pdfwrite \
   -dDEVICEWIDTHPOINTS=612 -dDEVICEHEIGHTPOINTS=792 -dFIXEDMEDIA \
   -sOutputFile=out.pdf \
   -c "<</EndPage {0 eq {[/CropBox [0 0 612 792] /PAGE pdfmark true}{false}ifelse}>> setpagedevice" \
   -f dean08mapreduce.pdf
< p > 对我很有用。 < /p >

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接