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

使用PyPDF合并PDF时,修改书签页码后添加大纲报错的解决方法

解决PyPDF修改书签页码后添加大纲报错的问题

错误原因

你触发的TypeError是因为PdfWriter.add_outline()方法仅需接收一个参数(修改后的outline对象),但你额外传入了页码参数,导致参数数量不匹配。

修正后的完整代码

from pypdf import PdfReader, PdfWriter
from pypdf.generic import NameObject, NumberObject

def update_outline_page_numbers(outline, increment_value):
    # 递归处理所有层级的书签
    for item in outline:
        if isinstance(item, list):
            # 处理嵌套子书签
            update_outline_page_numbers(item, increment_value)
        else:
            page_key = NameObject("/Page")
            if page_key in item:
                current_page = item[page_key]
                item[page_key] = NumberObject(current_page + increment_value)

# 初始化阅读器与写入器
pdf_reader = PdfReader("example.pdf")
pdf_writer = PdfWriter()

# 获取原大纲并更新页码
outlines = pdf_reader.outline
increment_value = int(total_pages)  # total_pages为你实际需要递增的页码数
update_outline_page_numbers(outlines, increment_value)

# 追加PDF内容(不导入原大纲)
pdf_writer.append("input_file.pdf", import_outline=False)

# 添加修改后的大纲
for outline_item in outlines:
    pdf_writer.add_outline(outline_item)

# 保存最终PDF
with open("merged_output.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

关键修改说明

  • 补充缺失导入:新增PdfWriter、NameObject和NumberObject的导入,避免因未导入类导致的运行错误。
  • 递归处理嵌套书签:新增递归函数update_outline_page_numbers,处理PDF中可能存在的多层级嵌套书签,原代码仅能处理一级书签。
  • 修正add_outline调用:调用pdf_writer.add_outline()时仅传入修改后的outline对象即可,无需额外传递页码——outline内部已包含更新后的页码信息。
  • 完善全流程:补充PdfWriter初始化与最终PDF保存代码,确保合并流程完整闭环。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:54:55