您可以使用pypdf https://github.com/py-pdf/pypdfs PdfMerger https://pypdf.readthedocs.io/en/stable/modules/PdfMerger.html class.
文件串联
您可以简单地连接 https://en.wikipedia.org/wiki/Concatenation文件通过使用append https://pypdf.readthedocs.io/en/latest/modules/PdfMerger.html#pypdf.PdfMerger.append method.
from pypdf import PdfMerger
pdfs = ['file1.pdf', 'file2.pdf', 'file3.pdf', 'file4.pdf']
merger = PdfMerger()
for pdf in pdfs:
merger.append(pdf)
merger.write("result.pdf")
merger.close()
如果需要,您可以传递文件句柄而不是文件路径。
文件合并
如果您想要更细粒度的合并控制,可以使用merge https://pypdf.readthedocs.io/en/latest/modules/PdfMerger.html#pypdf.merger.PdfMerger.merge的方法PdfMerger
,它允许您在输出文件中指定插入点,这意味着您可以将页面插入文件中的任何位置。这append
方法可以被认为是merge
其中插入点是文件末尾。
e.g.
merger.merge(2, pdf)
在这里,我们将整个 PDF 插入到输出中,但在第 2 页。
页面范围
如果您希望控制从特定文件附加哪些页面,您可以使用pages
的关键字参数append
and merge
,传递一个元组形式(start, stop[, step])
(就像常规的range
功能)。
e.g.
merger.append(pdf, pages=(0, 3)) # first 3 pages
merger.append(pdf, pages=(0, 6, 2)) # pages 1,3, 5
如果您指定了无效范围,您将得到一个IndexError
.
Note:另外,为了避免文件保持打开状态,PdfMerger
当合并文件写入后,应调用 close 方法。这可确保及时关闭所有文件(输入和输出)。遗憾的是PdfMerger
没有作为上下文管理器实现,所以我们可以使用with
关键字,避免显式关闭调用并获得一些简单的异常安全性。
您可能还想查看pdfly cat https://github.com/py-pdf/pdfly由 pypdf 开发人员提供的命令。您可以完全避免编写代码的需要。
pypdf 文档还includes https://pypdf.readthedocs.io/en/stable/user/merging-pdfs.html一些演示合并的示例代码。
PyMuPdf
另一个可能值得一看的图书馆是PyMuPdf https://github.com/pymupdf/PyMuPDF。合并同样简单。
从命令行:
python -m fitz join -o result.pdf file1.pdf file2.pdf file3.pdf
并从代码中
import fitz
result = fitz.open()
for pdf in ['file1.pdf', 'file2.pdf', 'file3.pdf']:
with fitz.open(pdf) as mfile:
result.insert_pdf(mfile)
result.save("result.pdf")
有很多选项,详细信息在项目中wiki https://github.com/pymupdf/PyMuPDF/wiki.
注意:在旧版本的 PyMuPDF 中insert_pdf
was insertPDF