# PDF 添加书签：让Claude按章节表生成真实导航，核对印刷页码与物理页

原12页：物理1为封面，2/3为罗马前言，正文印刷1对应物理4。7个书签含层级目的地，重复运行脚本不累积旧outline。

## 文件身份

所有人物、组织、数值为原创虚构教学资料。作者本地原生参考不代表目标SaaS实测；本题未登录目标账号、购买权益、调用付费API、发送评论/邀请或写主日历。

## 七步操作

1. 确认十二页原件的物理顺序

打开12页原PDF，记录封面、罗马前言和正文页的物理页序。

2. 写清印刷页码与目标页映射

把章节标题、级别、印刷页码与物理页码写入chapter-map，缺页不猜。

3. 让Claude先列书签目的地预览

要求Claude按表生成pypdf脚本，先列目的地预览，不重排原页面或改正文。

4. 在副本写入原生层级outline

执行脚本在副本写入层级outline，使用0基物理索引并保留父子关系。

5. 逐条点击并核对目标页

在真实PDF阅读器展开侧边栏，逐个点击4章及子节，核对实际页标题。

6. 修改映射后复跑避免重复

修改一条错误映射再复跑，确认脚本替换本题outline而不是重复堆叠。

7. 解析目的地并比较原页内容

解析目的地页号并逐页渲染前后比对，交付新PDF、原件和章节映射。

## 独立验证

在复制的目录运行 `python3 -B verify.py`。需要Python3，PDF验证依赖pypdf、原生表格只读检查依赖openpyxl，文档用标准库读取OOXML。教材的本地HTML查看器直接在浏览器打开，不需要连接第三方服务。

## 原生文件

- manual-bookmarked-reference.pdf
- manual-original.pdf

## 验收

- PDF确有层级outline对象和可解析目标页，书签文本列表或截图不能替代。
- 印刷页码与物理页偏移逐条正确，至少一条前言和一条正文目的地实点。
- 原12页内容和顺序保持，复跑不产生重复书签；正文图像渲染对照无改写。

## 账户与功能依据

- Anthropic：Claude 创建与编辑文件 https://support.claude.com/en/articles/12111783-create-and-edit-files-with-claude
- pypdf：原生 PDF outline/bookmarks https://pypdf.readthedocs.io/en/stable/user/handling-outlines.html
