PyPDF2无法正确合并页面:拆分习题与答案PDF求助
问题分析与解决方案
问题根源
你每次处理单个PDF时,都重新创建了PdfFileWriter实例,并且用ab(追加二进制)模式写入输出文件。PyPDF2的write()方法会写入完整的PDF文件结构,多次追加会导致文件内部结构混乱,最终只有最后一次写入的内容能被正常解析,所以只保留了最后一个PDF的对应页面。
修正方案
将两个PdfFileWriter的初始化移到循环外部,统一收集所有页面后再一次性写入文件,避免多次追加导致的结构错误。
修正后的代码:
import PyPDF2 def main(): # 初始化全局的两个writer,用于收集所有习题页和答案页 writer_worksheets = PyPDF2.PdfFileWriter() writer_answers = PyPDF2.PdfFileWriter() for i in range(1, 26): pdf_path = f"Week 2/{i}.pdf" with open(pdf_path, 'rb') as file: reader = PyPDF2.PdfFileReader(file) # 遍历当前PDF的所有页面 for page_number in range(reader.numPages): page = reader.getPage(page_number) if page_number % 2 == 0: # 第0页(第一页)是习题,添加到习题writer writer_worksheets.addPage(page) else: # 第1页(第二页)是答案,添加到答案writer writer_answers.addPage(page) # 一次性写入所有收集到的页面 with open("Week 2/worksheets.pdf", 'wb') as worksheets_file: writer_worksheets.write(worksheets_file) with open("Week 2/answers.pdf", 'wb') as answers_file: writer_answers.write(answers_file) if __name__ == "__main__": main()
关键改动说明
- 使用
wb(写入二进制)模式替代ab,因为我们是一次性生成完整的合并PDF,不需要追加内容。 - 将
PdfFileWriter实例的创建放到循环外,确保所有PDF的对应页面都被收集到同一个writer中,最终生成结构完整的合并文件。
内容的提问来源于stack exchange,提问作者Sean
相关产品推荐
相关产品推荐

