# Bid Word Insert Proof

> Insert a full-page proof image (如无欠税证明 PDF) into 资格预审/投标 Word docs, center it in the printable area, add a TOC line, and refresh page numbers without breaking body titles or other content. Use when the user asks to 插入证明/无欠税/附件材料进 Word、加一页证明、更新目录页码, or to apply the same method used for 南通康浩资格预审文件.

- Skill: `zyliufeng123/bid-word-insert-proof` (Agent Skill)
- Install (CLI): `npx skillmds@latest add zyliufeng123/bid-word-insert-proof`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zyliufeng123/bid-word-insert-proof/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: zyliufeng123 (https://skillmd.com/u/zyliufeng123)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/zyliufeng123/bid-word-insert-proof

---


# 资格预审 Word：整页插入证明材料

用户已确认的标准做法。以后凡是「把 PDF/图片证明嵌进资格预审 Word、单独占一页、目录跟着准」，一律按本流程，不要改成「单独打印不入卷」除非用户明确要求。

## 目标效果（已验收）

- 证明单独占 **1 页**（插在附件三正文后、附件四标题前）
- 图片 **水平居中**、缩进版心（宽度 ≈ 版心宽 − 12pt，首行缩进 = 0）
- 目录增加对应条目（如「无欠税证明」），其后附件页码整体后移
- **只改需要改的文件**；先改 1 份看效果，再批量其余
- 不动封面分组文字、正本/副本、公司信息、正文附件标题

## 禁止事项

- 不要用不稳定的「只靠 WPS 乱插」导致空白页、标题与图分离
- 更新目录时 **禁止删除/改写正文标题**（正文「附件一…」与目录行都叫附件一，必须用「无 tab + 后文是投标申请及声明」区分）
- 裁剪目录条目时 **禁止 pop 掉紧挨「投标申请及声明」的正文附件一**
- 图片宽度不得超过版心（曾因 471pt > 415pt 版心而看起来偏一边）
- **严禁用 `Document.PageSetup.LeftMargin/RightMargin` 算版心**（见下方「致命坑」）
- **改图宽前必须断言** `200 < max_w < 500`（磅）；不通过则跳过改宽，禁止给 InlineShapes 赋异常宽度
- 反向插入多页时，插入后必须验收「标题下一句就是图」，禁止只改目录不改正文顺序

## 致命坑（已实锤，2026-07-21）

WPS COM 中：

```text
Document.PageSetup.LeftMargin  → 经常返回 9999999（未定义哨兵）
Sections(1).PageSetup.LeftMargin → 正常，如 90
```

若写成 `max_w = PageWidth - LeftMargin - RightMargin - 12`，会得到**巨大负数**。  
随后 `if sh.Width > max_w` 对所有图为真，再 `sh.Width = max_w`，把全部图片压成约 **0.05～0.8 磅**（XML 里 `wp:extent cx≈635`），看起来像「只有标题没有图」。

**正确写法（唯一允许）：**

```python
sec = doc.Sections(1).PageSetup
max_w = float(sec.PageWidth) - float(sec.LeftMargin) - float(sec.RightMargin) - 12
if not (200 < max_w < 500):
    raise RuntimeError("unsafe max_w=%s; refuse to resize images" % max_w)
# 仅当现宽明显超出版心时才缩小；不要无条件赋宽
if float(sh.Width) > max_w + 1:
    sh.Width = max_w  # 先 LockAspectRatio=True，或按像素算高
```

改完后验收：任抽 3 张 InlineShapes，`Width > 200`；证明页不能只有标题。

## 致命坑2（已实锤，2026-07-22）：图太高 →「只有标题没有图」

A4 版心高约 650–700pt。若图片高度 **>580pt**（常见：竖版扫描件 880–940pt），Word/WPS 会把**标题留在本页、整图挤到下一页**，看起来像「只有标题」。

**正确做法：** 插入/精修时同时约束高度：

```python
MAX_H = 580  # 标题+图同页的安全上限
sh.LockAspectRatio = True
if float(sh.Height) > MAX_H:
    sh.Height = MAX_H
if float(sh.Width) > max_w + 1:
    sh.Width = max_w
```

验收：每个证明标题与其下一张图必须 **同一页码**（`title_pg == img_pg`）。

## 致命坑3（已实锤，2026-07-22）：对同一锚点多次 `addprevious` 顺序颠倒

对同一元素多次 `elm.addprevious(x)` 时，**后插入的反而更靠近 elm**。  
若按「分页 → 标题 → 表/图 → 分页」依次 `addprevious`，实际顺序会变成「分页 → 表/图 → 标题 → 分页」。

**正确做法：** 按最终文档顺序的**逆序**调用，或每次对新插入节点再 `addprevious`；插入后断言「标题段的下一个非空兄弟就是表/图」。

## 标准步骤

1. **备份**：统一放到 预审资格文件/备份/，每份只保留一份 原文件名_上一版.docx（覆盖更新）；不要把备份散放在主目录
2. **PDF→图**：PyMuPDF（fitz）渲染约 180dpi PNG
3. **python-docx 插入结构**（在正文「附件四…」之前）：
   - 分页符 → 居中空段（jc=center，ind firstLine/left/right=0）→ 再分页符（保证附件四另起页）
   - 在居中空段 add_picture（先约 14.3cm 宽）
4. **目录行**：在目录「附件三」条目后插入「无欠税证明\\t0」（深拷贝相邻 TOC 段格式）
5. **WPS COM 精修**（每份单独 Open/Save，必要时杀进程重启）：
   - 用 **`Sections(1).PageSetup`** 算版心；断言 max_w 合法后再改宽
   - 新插入的图：宽度 ≈ 版心 − 12；按像素保持比例；段落居中；清除 Left/FirstLineIndent
   - **禁止**对文档里全部 InlineShapes 无条件赋宽；只修超出版心的，或只修本次新图
   - SpaceBefore ≈ (版心高 − 图高) / 2.8 略居中（可选）
   - Repaginate 后测各正文标题页码（**跳过含 tab 的目录行**）
   - 只改「目录」与「正文附件一」之间的目录文本为 标题\\t页码，加右对齐前导符制表位
6. **验收清单**（每份必做）：
   - 总页数；抽查 InlineShapes 宽度均 **> 200pt**（防止再次缩成点）
   - 每个证明标题下一段必须有图
   - 正文附件一～九标题仍在且无 tab
   - 公司名、地址、正本/副本、分组封面语与改前一致
   - 与已验收的样板文件目录条目数、结构对齐

## 样板路径（本机）

- 目录：C:\\Users\\Administrator\\Desktop\\预审资格文件\\
- 已验收样板：资格预审文件_分组二_速冻_正本_南通康浩食品有限公司.docx
- 证明源：桌面或同文件夹 *无欠税*.pdf

## 批量时

- 先 PRE-CHECK：目标文件应无图、目录 9 条、正文附件四存在
- 再插入 → 逐份 WPS finalize → POST-CHECK
- 任一份断言失败立刻停，用备份还原，勿继续改下一份

