# AI 填写 PDF 表单：用 SurfSense 把借用申请写进原表并检查扁平副本

已用reportlab创建真实AcroForm，pypdf填写并产生可编辑/扁平参考；字段树、Widget、AP及3份PDF渲染已检查。未运行SurfSense；本题填值为拉丁字母，未验证中文表单字体。

## 版本与门槛

SurfSense Desktop v2.2.1；表单填写/flatten能力以实际PDF字段为前提。一般Apache-2.0，专有目录BSL；原生扫描图片不是AcroForm。

## 操作步骤

1. 确认输入确实是可填写PDF

打开application-blank.pdf，点击applicant/contact/date/purpose和两只复选框。它们是真实AcroForm控件，不是扫描图片上的横线。本包request字段刻意没有联系电话，不能自动填一个看似合理的号码。

2. 将表单加入桌面Agent并说明两种交付

在SurfSense Desktop载入原PDF，要求先列实际字段名，再读取prompt.md。只生成新副本，分别命名可填版和flatten版；不要在第一步就把原件扁平化，否则后续难以修改。

3. 逐字段写入明确值

要求Agent填写Lin、2026-11-08和Workshop demonstration，勾tripod而不勾light。contact维持空白。字段名不同就先核对，不把文字顺序当作字段绑定，避免把用途写进电话格。

4. 打开实际可填版检查控件

下载自己的实际PDF，确认字段仍能点击修改；查看date内容、用途是否裁切、两个checkbox是否各为预期状态。本站filled-reference.pdf是pypdf填写参考，不代表SurfSense已经执行。

5. 同时核对字段树与显示外观

使用PDF工具列get_fields与每页Widget，确认V值一致，更新后的AP/N非空。仅看到页面上有字不够：外观能显示，字段树仍可能是旧值。缺字段或重复字段名要先定位原件结构。

6. 从已填内容生成扁平副本

另存flatten版，把当前值画进页面并去掉Widget及AcroForm树；保留可编辑版本。使用本包flattened-reference.pdf对照两种状态，不能把“禁止编辑”密码当成已经扁平化。

7. 渲染两版核对打印效果

在同一PDF阅读器查看可填版和flatten版，核对页面位置、勾选状态与用途。中文字段值有额外字体要求，本题只使用拉丁字母作可复现参考，不据此宣传所有中文表单都能无损填好。

8. 交付字段清单和两个副本

保留原件、实际可填PDF、实际扁平PDF及缺失项contact。verify.py核查本包逻辑值和扁平结构；对自己的结果仍要打开阅读器逐项看。未提供电话等字段必须在交付说明中列出。

## 本地参考与运行

已用reportlab创建真实AcroForm，pypdf填写并产生可编辑/扁平参考；字段树、Widget、AP及3份PDF渲染已检查。未运行SurfSense；本题填值为拉丁字母，未验证中文表单字体。

运行 `python3 verify.py` 检查材料；原生文档检查需要pypdf、openpyxl或lxml。需要重建参考时运行本包对应reference.py；这些脚本不调用模型。

## 官方来源

- https://github.com/MODSetter/SurfSense/releases/tag/v2.2.1
- https://github.com/MODSetter/SurfSense/blob/v2.2.1/README.md
- https://github.com/MODSetter/SurfSense/blob/main/LICENSE

## 素材身份与许可

本站原创教学输入与参考代码采用CC0-1.0；官方截图仅用于识别软件和说明操作入口，其版权归相应项目。工具与模型许可分别按官方来源执行。请勿将人工/参考算法文件描述成目标软件或模型的实际结果。
