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

使用pdfrw提取多PDF指定页合并时报Invalid PDF header错误如何解决

报错原因
  • 该报错指向你当前目录下部分后缀为.pdf的文件并非合法PDF文件:这些文件实际是下载异常的HTML网页(比如从网页端另存时错误保存为PDF后缀、下载PDF时网络异常得到的错误页文件),文件头部是HTML的<!doctype html>标识,不符合PDF文件要求的%PDF-开头规范,所以pdfrw无法解析。
排查&修复方案
  • 先确认代码执行后打印的files列表,逐个打开列表内的PDF文件,无法用本地PDF阅读器正常打开的就是损坏/假冒的PDF,删除或重新下载正确版本即可解决报错。
  • 可以在代码中增加PDF合法性校验逻辑,避免非法文件导致程序中断,同时补充你需求中缺失的「合并所有提取页为单个PDF」的逻辑。
修复后完整代码
from pdfrw import PdfReader, PdfWriter
import os

def is_valid_pdf(file_path):
    """校验文件是否为合法PDF"""
    if not os.path.isfile(file_path) or not file_path.endswith('.pdf'):
        return False
    try:
        with open(file_path, 'rb') as f:
            # 合法PDF前4个字节为%PDF
            return f.read(4) == b'%PDF'
    except:
        return False

# 只保留合法的PDF文件
files = [f for f in os.listdir('.') if is_valid_pdf(f)]
print(f"合法PDF文件清单:{files}")

# 初始化合并用的写入器
merge_writer = PdfWriter("合并后的完整文件.pdf")
# 要提取的页面区间,(起始页, 结束页),左闭右开,比如(6,8)就是提取第6、7页
parts = [(6, 7)]

for pdf in files:
    pages = PdfReader(pdf).pages
    title = os.path.splitext(pdf)[0]
    for part in parts:
        # 可选:生成分离的单文件提取结果
        single_writer = PdfWriter(f'{title}_第{part[0]}页.pdf')
        for pagenum in range(*part):
            page = pages[pagenum-1]
            single_writer.addpage(page)
            # 同时添加到合并文件的写入器
            merge_writer.addpage(page)
        single_writer.write()

# 输出合并后的完整PDF
merge_writer.write()

内容的提问来源于stack exchange,提问作者Manas Paul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:18:02