将PNG图片合并成一个PDF文件

125

我该如何在Unix中将多个.png文件合并成一个PDF文件?

4个回答

191

从查看ImageMagick文档来看,这可能很容易:

convert 1.png 2.png myfile.pdf

请查看关于潜在风险的评论。如果那样不起作用,PDFjam声称能够解决您的问题。


10
太神奇了,如此简单。它可以自动调整图像大小和一切...我喜欢开源。 - Nathan Wallace
4
使用命令“convert *.jpg file.pdf”,将指定类型文件夹中所有的文件转换为PDF格式。 - haakym
2
@arielnmz,您可以使用参数-compress jpeg -quality 50来压缩文件。请参见我的回答 - Michael Schmid
@PeterFlynn 我也遇到了类似的错误。这是由于对ImageMagick实施了一些额外的安全策略(convert是其中的一部分)。请参考以下链接暂时禁用该策略:https://askubuntu.com/questions/1081895/trouble-with-batch-conversion-of-png-to-pdf-using-convert - Shern
请注意,当我尝试使用convert进行此操作时,它会悄悄地失败。末尾的页面丢失了。 - piojo
显示剩余3条评论

41

如果我想将一些扫描合并成一个PDF文件,我会这样做:

pdfjoin --a4paper --fitpaper false --rotateoversize false scan01.png scan02.png

这将为您提供一个DIN-A4页面大小的PDF文档,其中每个png文件都居中于自己的页面上。对于超过一个DIN-A4页面的图片,将按比例调整大小以适合一页。较小的图像不会被缩放(也不会变大)。

您必须在命令行上命名所有png文件,但也可以使用通配符例如合并当前目录中的所有png文件:

pdfjoin --a4paper --fitpaper false --rotateoversize false *.png

pdfjoin 命令是 PDFjam 的一部分,正如 Jeremiah Willcock 在回答中提到的那样。因此,您很可能需要使用发行版包管理器安装名为 pdfjamtexlive-extra-utils 的软件包。自2010年11月13日发布的版本2.07以来,PDFjam 能够使用 png 文件作为输入。


似乎pdfjoin已经消失了,现在只有一个名为pdfunite的不同工具,该工具仅将多个PDF文件组合成一个... - Gregor
1
@Gregor 你为什么说pdfjoin已经消失了? - Pascal Rosin
@Pascal_Rosin 在 Debian 和 Arch 软件仓库中都找不到它... - Gregor
2
pdfjoin 在某些平台上的 texlive-extra-utils 包中可用。您也可以随时从源代码安装它。 - Mahmoud Al-Qudsi
在Ubuntu上,没有pdfjoin,但是你可以使用pdfjam来完成它。它使用相同的参数。 - xhudik

20

ImageMagickconvert工具是我的首选。

The convert program is a member of the ImageMagick suite of tools. Use it to convert between image formats as well as resize an image, blur, crop, despeckle, dither, draw on, flip, join, re-sample, and much more.

convert [input-option] input-file [output-option] output-file`

如果您希望图像文件(因此其质量和文件大小)保持不变,只需将PDF容器放在它们周围:

convert In.png In-2.png Someother-*.png Result.pdf

如果您希望文件大小更小,并且可以接受质量损失,您可以先将它们转换为JPEG格式。 (ImageMagick还支持更改PNG压缩级别,但通常您的输入文件已经使用了最高级别。)

convert 1.png 2.png -compress jpeg -quality 50 Result.pdf

quality选项的值应在0到100之间。

或者,您可以通过将图像重新采样到特定分辨率来达到更小的文件大小(和质量)。

convert *.png 2.png -resample 300 Result.pdf

resample的值指每英寸的像素数。ImageMagick从输入图像的EXIF部分读取原始密度,如果没有则回退到72 dpi。您可以使用density参数为输入图像设置自定义分辨率。

当然,您还可以组合使用compressqualityresample参数。


这里有人知道如何撤销操作吗? - Andrei Cioara
图像文件不会被删除,但您可以将它们复制到其他地方以确保安全。在解决https://dev59.com/zFgQ5IYBdhLWcg3wWCc0问题之前,我也遇到了一些困难。 - Audrius Meškauskas
任何想将图像转换为PDF并看到错误信息“不允许转换”的人,请查看此答案:https://askubuntu.com/questions/1127260/imagemagick-convert-not-allowed - Tuhin
最近,imagemagick 默认情况下拒绝进行 PDF 转换。如果您遇到此问题,请参阅此问题以了解如何更改此策略。https://dev59.com/TVQJ5IYBdhLWcg3w05j2 - user2565010
我该如何定义PDF版本? - Nur Muhammad

5
我偷了这个方法,但这是我从Jeremiah Willcock和另一个答案网站中使用的解决方案。暂时不想翻阅历史记录。我撒谎了,我做了。(Tully @https://askubuntu.com/a/626301)
我需要一个足够小的文件来发送电子邮件。

将图像合并为PDF (从工作目录使用命令行:

user@box:/home/user/scans/:$ 
convert 1.png 2.png convertoutput.pdf

在合并后使用ghostscript压缩(我几乎在默认的kde系统上使用):

gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/default \
   -dNOPAUSE -dQUIET -dBATCH -dDetectDuplicateImages -dCompressFonts=true \
   -r150 -sOutputFile=output.pdf convertoutput.pdf

我的文件有14张图片(转换后为19MB,通过gs处理后只有1.6MB,质量仍然很好)。输出文件名为output.pdf


您可以使用参数-compress jpeg -quality 50直接使用convert压缩文件。请参阅我的回答 - Michael Schmid
@MichaelSchmid,使用convert进行压缩效果不够好。它只能降低JPEG质量,而gs解决方案则会改变分辨率。如果您尝试对高分辨率图像进行操作,即使您选择极低的jpg质量,您也会看到大小差异之大。 - mak
是的,重新采样可能比JPEG压缩更有效。而且ImageMagick也支持这一点。我已经在我的答案中添加了该选项。 - Michael Schmid

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