如何将多个PDF文件合并/转换为一个大型PDF文件?

我尝试了以下操作,但目标文件的内容与预期不符:

convert file1.pdf file2.pdf merged.pdf

我需要一个非常简单/基本的命令行(CLI)解决方案。最好是我可以将合并/转换的输出直接管道化为pdf2ps(正如我之前在这里提出的问题:Linux管道化(convert->pdf2ps->lp)中所尝试的那样)。


当前回答

使用PyPI中的pdftools。

下载tar.gz文件并解压缩,然后运行如下命令

python pdftools-1.1.0/pdfmerge.py -o output.pdf -d file1.pdf file2.pdf file3 

在运行上述命令之前,应该安装python3

此工具支持以下内容

添加插入去除旋转分裂合并拉链

你可以在GitHub上找到更多细节,它是开源的

其他回答

你可以看到使用免费和开源的pdftools(免责声明:我是它的作者)。

它基本上是Latex pdfpages包的Python接口。

要逐个合并pdf文件,您可以运行:

pdftools --input-file file1.pdf --input-file file2.pdf --output output.pdf

要将目录中的所有pdf文件合并在一起,可以运行:

pdftools --input-dir ./dir_with_pdfs --output output.pdf

尝试好的重影脚本:

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile=merged.pdf mine1.pdf mine2.pdf

或者甚至是低分辨率PDF的改进版本(感谢Adriano指出这一点):

gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -dPDFSETTINGS=/prepress -sOutputFile=merged.pdf mine1.pdf mine2.pdf

在这两种情况下,输出分辨率都比使用convert的方式高得多:

convert -density 300x300 -quality 100 mine1.pdf mine2.pdf merged.pdf

这样,您就不需要安装任何其他东西,只需使用系统中已安装的东西即可(至少默认情况下,这两个都在我的框中)。

更新:首先感谢您的所有评论!!只是一个可能对你们有用的提示,在谷歌搜索后,我发现了一个缩小PDF大小的妙招,我用它将一个300 MB的PDF缩小到了15 MB,分辨率可以接受!所有这一切都有一个很好的脚本,这里是:

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

这里是一个检查合并错误的Bash脚本。

我遇到的问题是,一些PDF合并产生了一些错误消息。由于查找腐败的PDF文件需要反复尝试,我为此编写了一个脚本。

以下Bash脚本逐一合并文件夹中的所有可用PDF,并在每次合并后显示成功状态。只需将其与PDF一起复制到文件夹中,然后从那里执行。

#!/bin/bash

PDFOUT=_all_merged.pdf
rm -f "${PDFOUT}"

for f in *.pdf
do
  printf "processing %-50s" "$f  ..." >&2
  if [ -f "$PDFOUT" ]; then
    # https://stackoverflow.com/questions/8158584/ghostscript-to-merge-pdfs-compresses-the-result
    #  -dPDFSETTINGS=/prepress
    status=$(gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOutputFile="${PDFOUT}.new" "${PDFOUT}" "$f" 2> /dev/null)
    if [ "$status" ]
    then
      echo "gs ERROR: $status" >&2
    else
      echo "successful" >&2
    fi
    mv "${PDFOUT}.new" "${PDFOUT}"
  else
    cp "$f" "${PDFOUT}"
    echo "successful" >&2
  fi
done

示例输出:

processing inp1.pdf  ...                                     successful
processing inp2.pdf  ...                                     successful

Apache PDFBoxhttp://pdfbox.apache.org/

PDF发电机此应用程序将获取pdf文档列表并将其合并,将结果保存到新文档中。

用法:java-jar pdfbox-app-x.y.z.jar PDFMerger“源PDF文件(2..n)”“目标PDF文件”

您可以使用sejda控制台,免费且开源。解压缩并运行sejda console merge-f file1.pdf file2.pdf-o merged.pdf

它保留了书签、链接注释、acroforms等。实际上,它有很多选项可以使用,只需运行sejda console merge-h即可查看所有选项。