使用 ImageMagick 或 Ghostscript(或其他东西)缩放 PDF 以适应页面?

发布于 2024-07-13 19:37:51 字数 172 浏览 8 评论 0原文

我需要缩小一些大型 PDF 以在 8.5x11 英寸(标准信函)页面上打印。 ImageMagick/Ghostscript 可以处理这类事情吗?还是因为我使用了错误的工具来完成这项工作,所以遇到了很多麻烦?

仅仅依靠客户端打印对话框中的“缩小到页面”选项并不是一个选择,因为我们希望最终用户能够轻松使用它。

I need to shrink some large PDFs to print on an 8.5x11 inch (standard letter) page. Can ImageMagick/Ghostscript handle this sort of thing, or am I having so much trouble because I'm using the wrong tool for the job?

Just relying on the 'shrink to page' option in client-side print dialogs is not an option, as we'd like for this to be easy-to-use for the end users.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

剩余の解释 2024-07-20 19:37:51

我不会使用convert。 它在后台使用 Ghostscript,但速度慢得多。 我会直接使用 Ghostscript,因为它为我提供了更直接的控制(以及对使用 convert 更难实现的设置的一些控制)。 为了使 Convert 能够进行 PDF 到 PDF 的转换,您无论如何都需要安装 Ghostscript:

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

I would not use convert. It uses Ghostscript in the background, but is much slower. I'd use Ghostscript directly, since it gives me much more direct control (and also some control over settings which are much more difficult to achieve with convert). And for convert to work for PDF-to-PDF conversion you'll have Ghostscript installed anyway:

  gs \
    -o /path/to/resized.pdf \
    -sDEVICE=pdfwrite \
    -dPDFFitPage \
    -r300x300 \
    -g2550x3300 \
    /path/to/original.pdf
ぶ宁プ宁ぶ 2024-07-20 19:37:51

使用 ImageMagick 的问题在于,您要转换为光栅图像格式,从而增加文件大小并降低页面上任何矢量元素的质量。

Multivalent 将保留 PDF 的矢量信息。
尝试:

java -cp Multivalent.jar tool.pdf.Impose -dim 1x1 -paper "8.5x11in" myFile.pdf

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

The problem with using ImageMagick is that you are converting to a raster image format, increasing file size and decreasing quality for any vector elements on your pages.

Multivalent will retain the vector information of the PDF.
Try:

java -cp Multivalent.jar tool.pdf.Impose -dim 1x1 -paper "8.5x11in" myFile.pdf

to create an output file myFile-up.pdf

池木 2024-07-20 19:37:51

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

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

ImageMagick's mogrify/convert commands will indeed do the job. Stephen Page had just about the right idea, but you do need to set the dpi of the file as well, or you won't get the job done.

Assuming you have a file that's 300 dpi and already the same aspect ratio as 8.5 x 11 the command would be:

// 300dpi x 8.5 -2550, 300dpi x 11 -3300
convert original.pdf -density "300" -resize "2550x3300" resized.pdf

If the aspect ratio is different, then you need to do some slightly trickier cropping.

终止放荡 2024-07-20 19:37:51

Ghostscript 方法对我来说效果很好。 (我将文件从 Windows PC 移至 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

The Ghostscript approach worked well for me. (I moved my file from my Windows PC to a Linux computer and ran it there.) I made one small change to the Ghostscript command because the Ghostscript resize command above completely fills an 8.5 by 11 inch page. My printer cannot print to the edge, though, so several milllimeters along each page edge were lost. To overcome that problem, I scaled my PDF document to 0.92 of a full 8.5 by 11 inches. That way I saw everything centered on the page and had a slight margin. Because 0.92 * (2550x3300) = (2346x3036), I ran the following Ghostscript command:

  gs -sDEVICE=pdfwrite \
     -dPDFFitPage \
     -r300x300 \
     -g2346x3036 \
     /home/user/path/original.pdf \
     -o /home/user/path/resized.pdf
做个少女永远怀春 2024-07-20 19:37:51

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

但是,您希望最终用户能够使用比打印对话框的“缩小到页面”选项更易于使用的选项。 Adobe Acrobat 等工具可以对 PDF 进行布局以形成 PDF 打印作业; 我不知道哪些有一个简单的“将边界框和比例更改为字母大小”。 令人惊讶的是,万能的 qpdf 工具缺少此功能。

If you use Insert > Image... in LibreOffice Writer to insert a PDF, you can use direct manipulation or its Image Properties to resize and reposition the PDF, and when you File > Export as... PDF the PDF remains vectors and text. Interestingly when I did this with a PDF invoice the PDF exported from LO is smaller than the original, but the Linux pdfimages command-line utility suggests LO preserves any raster images within the original PDF.

However, you want something easier-to-use for your end users than the print dialog's "Shrink to page" option. There are tools like Adobe Acrobat that lay out PDFs to form print jobs that are PDFs; I don't know which ones have a simple "Change the bounding box and scale to letter-size". Surprisingly the do-it-all qpdf tool lacks this feature.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文