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

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

convert file1.pdf file2.pdf merged.pdf

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


当前回答

我喜欢Chasmo的想法,但我更倾向于利用诸如

convert $(ls *.pdf) ../merged.pdf

提供多个源文件进行转换,从而将它们合并为一个通用的pdf。此命令将实际目录中所有具有.pdfextension的文件合并到父目录中的merged.pdf中。

其他回答

你可以看到使用免费和开源的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

我支持pdfunite的建议。然而,当我试图合并>2k个PDF文件时,我得到了参数列表太长的错误。

我求助于Python和两个外部包:PyPDF2(处理所有与PDF相关的事情)和natsort(对目录的文件名进行“自然”排序)。如果这可以帮助某人:

from pathlib import Path
from PyPDF2 import PdfMerger
import natsort

DIR = Path("dir-with-pdfs/")
OUTPUT = "output.pdf"

paths = DIR.glob("*.pdf")
paths = natsort.natsorted(paths)

merger = PdfMerger()

for path in paths:
    merger.append(path)

merger.write(OUTPUT)

很抱歉,我自己用谷歌找到了答案,运气不错:)

对于感兴趣的人;

我在debian服务器上安装了pdftk(pdf工具包),并使用以下命令实现了所需的输出:

pdftk file1.pdf file2.pdf cat output output.pdf

OR

gs -q -sPAPERSIZE=letter -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=output.pdf file1.pdf file2.pdf file3.pdf ...

这反过来又可以直接输送到pdf2ps中。

这里是一个检查合并错误的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

PdfCpu非常有用:

pdfcpu merge c.pdf a.pdf b.pdf

https://pdfcpu.io/core/merge