为 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 添加白色边框(更改纸张格式)的主要内容,如果未能解决你的问题,请参考以下文章

如何将按钮的底部边框(白色)放在包含 div 的底部边框上

带有白色边框的警报控制器

arcgis版面视图中怎么修改整张地图背景?

C# GridView 边框问题

如何更改 MenuStrip 的外观 [重复]

在 iOS 13 中更改主题时边框颜色不会改变