from PyPDF2 import PdfFileReader, PdfFileWriter infn = 'infn.pdf' outfn = 'outfn.pdf' # 获取一个 PdfFileReader 对象 pdf_input = PdfFileReader(open(infn, 'rb')) # 获取 PDF 的页数 page_count = pdf_input.getNumPages() print(page_count) # 返回一个 PageObject page = pdf_input.getPage(i) # 获取一个 PdfFileWriter 对象 pdf_output = PdfFileWriter() # 将一个 PageObject 加入到 PdfFileWriter 中pdf_output.addPage(page) # 输出到文件中 pdf_output.write(open(outfn, 'wb'))

合并多个PDF

合并多个PDF就读取多个文件,然后写入一个文件中。不过这样需要计算页面数,不如直接用PdfFileMerger,提供了append方法
from PyPDF2 import PdfFileReader, PdfFileMerger def read_pdf(pdf_name): stream = open(pdf_name, "rb") reader = None try: reader = PdfFileReader(stream) except Exception as e: print(e) return reader def merge_pdf(pdfs, output_name = "merge.pdf"): merge = PdfFileMerger() for pdf_name in pdfs: pdf_obj = read_pdf(pdf_name) print("开始合并 《%s》 页面数: %s" % (pdf_name, pdf_obj.getNumPages())) merge.append(pdf_obj) merge.write(open(output_name, "wb")) print("合并后总页面数:", merge.id_count) print("写入当前目录", output_name) if __name__ == '__main__': pdfs = [ "file1.pdf", "file2.pdf", "file3.pdf" ] merge_pdf(pdfs)
输出结果:
开始合并 《file1.pdf》 页面数: 28 开始合并 《file2.pdf》 页面数: 34 开始合并 《file3.pdf》 页面数: 38 合并后总页面数: 100 写入当前目录 merge.pdf

总结

PDF文件的合并是很常用的操作,Python在处理PDF文件方面非常简单,主要原因是别人已经封装好了包,只需要简单的调用就能满足基本需求。文章的最后给出了一个简单合并多个PDF的程序用例,供参考使用。