将 PDF 缩放至精确大小

将 PDF 缩放至精确大小

我需要一个 Linux 程序,它可以将 pdf 文件缩放到指定大小,并在需要时拉伸它们。我更喜欢命令行程序,但带有 gui 的程序也可以。

我发现了很多可以缩放 pdf 的程序,但它们都是按比例缩放的,然后只添加白色边框。但我需要一些可以拉伸 pdf 文件的东西,这样它就有了所需的确切尺寸而没有白色边框。

我知道拉伸可能会使 pdf 看起来很奇怪,但我有一些 pdf 文件只需要高 1.5 毫米,所以我需要拉伸它们的量不到 1%,所以我仍然认为它看起来不错。

答案1

我的方法需要安装 PDF 查看器和 PDF 打印机。我使用的查看器是福昕阅读器,适用于 Windows、Linux 和 Mac。

在 Foxit Reader 中,我可以打开 PDF 文件并将其打印到 PDF 打印机。此查看器在其“打印”对话框中提供了使用比例打印的选项。我可以将“自定义比例”设置为整数百分比,它会按该百分比缩放所有元素。

使用此查看器,您可以将元素拉伸百分之一,但不能指定更少的值。这可能对您来说足够了,也可能太多了,因为您说您需要拉伸精确的“高出 1.5 毫米”的量。


对于比上述方法更精确的方法,我能想到的一种方法是将所有页面导出为图像,放大和裁剪图像,然后将它们再次打包成 PDF。

您将无法选择部分文本,因为所有内容都将成为图像。

答案2

即使标称分辨率为正方形,PDF 中的图像也经常具有不同的 X 和 Y 放置比率,因此,如果您可以通过命令(例如 SED)使用文本编辑器,并使用解压缩的图像分页 PDF(例如使用 QPDF(对商业用户免费,而 cpdf 对私人用户免费)。然后您可以编辑位置。以这个 3 像素 x 3 像素扫描的小例子为例

%PDF-1.7
%µ¶
1 0 obj <</Type/Catalog/Pages 2 0 R>> endobj
2 0 obj <</Type/Pages/Count 1/Kids[3 0 R]>> endobj
3 0 obj <</Type/Page/MediaBox[0 0 72 72]/Rotate 0/Resources<</XObject<</Img0 5 0 R>>>>/Contents 4 0 R/Parent 2 0 R>> endobj
4 0 obj <</Length 30>>
stream
q
72 0 0 72 0 0 cm
/Img0 Do
Q

endstream
endobj

5 0 obj <</Length 27/Type/XObject/Subtype/Image/Width 3/Height 3/BitsPerComponent 8/SMask null/ColorSpace/DeviceRGB>>
stream
ÿ   ÿ   ÿ ÿÿÿ ÿÿÿ    ÿÿÿ€€€
endstream
endobj

xref
0 6
0000000000 65536 f 
0000000015 00000 n 
0000000060 00000 n 
0000000111 00000 n 
0000000235 00000 n 
0000000314 00000 n 

trailer
<</Size 6/Root 1 0 R>>
startxref
485
%%EOF

在此处输入图片描述SAY 期望高度为 99 个单位在此处输入图片描述

然后我们只需将页面高度和图像大小的第二个72编辑为99。

3 0 obj <</Type/Page/MediaBox[0 0 7299]/Rotate 0/Resources<</XObject<</Img0 5 0 R>>>>/Contents 4 0 R/Parent 2 0 R>> endobj

4 0 obj <</Length 30>> 流 q 72 0 0990 0 cm /Img0 Do

请注意,这特定于每页一张图像,如果每页有几十个对象,那么就需要进行几十次调整,而且通常更为复杂。

没有任何变化,提取图像时它仍然是 3 平方像素。@ 1/72 dpi 它不会拉伸,这只是媒体打印的错觉。这就是扫描仪可能显示水平 199 dpi 和垂直 201 dpi,而实际上导入的是 200 平方。

答案3

信息来自我们的朋友Unix 和 Linux。正如该答案所建议的那样,

您可以使用 pdfjam 和 --papersize 参数来设置输出纸张大小。如果您想要做的不仅仅是同时调整页面及其内容的大小,您可能还需要使用 --scale 和 --offset。

pdfjam --papersize="$(LC_ALL=C pdfinfo model.pdf | awk '/^Page size:/ {printf "{%fbp,%fbp}", $3, $5}')" file.pdf new_file.pdf

您还可以从此处找到使用 ghostscript 的其他方法回答来自 StackOverflow。

答案4

您是否尝试过通过 Photoshop 或 Sketch 等工具打开 pdf,然后在那里拉伸它?

然后您可以使用它重新保存它。

做足够多的时间后,您就可以获得像素级的精度。

相关内容