【问题标题】:Merging png images into one pdf file [closed]将png图像合并到一个pdf文件中[关闭]
【发布时间】:2011-06-14 07:10:46
【问题描述】:

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

【问题讨论】:

    标签: unix pdf merge png


    【解决方案1】:

    通过查看 ImageMagick 上的文档,可能很简单:

    convert 1.png 2.png myfile.pdf
    

    请参阅 cmets 了解可能的风险。如果这不起作用,PDFjam 声称能够解决您的问题。

    【讨论】:

    • 太棒了。太简单。它会自动调整图像和所有内容的大小。我喜欢开源。
    • 有没有办法控制文档的质量或生成的 PDF 的文件大小?我需要上传一些最大文件大小为 2.5 MiB 的文档。我尝试过使用 -quality 选项,但文件大小始终为 ~9.5 MiB。
    • 是否可以将图像文件附加到现有的 pdf 中?
    • 使用convert *.jpg file.pdf转换指定类型文件夹中的所有文件
    • @arielnmz,可以使用参数-compress jpeg -quality 50压缩文件。见my answer
    【解决方案2】:

    如果我想将一些扫描合并到一个 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 命令是 Jeremiah Willcock 的回答中提到的 PDFjam 的一部分。因此,您很可能必须使用您的发行版包管理器安装一个名为 pdfjamtexlive-extra-utils 的包。自 2010 年 11 月 13 日发布的版本 2.07 起,PDFjam 能够使用 png 文件作为输入。

    【讨论】:

    • 似乎 pdfjoin 不见了,现在只有一个名为 pdfunite 的不同工具,它只能将几个 PDF 文件合并为一个...
    • @Gregor 是什么让你说 pdfjoin 消失了?
    • @Pascal_Rosin 在 Debian 和 Arch 存储库中都找不到它...
    • pdfjoin 在某些平台上的 texlive-extra-utils 包中可用。您也可以随时从源代码安装它。
    • 在 Ubuntu 上 - 没有 pdfjoin,但您可以使用 pdfjam 来实现。它采用相同的参数
    【解决方案3】:

    ImageMagickconvert 工具是我的首选。

    转换程序是 ImageMagick 工具套件的成员。 使用它在图像格式之间进行转换以及调整图像大小, 模糊、裁剪、去斑、抖动、绘制、翻转、连接、重新采样等等。

    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 参数。

    【讨论】:

    【解决方案4】:

    我偷了这个,但这是我从 Jeremiah Willcock 和另一个答案网站使用的解决方案。暂时不去挖掘历史。我撒谎了,我做到了。 (塔莉@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

    【讨论】:

    • 你可以直接用convert压缩文件,使用参数-compress jpeg -quality 50。见my answer
    • @MichaelSchmid 使用转换的压缩效果不那么好。它只会降低 jpeg 质量,而 gs 解决方案会改变分辨率。如果您尝试使用高分辨率图像,即使您选择极低的 jpg 质量,您也会看到大小差异有多大。
    • 是的,重采样确实可能比 JPEG 压缩更有效。 ImageMagick 也支持这一点。我已在答案中添加了该选项。
    猜你喜欢
    • 2020-10-10
    • 2011-01-31
    • 2013-11-20
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    相关资源
    最近更新 更多