使用 pymupdf 每页叠加 2 个 pdf 文件

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

我需要合并(合并/覆盖)2个pdf文件,例如每页的第二个和第一个。我已经尝试过代码

import fitz

doc1 = fitz.open(background)
doc2 = fitz.open(only_text_path)
doc1.insertPDF(doc2)

但它只连接 doc1 + doc2,不覆盖

哪里可以使用

fitz
(pymupdf 库)来做到这一点?

我找到了一个带有

PyPDF2
的代码,但是运行速度很慢而且不太稳定:

from PyPDF2 import PdfFileWriter, PdfFileReader

output = PdfFileWriter()
with open(background, "rb") as f:
     empty_pdf = PdfFileReader(f)
     with open(only_text_path, 'rb') as f2:
        text_pdf = PdfFileReader(f2)
        for i in range(empty_pdf.getNumPages()):
           empty_page = empty_pdf.getPage(i)
           text_page = text_pdf.getPage(i)
           empty_page.mergePage(text_page)
           output.addPage(empty_page)
        with open(merge_result_path, "wb") as out_pdf:
           output.write(out_pdf)
python pdf merge overlay pymupdf
2个回答
1
投票

感谢@KJ

我使用了这个代码,它正在工作

    doc1 = fitz.open(empty_path)
    doc2 = fitz.open(only_text_path)

    for i in range(doc1.page_count):
        page = doc1.load_page(i)
        page_front = fitz.open()
        page_front.insert_pdf(doc2, from_page=i, to_page=i)
        page.show_pdf_page(page.rect, page_front, pno=0, keep_proportion=True, overlay=True, oc=0, rotate=0, clip=None)

    doc1.save(merge_result_path, encryption=fitz.PDF_ENCRYPT_KEEP)

0
投票

Pypdf2 已被弃用。更新的示例:

from pypdf import PdfWriter, PdfReader

only_text_path= "foo.pdf"
background= "bar.pdf"
merge_result_path = "baz.pdf"

output = PdfWriter()
with open(background,"rb") as f:
     empty_pdf = PdfReader(f)
     with open(only_text_path, 'rb') as f2:
        text_pdf = PdfReader(f2)
        for i in range(empty_pdf.get_num_pages()):
           empty_page = empty_pdf.get_page(i)
           text_page = text_pdf.get_page(i)
           empty_page.merge_page(text_page)
           output.add_page(empty_page)
        with open(merge_result_path, "wb") as out_pdf:
           output.write(out_pdf)
© www.soinside.com 2019 - 2024. All rights reserved.