将多个 png 转换为一个 pdf

将多个 png 转换为一个 pdf

我有 280 个 pgn 文件,想要合并并转换为一个 pdf。

PNG 文件的名称顺序为 p000.png、p001.png 等,总空间约为 30mb。

我做到了:

convert p00*.png to myfile.pdf 

一切顺利。幸运的是,顺序正确。

但当我这样做时:

conver p*.png to myfile.pdf

它占用了我全部 4Gb 内存和一半交换空间。然后它崩溃并出现错误

convert: memory allocation failed `myfile.pdf' @ error/pdf.c/WritePDFImage/1595.

您对如何解决这个问题有任何想法吗?

我认为一个足够好的解决方案是convert一次使用一个文件到 pdf,使用相同的名称。然后使用pdfunitepdftk合并它们。但我不知道如何使用convert 这种方式。

答案1

Imagemagick 似乎对内存的使用非常敏感。建议使用 -limit 来限制 convert 将使用的内存大小,它应该使用磁盘缓存来处理所需的任何其他内容。请在此处阅读解释:

http://www.imagemagick.org/pipermail/magick-users/2002-March/001285.html

以下是使用 -limit 选项的方法:http://www.imagemagick.org/script/command-line-options.php#limit

如果没有,您可以按照您描述的方式进行操作,单独转换每个图像,然后使用其他工具合并它们。例如

for name in p*.png; do convert $name `basename $name .png`.pdf; done

应该这么做。

基本上,它会遍历所有 png 文件,对它们运行转换,唯一的神奇之处在于它将basename $name .png被文件名减去 .png 部分替换,以便在将 .pdf 扩展名附加到它时,文件名才有意义。

亲自尝试一下,你就能感受到 basename 的作用:

basename something.png .png
echo `basename something.png .png`.pdf

相关内容