我在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
?
我没有足够的 "声誉 "来评论。但由于我打算发布一个答案,所以我把它做得很长。
通常当人们想要 "合并 "文档时,他们的意思是 "合并 "它们,或者像你指出的那样,在另一个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)
试试这个,你可以用 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()