如何使用ImageMagick控制PDF纸张大小?

59

我有16个jpg文件,大约为920x1200像素(宽度略有不同,但高度均为1200)。我试图使用以下代码将它们合并成pdf:

convert *.jpg foo.pdf

但是生成的纸张尺寸为1.53x2英寸。如果我传递-page Letter参数,页面大小最终变成了令人困惑的1.02x1.32英寸。这里出了什么问题?我能找到的所有信息都表明这应该可以工作。我只想要一个由16个信纸大小页面组成的文档。

5个回答

54

这个问题已经很老了,但我遇到了类似的问题,我认为我找到了解决方法。

关于 -page 选项的文档说“此选项与 -density 一起使用”,但选项之间的关系似乎有点不清楚,可能是因为文档针对的是光栅图像。

通过尝试设置,我发现可以通过组合 -page、-density 和 -units 来控制 pdf 页面大小。-page 的 文档 显示 letter 相当于输入 612 x 792。将 -density 72 与 -units pixelsperinch 组合起来,就可以得到 (612px / 72px) * 1in = 8.5in。

convert *.jpg -units pixelsperinch -density 72 -page letter foo.pdf 可以实现原帖作者想要的功能。


感谢您的帖子,我明白了page中给出的单位并不是绝对值,而是与density有关。以英寸为单位的页面大小为page_length_parameter / density - loved.by.Jesus
5
如果有人只想制作一份PDF文件,其中每页的大小和形状都与图像相匹配:请使用以下命令进行转换:convert -page 1678x1048 slide*.png presentation.pdf,其中1678x1048是您的图像的像素宽度和高度。 - Terry Brown
1
这会通过将图像重新采样为72 dpi而不是保持其输入分辨率来削弱图像。 - Andrej Podzimek

15

我刚刚用convert file.mng -page letter file.pdf成功转换了文件。


3
这不会缩放(收缩/扩展)每张图片以最优方式适应页面大小。 - Pablo Bianchi
6
对于欧洲尺寸,请使用“-page a4”,对于横向排列,请使用“-rotate 90”。 - JPT

9

对于Letter纸张,您需要将大小指定为792x612个PostScript点。因此,请尝试使用以下命令:

 convert \
    in1.jpg \
    in2.jpg \
    in3.jpg \
    in4.jpg \
    in5.jpg \
   -gravity center \
   -resize 792x612\! \
    letter.pdf

在我的Mac OS X电脑上,使用ImageMagick版本6.7.8-3 2012-07-19 Q16可以正常工作:

identify -format "%f[%s] :  %W x %H\n" letter.pdf
  letter.pdf[0] :  792 x 612
  letter.pdf[1] :  792 x 612
  letter.pdf[2] :  792 x 612
  letter.pdf[3] :  792 x 612
  letter.pdf[4] :  792 x 612

或者

pdfinfo -f 1 -l 5 letter.pdf 
  Title:          _
  Producer:       ImageMagick 6.7.8-3 2012-07-19 Q16 http://www.imagemagick.org
  CreationDate:   Fri Jul 27 22:28:00 2012
  ModDate:        Fri Jul 27 22:28:00 2012
  Tagged:         no
  Form:           none
  Pages:          5
  Encrypted:      no
  Page    1 size: 792 x 612 pts (letter)
  Page    1 rot:  0
  Page    2 size: 792 x 612 pts (letter)
  Page    2 rot:  0
  Page    3 size: 792 x 612 pts (letter)
  Page    3 rot:  0
  Page    4 size: 792 x 612 pts (letter)
  Page    4 rot:  0
  Page    5 size: 792 x 612 pts (letter)
  Page    5 rot:  0
  File size:      178642 bytes
  Optimized:      no
  PDF version:    1.3

这导致了一个扭曲的、更加方形的宽高比,页面尺寸显示为1.32x1.02英寸。 - mackstann
你使用的是哪个版本的IM?(运行convert -version来查找) - Kurt Pfeifle
你是如何确定页面大小为“1.32x1.02英寸”的? - Kurt Pfeifle
这是在Ubuntu上的6.5.7-8版本。我实际上通过使用“-density”选项成功地搞定了文档大小,使其足够接近信纸大小。使用“-density 109”,页面的宽度大约为606-617个点,高度为793个点,这已经足够接近美国信纸的标准了,可以被Evince软件接受。 - mackstann
我正在使用Evince的“文件”->“属性”来检查页面大小。 - mackstann
1
对于不在美国的读者,可能不熟悉“后缀点”、“英寸”和“信纸”的单位。美国有自己过时的长度系统和纸张尺寸。但是您可以使用Google将其转换为ImageMagick使用的“后缀点”,例如搜索“297mm in postscript points”最终会得到“-resize 842x595”。但是,大多数标准纸张尺寸也适用,例如“-resize A4”。 - Michael Scheper

0
根据this,72 dpi是默认密度 => 每个像素一个点(适用于计算机屏幕)。
所以您只需要指定-units pixelsperinch
您可以输入以下命令:
$ convert *.jpg -units pixelsperinch -page letter foo.pdf

顺便说一下:如果您想使用非标准页面大小,例如A4R,您必须首先确定以点(或以72dpi给出的像素)为单位的页面大小:

$ paperconf -s -p A4
595.276 841.89

那么对于 A4R-page 参数将是 842x595


考虑到A4是大多数国家中最常见的页面大小并且是唯一的标准,我不会称A4R为“非标准”。 - Andrej Podzimek

0

当你打印它们时,你的打印机可能不会使用超过300 DPI,因此可以使用-density 300x300将它们转换为该分辨率以节省空间(和打印机处理时间)。

无论输入文件的大小如何(并保留原始纵横比),你也可能希望PDF与纸张大小相匹配,使用像素的纸张大小(并根据需要使用-resize-extent对齐-gravity)。

您还可以使用-rotate "90>"将所有内容放在纵向模式中。

所以这是我的建议:

$ convert *.jpg \
    -rotate "90>" \
    -gravity center \
    -units PixelsPerInch -density 300x300 \
    -resize 2551x3295 -extent 2551x3295 \
    foo.pdf

对于美式信纸,请使用2551x3295;对于A4纸,请使用2480x3508


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