You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 09:57:43