将白色边框添加到PDF(更改纸张格式)

时间:2014-08-18 17:55:55

标签: pdf imagemagick ghostscript

我必须将给定的PDF从A4(210mm*297mm)更改为216mm*303mm

每个尺寸的额外6毫米应设置为每侧3毫米的白色边框。 PDF页面的原始内容应以输出页面为中心。

我尝试了convert

convert in.pdf -bordercolor "#FFFFFF" -border 9 out.pdf

这给了我完全所需的结果但是我在PDF中松散了原始图像的清晰度。这有点模糊。

我还检查了

convert in.pdf out.pdf

根本没有任何变化,但也搞砸了图像。

所以我尝试了Ghostcript但没有得到任何结果。我迄今为止从德国方面找到的最佳方法是:

gs -sOutputFile=out.pdf -sDEVICE=pdfwrite -g6120x8590 \
-c "<</Install{1 1 scale 8.5 8.5}>> setpagedevice" \
-dNOPAUSE -dBATCH in.pdf

但是我得到错误:/ typecheck in - .postinstall -

3 个答案:

答案 0 :(得分:3)

默认情况下,Imagemagick将输入的PDF文件转换为72dpi的图像。这是非常低的分辨率,因为你经历了第一次。 Imagemagick的输出始终是光栅图像,因此如果您的输入PDF是文本,它将不再是。

如果你不介意输出PDF越来越大,你可以简单地增加Imagemagick使用-density选项探测原始PDF的比例,如下所示:

convert -density 600 in.pdf -bordercolor "#FFFFFF" -border 9 out.pdf

我使用了600,因为它是适合OCR的最佳点。我建议尝试300,450,600,900和1200,并选择最好的不会变得难以置信的巨大。

答案 1 :(得分:2)

在媒体上移动内容并不是特别困难,但它确实意味着改变大多数PDF操作包避免的PDF文件的内容流,这是有充分理由的。

上面引用的代码实际上不起作用,它在操作数堆栈上留下了垃圾,PLRM明确声明它后跟一个隐式initgraphics,它将重置所有标准参数。

您可以尝试设置/BeginPage过程来翻译原点,这可能会起作用:

<</BeginPage {8.5 8.5 translate} >> setpagedevice

请注意,您不是简单地操纵原始PDF文件; Ghostscript获取原始PDF文件,将其解释为图形基元,然后将这些基元重新组合成新的PDF文件,这有影响......例如,如果图像是原始的DCT编码(JPEG),它将被解压缩在传递到输出文件之前。您可能不想重新应用DCT编码,因为这会引入可见的伪像。

更简单的替代方案,但涉及多个处理步骤,因此更有可能出现问题,首先使用ps2write设备将PDF转换为PostScript,指定媒体大小,以及-dCenterPages开关,然后使用pdfwrite设备将生成的PostScript转换为新的PDF文件。

答案 2 :(得分:0)

而不是

-g6120x8590 \
-c "<</Install{1 1 scale 8.5 8.5}>> setpagedevice"

(这是错的),您应该使用:

-g6120x8590 \
-c "<</Install{8.5 8.5 translate}>> setpagedevice"

-g6120x8590 \
-c "<</Install{3 25.4 div 72 mul dup translate}>> setpagedevice"

(让Ghostscript计算&#34; 3mm == 8.5pt&#34;本身...)