我需要缩小一些较大的PDF文件,以便在8.5x11英寸(标准信纸)页面上打印。ImageMagick / Ghostscript能否处理此类事情,或者我遇到困难是因为使用了错误的工具?
仅仅依靠客户端打印对话框中的“缩小到页面”选项不是一个选择,因为我们希望这对最终用户来说易于使用。
我需要缩小一些较大的PDF文件,以便在8.5x11英寸(标准信纸)页面上打印。ImageMagick / Ghostscript能否处理此类事情,或者我遇到困难是因为使用了错误的工具?
仅仅依靠客户端打印对话框中的“缩小到页面”选项不是一个选择,因为我们希望这对最终用户来说易于使用。
我不会使用convert
。它在后台使用Ghostscript,但速度要慢得多。我会直接使用Ghostscript,因为这样可以给我更直接的控制(还有一些设置的控制,这些设置使用convert
要难得多)。而且,对于PDF到PDF的转换,你必须安装Ghostscript才能让convert
起作用:
gs \
-o /path/to/resized.pdf \
-sDEVICE=pdfwrite \
-dPDFFitPage \
-r300x300 \
-g2550x3300 \
/path/to/original.pdf
java -cp Multivalent.jar tool.pdf.Impose -dim 1x1 -paper "8.5x11in" myFile.pdf
创建一个输出文件 myFile-up.pdf
ImageMagick的mogrify/convert命令确实可以完成此工作。Stephen Page的想法几乎是正确的,但您还需要设置文件的dpi,否则您无法完成此工作。
假设您有一个文件,它的dpi为300,而且已经具有与8.5 x 11相同的长宽比,则命令应该是:
// 300dpi x 8.5 -2550, 300dpi x 11 -3300
convert original.pdf -density "300" -resize "2550x3300" resized.pdf
如果纵横比不同,那么你需要进行一些略微棘手的裁剪。
Ghostscript方法对我非常有效。(我将文件从Windows电脑移动到了Linux计算机并在那里运行了它。)我对Ghostscript命令进行了一些小的更改,因为上面的Ghostscript调整大小命令会完全填充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
如果您在LibreOffice Writer中使用插入>图像...来插入PDF,则可以使用直接操作或其图像属性来调整PDF的大小和位置,当您将文件>导出为... PDF时,PDF仍然保留矢量和文本。有趣的是,当我使用PDF发票进行此操作时,从LO导出的PDF比原始PDF小,但Linux的pdfimages
命令行实用程序表明LO保留了原始PDF中的任何光栅图像。
但是,您希望为最终用户提供比打印对话框中的“缩小到页面”选项更易于使用的工具。有一些工具(如Adobe Acrobat)可以布置PDF以形成PDF的打印作业;我不知道哪些工具具有简单的“更改边界框并缩放为信纸大小”的功能。令人惊讶的是,万能的qpdf
工具缺少此功能。
r
代表每英寸点数的分辨率(水平和垂直方向)。g
代表页面尺寸的像素数(水平和垂直方向)。为了避免问这样“基础”的问题,您需要阅读一些Ghostscript文档。 - Kurt Pfeifle