我需要合并(合并/覆盖)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)
感谢@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)
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)