有没有更快的方法来合并两个文件,而不是逐页合并?

问题描述 投票:0回答:1

我在Python 3上使用 PyPDF2 为了添加页码到一个新生成的PDF中(我使用的是 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?

python pypdf2
1个回答
2
投票

我没有足够的 "声誉 "来评论。但由于我打算发布一个答案,所以我把它做得很长。

通常当人们想要 "合并 "文档时,他们的意思是 "合并 "它们,或者像你指出的那样,在另一个pdf的结尾处连接或附加一个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)

0
投票

试试这个,你可以用 PyPdf2s PdfMerger 类。

使用文件连接,你可以使用append方法连接文件。

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()
© www.soinside.com 2019 - 2024. All rights reserved.