我们有的时候会需要把很多个PDF文件合并成一个文件,以方便快速统一处理。比如,你需要把几十个甚至上百个PDF打印出来,如果一个一个打印,效率自然不高,但如果把它们合并成一个文件一起打印,就会方便很多。通过下面代码可以轻松实现。这里介绍两种方式。(本文中代码为Python 3.8环境)
第一种:简单地把同一个文件夹下q的多个PDF,合并成一个文件。代码如下:
import os from PyPDF2 import PdfMerger # 指定待合并文件所在的路径 source_folder_path = r'C:\Input' # 指定合并后的输出文件路径,如果不存在建立该路径 output_floder = r'C:\Output' if not os.path.exists(output_floder): os.makedirs(output_floder) output_file = r'C:\Output\CombinedPDFfile.pdf' def merge_pdfs_in_folder(source_folder_path, output_filepath): pdf_merger = PdfMerger() # 遍历文件夹中的所有文件 for filename in os.listdir(source_folder_path): if filename.endswith(".pdf"): full_filepath = os.path.join(source_folder_path, filename) with open(full_filepath, 'rb') as pdf_file: pdf_merger.append(pdf_file) with open(output_filepath, 'wb') as output_file: pdf_merger.write(output_file) # 调用函数进行合并 merge_pdfs_in_folder(source_folder_path, output_file) print(f"PDF文件合并完成,保存为:{output_file}")
第二种:有条件合并。有的PDF文件可能带有封面页,在合并多个这样类似的文件成为一个文件后会出现相同的封面页反复出现的情况。为了避免这样的情况,升级了第一种情况下的代码,使其更具灵活性。代码如下:
import PyPDF2, os # 指定待合并文件所在的路径 source_folder_path = r'C:\Input' # 指定合并后的输出文件路径 output_file = r'C:\Output\CombinedPDFfile.pdf' pdfFiles = [] for filename in os.listdir(source_folder_path): if filename.endswith('.pdf'): pdfFiles.append(source_folder_path + '\\'+ filename) pdfFiles.sort(key=str.lower) pdfWriter = PyPDF2.PdfWriter() # 遍历文件夹中的所有文件 for filename in pdfFiles: pdfFileObj = open(filename, 'rb') pdfReader = PyPDF2.PdfReader(pdfFileObj) for pageNum in range(1, len(pdfReader.pages)): pageObj = pdfReader.pages[pageNum] pdfWriter.add_page(pageObj) pdfOutput = open(output_file, 'wb') pdfWriter.write(pdfOutput) print(f"PDF文件合并完成,保存为:{output_file}") pdfOutput.close()