# Application Bundle

> 申报材料包（Application Bundle）：把一份"申报/上报需求"组装成套交付物——填写表格模板（合并单元格保格式）、生成正文材料（事迹/推荐书/申报书/报告正文）、匹配并嵌入证据附件图、统一命名、打包目录。泛化于评优推荐、职称申报、课题申报、验收材料、答辩材料、毕业设计材料等一切"表格+正文+证据"型材料组装。 Triggers when: 需要填申报/评优/验收表格并按模板出正文与证据材料（评优推荐表、优秀个人/先进集体、职称申报表、课题申报书、验收报告、答辩材料）、把"填好的表+事迹/申报正文+证书/证明图片"组装成一套可上交的材料包。 Commands: - /材料包 <需求> - 组装整套申报材料（表格+正文+证据） - /材料包 填表 <模板.docx> <数据> - 填写表格模板（合并单元格保格式） - /材料包 正文 <内容> - 生成事迹/申报正文（docx，宋体小四/标题规范） - /材料包 证据 <清单> - 匹配并嵌入证据附件图（PDF→PNG转换） - /材料包 打包 <目录> - 按命名规范整理成材料包目录 - /bundle <req> - English alias Capabilities: docx合并单元格表格定位与填写（保格式、保留签字行）、正文 docx 生成（标题黑体小三/正文宋体小四）、证据图收集与嵌入（证书PDF转PNG、每图加注说明）、材料包目录组织与命名、格式保真校验

- Skill: `cycleuser/application-bundle` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add cycleuser/application-bundle`
- Raw SKILL.md: https://api.skillmd.com/api/skills/cycleuser/application-bundle/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- License: MIT
- Author: cycleuser (https://skillmd.com/u/cycleuser)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/cycleuser/application-bundle

---


## Safety Rules

参见 [_shared/core/safety-rules.md](../_shared/core/safety-rules.md)

关键补充：填表/生成一律写新文件，不覆盖模板；证据图为只读引用，不改原件。

# 申报材料包 (Application Bundle)

"评优/职称/课题/验收"类材料的标准组装法：**填表 → 正文 → 证据 → 打包**。这是高校行政最常做的四段式，泛化到一切"表格+正文+证据"型交付。

## 四段工作流

```
Step 1 填表（模板保真）
   复制模板 → 解析合并单元格 → 逐格填值 → 保留签字行/尾部。
   a) 解析：打印每个 row.cells 的 (label, 值区) 位置；合并单元格用 id(cell._tc) 去重，
      值区写在合并区域主 tc 上（row.cells[位置] 拿到的就是它）。
   b) 填值：set_cell 清空值区重写，字体宋体/小四（按模板注要求），多行拆段落。
   c) 保留：签字行（"负责人签字：""组长签字：""学校公章""年 月 日"）绝不覆盖，
      事迹区若自带"负责人签字"尾部，先写正文再在末尾补回。

Step 2 正文（事迹/申报书/报告）
   按"模板文本结构"组织章节（个人简介/获奖情况/工作任务/业绩情况/结语…）。
   格式：标题黑体小三居中，正文宋体小四，1.4 倍行距。
   每章可引用 Step3 证据图，图下加"支撑材料：……"注。

Step 3 证据（证书/证明图）
   按清单逐项匹配证据文件：证书 jpg/png 直接用；PDF 用 pymupdf 转首屏 PNG。
   嵌入 docx 时每图加注（来源/编号/内容）。缺图项在正文标注"待补"，不编造。
   图尺寸：横版宽 14-15cm，竖版宽 12cm，居中。

Step 4 打包
   目录命名：<姓名/单位>-<材料名>-<日期>/
   内含：填好的表格 + 正文 + 证据子目录 + 汇总清单 README。
   文件命名统一规范（如 <年度>-<奖项>-<排名>.ext）。
```

## 合并单元格填写要点（docx）

- 模板里一个合并单元格在 `row.cells` 中会出现多次，用 `id(cell._tc)` 去重，只写主 tc。
- 值区可能是合并区域（如"所在单位"跨3列、事迹跨8列），访问 `row.cells[i]` 任意位置拿到同一 tc。
- 清空重写：删多余段落（保留至少1段）、清首段 run、按行 add_paragraph。
- 行高：长文本设 `row.height` 或用 `row_dimensions[r].height` 撑开。
- 保存前校验：重新打开读取回填文本，确认每格正确、签字行还在。

## 证据图嵌入要点

- PDF 转图：`fitz.open(pdf); page.get_pixmap(dpi=110).save(png)`。
- jpg 不能直接改名成 .png 后缀（python-docx 会报 UnrecognizedImageError）；用 PIL `convert('RGB').save(png,'PNG')` 转真 PNG。
- 每图加居中说明注（宋体 10.5pt 灰色）。
- 输出文件会很大（几十 MB），属正常。

## Anti-Patterns

| 违规 | 严重度 | 后果 |
|------|--------|------|
| 覆盖模板原文件 | 高 | 模板丢失 |
| 覆盖签字行/尾部 | 中 | 材料无效 |
| 在合并区域重复写值 | 中 | 单元格错乱 |
| 证据图缺项却编造 | 高 | 材料不实 |
| 正文与表格数字不一致 | 高 | 评审驳回 |

## 依赖

- Python：`python-docx`、`openpyxl`、`pymupdf`、`PIL`
- 脚本：`scripts/fill_docx.py`（合并单元格表格解析与填充）、`scripts/embed_evidence.py`（证据图收集与嵌入）
- 校验：复用 verify-deliver 的 checklists

## 文件结构

```
skills/application-bundle/
├── README.md
├── SKILL.md
├── rules/
│   ├── table-filling.md  # 合并单元格填写与保格式
│   ├── evidence.md       # 证据图收集与嵌入
│   └── packing.md        # 材料包目录与命名
└── scripts/
    ├── fill_docx.py
    └── embed_evidence.py
```

## 版本历史

| 版本 | 日期 | 变更 |
|------|------|------|
| 1.0.0 | 2026-09-01 | 初始版本：从评优推荐表+事迹材料生成实战提炼的四段式材料组装 |

