有没有比逐页合并两个文件更快的方法?

Is there a faster way to merge two files rather than page by page?

我在 Python 3,使用 PyPDF2 and in order to add page numbers to a newly generated PDF (which I do using reportlab) 我按以下方式逐页合并两个 PDF 文件:

from PyPDF2 import PdfFileWriter, PdfFileReader

def merge_pdf_files(first_pdf_fp, second_pdf_fp, target_fp):
    """
    Merges two PDF files into a target final PDF file.

    Args:
        first_pdf_fp: the first PDF file path.
        second_pdf_fp: the second PDF file path.
        target_fp: the target PDF file path.
    """
    pdf1 = PdfFileReader(first_pdf_fp)
    pdf2 = PdfFileReader(second_pdf_fp)
    assert (pdf1.getNumPages() == pdf2.getNumPages())
    final_pdf_writer = PdfFileWriter()
    for i in range(pdf1.getNumPages()):
        number_page = pdf1.getPage(i)
        content_page = pdf2.getPage(i)
        content_page.mergePage(number_page)
        final_pdf_writer.addPage(content_page)
    with open(target_fp, "wb") as final_os:
        final_pdf_writer.write(final_os)

但这很慢。使用 PyPDF2?

是否有更快更简洁的方式来一次合并

试试这个。 您可以使用 PyPdf2s PdfMerger class.

使用文件连接,您可以使用追加方法连接文件

from PyPDF2 import PdfFileMerger

pdfs = ['file1.pdf', 'file2.pdf', 'file3.pdf', 'file4.pdf']

merger = PdfFileMerger()

for pdf in pdfs:
    merger.append(pdf)

merger.write("result.pdf")
merger.close()

我没有足够的 'reputation' 发表评论。但是因为我要 post 一个答案,所以我把它写得很长。

通常,当人们想要 'merge' 文档时,他们的意思是 'combining' 他们,或者如您所指出的,将一个 pdf 连接或附加到另一个 pdf 的末尾(或介于两者之间的某个位置)。但是根据您提供的代码,您的意思似乎是将一个 pdf 叠加在另一个上,对吗?或者换句话说,您希望将 pdf1 和 pdf2 的第 1 页合并为一个页面,作为新 pdf 的一部分。

如果是这样,您可以使用它(根据用于说明水印的示例进行修改)。 还是一页一页叠加。但是,众所周知,pdfrw 与 PyPDF2 相比速度超快,并且应该与 reportlab 配合得很好。我还没有比较速度,所以不确定这是否真的会比你已经拥有的速度更快

from pdfrw import PdfReader, PdfWriter, PageMerge

p1 = pdfrw.PdfReader("file1")
p2 = pdfrw.PdfReader("file2")

for page in range(len(p1.pages)):
    merger = PageMerge(p1.pages[page])
    merger.add(p2.pages[page]).render()

writer = PdfWriter()
writer.write("output.pdf", p1)

也许答案会在 Is there a way to speed up PDF page merging... 中对您有所帮助,其中使用 multiprocessing 需要 100% 的处理器