使用ImageMagick或Ghostscript(或其他工具)将PDF缩放以适应页面?

13

我需要缩小一些较大的PDF文件,以便在8.5x11英寸(标准信纸)页面上打印。ImageMagick / Ghostscript能否处理此类事情,或者我遇到困难是因为使用了错误的工具?

仅仅依靠客户端打印对话框中的“缩小到页面”选项不是一个选择,因为我们希望这对最终用户来说易于使用。

5个回答

17

我不会使用convert。它在后台使用Ghostscript,但速度要慢得多。我会直接使用Ghostscript,因为这样可以给我更直接的控制(还有一些设置的控制,这些设置使用convert要难得多)。而且,对于PDF到PDF的转换,你必须安装Ghostscript才能让convert起作用:

  gs \
    -o /path/to/resized.pdf \
    -sDEVICE=pdfwrite \
    -dPDFFitPage \
    -r300x300 \
    -g2550x3300 \
    /path/to/original.pdf

4
"-r300x300"和"-g2550x3300"是图片处理命令中的参数,其中"-r"代表分辨率,"300x300"表示水平和垂直方向上的像素数;"-g"代表大小,"2550x3300"表示图像的宽度和高度像素数。 - theonlygusti
@theonlygusti:r代表每英寸点数的分辨率(水平和垂直方向)。g代表页面尺寸的像素数(水平和垂直方向)。为了避免问这样“基础”的问题,您需要阅读一些Ghostscript文档 - Kurt Pfeifle

8
使用ImageMagick的问题在于,您将转换为光栅图像格式,这会增加文件大小并降低页面上任何矢量元素的质量。
Multivalent将保留PDF的矢量信息。 请尝试: Multivalent
java -cp Multivalent.jar tool.pdf.Impose -dim 1x1 -paper "8.5x11in" myFile.pdf

创建一个输出文件 myFile-up.pdf


4
原文:Turns out the latest version of this software does not include the pdf tools! You must find and use the Multivalent20060102.jar file.翻译:最新版的这个软件竟然没有包含 PDF 工具!你必须要找到并使用 Multivalent20060102.jar 文件。 - Joe Koberg
1
你可以从这里http://minus.com/lherwk1Y5TQzZ和这里http://ge.tt/6fVll5H下载最新版本的Multivalent with tools - Dingo
20060102版本似乎也在http://sourceforge.net/projects/multivalent/files/multivalent/Release%2020060102/上。 - danio
Multivalent.jar的新链接,内含工具:https://rg.to/file/c6bd7f31bf8885bcaa69b50ffab7e355/Multivalent20060102.jar.html - Dingo

7

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

如果纵横比不同,那么你需要进行一些略微棘手的裁剪。


对我来说不起作用。PDF 在转换后损坏了(v. 7.0.7-Q16)。 - Unicco

6

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

“-r300x300”和“-g2346x3036”是什么意思? - theonlygusti

0

如果您在LibreOffice Writer中使用插入>图像...来插入PDF,则可以使用直接操作或其图像属性来调整PDF的大小和位置,当您将文件>导出为... PDF时,PDF仍然保留矢量和文本。有趣的是,当我使用PDF发票进行此操作时,从LO导出的PDF比原始PDF小,但Linux的pdfimages命令行实用程序表明LO保留了原始PDF中的任何光栅图像。

但是,您希望为最终用户提供比打印对话框中的“缩小到页面”选项更易于使用的工具。有一些工具(如Adobe Acrobat)可以布置PDF以形成PDF的打印作业;我不知道哪些工具具有简单的“更改边界框并缩放为信纸大小”的功能。令人惊讶的是,万能的qpdf工具缺少此功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接