为 PDF 添加白色边框(更改纸张格式)
Posted
技术标签:
【中文标题】为 PDF 添加白色边框(更改纸张格式)【英文标题】:Add white border to PDF (change paper format) 【发布时间】:2014-08-18 17:55:55 【问题描述】:我必须将给定的 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 "<</Install1 1 scale 8.5 8.5>> setpagedevice" \
-dNOPAUSE -dBATCH in.pdf
但我得到错误:/typecheck in --.postinstall--。
【问题讨论】:
【参考方案1】:默认情况下,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,并选择不会变得难以控制的巨大的最好的。
【讨论】:
【参考方案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 文件。
【讨论】:
【参考方案3】:而不是
-g6120x8590 \
-c "<</Install1 1 scale 8.5 8.5>> setpagedevice"
(这是错误的),你应该使用:
-g6120x8590 \
-c "<</Install8.5 8.5 translate>> setpagedevice"
或
-g6120x8590 \
-c "<</Install3 25.4 div 72 mul dup translate>> setpagedevice"
(它让 Ghostscript 自己计算“3mm == 8.5pt
”...)
【讨论】:
以上是关于为 PDF 添加白色边框(更改纸张格式)的主要内容,如果未能解决你的问题,请参考以下文章