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

PyPDF2报Cannot read an empty file错误,求PDF页码溢出修复方案

问题分析与修复

错误根源

你遇到的EmptyFileError核心原因是文件打开模式错误:

  • 用w+模式打开PDF文件时,会直接清空原有文件内容,导致PdfReader读取的是一个空文件,触发报错。
  • 写入PDF时误用rb只读模式,完全无法写入内容。
  • 同时你参考的旧指南使用了PyPDF2的废弃API,部分写法不符合当前版本规范。

修正后的代码

from PyPDF2 import PdfReader, PdfWriter, PageObject, Transformation

for file in oopsarr:
    file_path = f"{path}\\{file}"
    # 用只读二进制模式打开原文件
    with open(file_path, 'rb') as pdf_file:
        pdf_reader = PdfReader(pdf_file)
        pg1 = pdf_reader.pages[0]
        pg2 = pdf_reader.pages[1]
        # pg3 = pdf_reader.pages[2]  # 原代码未用到该页面,暂时注释

    # 创建空白页并处理页面合并
    translated_page = PageObject.create_blank_page(None, pg2.mediabox.width, pg2.mediabox.height)
    # 复制页面后再做变换,避免修改原页面对象
    pg2_transformed = pg2.copy()
    pg2_transformed.add_transformation(Transformation().translate(tx=0, ty=-400))
    translated_page.merge_page(pg2_transformed)
    translated_page.merge_page(pg1)

    # 用写入二进制模式保存文件
    with open(file_path, 'wb') as output_file:
        pdf_writer = PdfWriter()
        pdf_writer.add_page(translated_page)
        # 若需要保留原第3页,取消下面的注释
        # pdf_writer.add_page(pg3)
        pdf_writer.write(output_file)

关键修改点说明

  • 文件模式修正:读取用rb(只读二进制),写入用wb(写入二进制),彻底避免文件清空或无法写入的问题。
  • 使用with语句:自动管理文件流,无需手动调用close(),防止资源泄漏。
  • 复制页面再变换:直接修改原pg2对象可能影响后续操作,复制后再做变换更安全。
  • 移除错误的Writer初始化参数:PdfWriter不需要传入已打开的文件对象,单独创建后再写入即可。
  • 清理冗余代码:原代码中pg3定义后未使用,暂时注释,若需要保留原第3页可取消注释添加到Writer中。

内容的提问来源于stack exchange,提问作者Sterling A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 05:07:37