代码之家  ›  专栏  ›  技术社区  ›  ceejayoz

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

  •  13
  • ceejayoz  · 技术社区  · 16 年前

    我一直在用头撞这件事没有用。

    我需要缩小一些大型PDF以打印在8.5x11英寸(标准字母)的页面上。imagemagick/ghostscript可以处理这类事情吗,或者我是否因为使用了错误的工具而遇到了很多麻烦?

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

    4 回复  |  直到 12 年前
        1
  •  7
  •   danio Kouga    16 年前

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

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

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

    创建输出文件myfile-up.pdf

        2
  •  17
  •   Kurt Pfeifle    12 年前

    我不会使用 convert .它在后台使用ghostscript,但速度慢得多。我会直接使用ghostscript,因为它给了我更多的直接控制(以及一些对设置的控制,这些设置更难实现 转换 )如果要将转换为PDF转换为PDF,您将安装ghostscript:

      gs \
        -o /path/to/resized.pdf \
        -sDEVICE=pdfwrite \
        -dPDFFitPage \
        -r300x300 \
        -g2550x3300 \
        /path/to/original.pdf
    
        3
  •  8
  •   danieltalsky    16 年前

    imagemagick的mogrify/convert命令确实可以完成这项工作。斯蒂芬·佩奇的想法是正确的,但你也需要设置文件的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
    

    如果纵横比不同,则需要进行一些稍微复杂的裁剪。

        4
  •  6
  •   Tim Cooper    13 年前

    鬼脚本方法对我很有效。(我把我的文件从我的Windows PC移到了一台Linux计算机上并运行了它。)我对ghostscript命令做了一个小的更改,因为上面的ghostscript resize命令完全填充了一个8.5 x 11英寸的页面。不过,我的打印机无法打印到边缘,所以每一页边缘都丢失了几毫米。为了解决这个问题,我将我的PDF文档缩小到0.92,即8.5乘11英寸。这样,我看到所有的东西都集中在页面上,并且有一点空白。因为0.92*(2550x3300)=(2346x3036),所以我运行了以下ghostscript命令:

      gs -sDEVICE=pdfwrite \
         -dPDFFitPage \
         -r300x300 \
         -g2346x3036 \
         /home/user/path/original.pdf \
         -o /home/user/path/resized.pdf