我该如何在Unix中将多个.png
文件合并成一个PDF文件?
如果我想将一些扫描合并成一个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 在回答中提到的那样。因此,您很可能需要使用发行版包管理器安装名为 pdfjam
或 texlive-extra-utils
的软件包。自2010年11月13日发布的版本2.07以来,PDFjam 能够使用 png
文件作为输入。
pdfjoin
在某些平台上的 texlive-extra-utils
包中可用。您也可以随时从源代码安装它。 - Mahmoud Al-Qudsipdfjoin
,但是你可以使用pdfjam
来完成它。它使用相同的参数。 - xhudikImageMagick的convert工具是我的首选。
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
参数为输入图像设置自定义分辨率。
当然,您还可以组合使用compress
、quality
和resample
参数。
将图像合并为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
来压缩文件。请参见我的回答。 - Michael Schmidconvert
是其中的一部分)。请参考以下链接暂时禁用该策略:https://askubuntu.com/questions/1081895/trouble-with-batch-conversion-of-png-to-pdf-using-convert - Shernconvert
进行此操作时,它会悄悄地失败。末尾的页面丢失了。 - piojo