【发布时间】:2010-10-07 12:49:30
【问题描述】:
我一直在努力反对这一点,但无济于事。
我需要缩小一些大型 PDF 以在 8.5x11 英寸(标准字母)页面上打印。 ImageMagick/Ghostscript 可以处理这种事情,还是因为我使用了错误的工具来完成这项工作而遇到了很多麻烦?
仅依靠客户端打印对话框中的“缩小到页面”选项不是一种选择,因为我们希望最终用户易于使用。
【问题讨论】:
标签: pdf resize imagemagick ghostscript
我一直在努力反对这一点,但无济于事。
我需要缩小一些大型 PDF 以在 8.5x11 英寸(标准字母)页面上打印。 ImageMagick/Ghostscript 可以处理这种事情,还是因为我使用了错误的工具来完成这项工作而遇到了很多麻烦?
仅依靠客户端打印对话框中的“缩小到页面”选项不是一种选择,因为我们希望最终用户易于使用。
【问题讨论】:
标签: pdf resize imagemagick ghostscript
使用 ImageMagick 的问题在于您将转换为光栅图像格式,这会增加文件大小并降低页面上任何矢量元素的质量。
Multivalent 将保留 PDF 的矢量信息。 试试:
java -cp Multivalent.jar tool.pdf.Impose -dim 1x1 -paper "8.5x11in" myFile.pdf
创建输出文件 myFile-up.pdf
【讨论】:
我不会使用convert。它在后台使用 Ghostscript,但速度要慢得多。我会直接使用 Ghostscript,因为它给了我更直接的控制(以及对使用 convert 更难实现的设置的一些控制)。并且为了转换为 PDF 到 PDF 的转换工作,您无论如何都需要安装 Ghostscript:
gs \
-o /path/to/resized.pdf \
-sDEVICE=pdfwrite \
-dPDFFitPage \
-r300x300 \
-g2550x3300 \
/path/to/original.pdf
【讨论】:
-r300x300 和-g2550x3300
r 用于以每英寸点数为单位的分辨率(水平和垂直方向)。 g 用于以像素为单位的页面尺寸(水平和垂直方向)。您需要阅读some of the Ghostscript documentation 以避免提出此类基本问题...
Ghostscript 方法对我来说效果很好。 (我将文件从 Windows PC 移动到 Linux 计算机并在那里运行。)我对 Ghostscript 命令做了一个小改动,因为上面的 Ghostscript resize 命令完全填满了 8.5 x 11 英寸的页面。但是,我的打印机无法打印到边缘,因此沿每个页面边缘丢失了几毫米。为了克服这个问题,我将我的 PDF 文档缩放为 8.5 x 11 英寸的 0.92。这样,我看到所有内容都以页面为中心并且有一点边距。因为 0.92 * (2550x3300) = (2346x3036),所以我运行了以下 Ghostscript 命令:
gs -sDEVICE=pdfwrite \
-dPDFFitPage \
-r300x300 \
-g2346x3036 \
/home/user/path/original.pdf \
-o /home/user/path/resized.pdf
【讨论】:
-r300x300 和-g2346x3036
ImageMagick 的 mogrify/convert 命令确实可以完成这项工作。 Stephen Page 的想法几乎是正确的,但您还需要设置文件的 dpi,否则您将无法完成工作。
假设您有一个 300 dpi 且纵横比已与 8.5 x 11 相同的文件,则命令为:
// 300dpi x 8.5 -2550, 300dpi x 11 -3300
convert original.pdf -density "300" -resize "2550x3300" resized.pdf
如果纵横比不同,则需要进行一些稍微复杂的裁剪。
【讨论】: