将图像转换为 pdf:如何使 PDF 页面大小相同

Jie*_*eng 56 pdf imagemagick conversion

我做了类似的事情

convert -page A4 -compress A4 *.png CH00.pdf
Run Code Online (Sandbox Code Playgroud)

但是第一页比后续页大得多。即使图像尺寸相似,也会发生这种情况。这些图像经过扫描和裁剪,因此尺寸可能略有不同

我想-page A4应该修复页面的大小?

max*_*zig 75

上次我用于convert这样的任务时,我通过调整大小明确指定了目的地的大小:

$ i=150; convert a.png b.png -compress jpeg -quality 70 \
      -density ${i}x${i} -units PixelsPerInch \
      -resize $((i*827/100))x$((i*1169/100)) \
      -repage $((i*827/100))x$((i*1169/100)) multipage.pdf
Run Code Online (Sandbox Code Playgroud)

convert命令并不总是使用DPI作为默认密度/页面格式单位,因此我们使用-units选项明确指定 DPI (否则您可能会在不同版本/输入格式组合下获得不同的结果)。新尺寸(通过 指定-resize)是DIN A4 页面尺寸(以像素为单位)。resize 参数指定最大页面大小。选择什么样的分辨率和质量完全取决于用例 - 我选择了 150 DPI和平均质量以节省一些空间,同时在纸上打印时看起来还不错。

请注意,convert默认情况下不会通过调整大小操作更改纵横比:

调整大小将使图像适合请求的大小。它不填充,请求的框大小。

( ImageMagick 手册)

根据 ImageMagick 版本和涉及的输入格式,可以省略该-repage选项。但有时它是必需的,如果没有该选项,PDF 标题可能包含太小的尺寸。在任何情况下,-repage都不应该受到伤害。

计算使用整数算术,因为bash只支持它。用zsh表达式可以简化——即用 代替$((i*8.27))x$((i*11.69))

艺术线条图像

如果 PNG 文件是双层(黑白又名线稿)图像,那么该img2pdf工具会产生优于 ImageMagick 的结果convert。这意味着img2pdf速度更快,生成的 PDF 更小。

例子:

$ img2pdf -o multipage.pdf a.png b.png
Run Code Online (Sandbox Code Playgroud)

或者:

$ img2pdf --pagesize A4 -o multipage.pdf a.png b.png
Run Code Online (Sandbox Code Playgroud)

  • 使用`-repage a4`时,我得到一个`invalid argument for option '-repage': a4` (2认同)

cau*_*ner 30

你真正想要使用的是:

$ convert a.png b.png -compress jpeg -resize 1240x1753 \
                      -extent 1240x1753 -gravity center \
                      -units PixelsPerInch -density 150x150 multipage.pdf
Run Code Online (Sandbox Code Playgroud)

-extent实际上将图像扩展为 1240x1753,同时-resize保持图像的比例,将其拟合为1240x......x1753

-gravity参数是可选的,但可用于在扩展时使图像居中。


小智 10

除了caugner的回答

具有安装IM v6.6.9-7我发现的-gravity参数需要被放置在之间-resize-extent有效果。

另外(虽然不是操作问题的一部分)我发现设置一个不同的背景颜色很吸引人,这将导致完全控制

convert in.jpg -resize 1240x1750 -background black -compose Copy\
               -gravity center -extent 1240x1750\
               -units PixelsPerInch -density 150 out.pdf
Run Code Online (Sandbox Code Playgroud)

当我不想重新缩放已经具有正确纵横比但保持其单独分辨率的图像时,我经常使用的另一个有用的变体是

convert in.jpg -units PixelsPerInch -set density '%[fx:w/8.27]'\
               -repage a4 out.pdf
Run Code Online (Sandbox Code Playgroud)

其中目标密度是通过计算宽度除以 8.27(即 A4 页面的英寸宽度)来动态确定的。-repage a4大多数情况下可以省略该参数,但我遇到过一些情况,生成的 .pdf 格式与 210x297 毫米(8.27x11.6")的 A4 尺寸略有不同


Ada*_*son 7

我强烈推荐使用 Python CLI 程序img2pdf进行无损转换:

https://gitlab.mister-muffin.de/josch/img2pdf

用法示例:

img2pdf img1.png img2.png -o out.pdf
Run Code Online (Sandbox Code Playgroud)