如何使用 Imagemagick 合并 pdf:s(分辨率问题)

55 pdf resolution imagemagick conversion

当我尝试使用 Imagemagick 合并两个 .pdf 文件时

convert pdf1.pdf pdf2.pdf temp.pdf
Run Code Online (Sandbox Code Playgroud)

生成的 temp.pdf 文件的分辨率似乎很低。如何保持与源文件中的分辨率相同?

小智 68

Barns 是对的,但如果 pdftk 不起作用,请尝试 ghostscript。

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=temp.pdf pdf1.pdf pdf2.pdf
Run Code Online (Sandbox Code Playgroud)


小智 25

如果要合并的每个文件都在同一个文件夹中:

convert -density 150 $(ls -rt *pdf) output.pdf
Run Code Online (Sandbox Code Playgroud)

该参数-density 150保持合并 PDF 的质量。

  • 关于所有 PDF 语法的旁注,您可以省略 sub-ls 命令:`convert -density 150 *.pdf output.pdf` (8认同)
  • 请永远不要像这样使用“ls”。(1) 如果某些文件名包含空格或特殊字符,命令可能会失败,或者更糟糕的是,导致数据损坏。(2) `ls` 没有 POSIX 标准,因此不能保证可移植性。(2) 需要引用结果,但由于子流程的原因不能这样做。相反,要查找文件,请使用“find”命令,或者更好的是,使用 @Josh 解释的 shell。 (2认同)

小智 23

Imagemagick 的 convert 命令通常用于将图像文件从一种格式转换为另一种格式,在这种情况下,它可能实际上在将两个“图像”(PDF)输出到单个文件之前执行了各种内部转换。

我建议您考虑使用 PDF Toolkit (pdftk) 而不是http://www.accesspdf.com/pdftk/

从网站上的示例来看,这应该很简单:

pdftk pdf1.pdf pdf2.pdf cat output temp.pdf
Run Code Online (Sandbox Code Playgroud)


小智 10

我总是忘记如何做到这一点,并在我搜索时首先找到这个问题。

convert -density 600 file1.pdf file2.pdf -resize 50% new.pdf
Run Code Online (Sandbox Code Playgroud)

链接示例的密度为 144,但是,它从来没有高到不会出现像素化。

http://web.archive.org/web/20130311071316/http://studio.imagemagick.org/pipermail/magick-users/2009-September/022958.html


小智 7

如果运行 linux,您还可以尝试 poppler,它提供了pdfunite在不操作分辨率的情况下进行连接的功能。