资格预审 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 中:
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),看起来像「只有标题没有图」。
正确写法(唯一允许):
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 会把标题留在本页、整图挤到下一页,看起来像「只有标题」。
正确做法: 插入/精修时同时约束高度:
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;插入后断言「标题段的下一个非空兄弟就是表/图」。
标准步骤
- 备份:统一放到 预审资格文件/备份/,每份只保留一份 原文件名_上一版.docx(覆盖更新);不要把备份散放在主目录
- PDF→图:PyMuPDF(fitz)渲染约 180dpi PNG
- python-docx 插入结构(在正文「附件四…」之前):
- 分页符 → 居中空段(jc=center,ind firstLine/left/right=0)→ 再分页符(保证附件四另起页)
- 在居中空段 add_picture(先约 14.3cm 宽)
- 目录行:在目录「附件三」条目后插入「无欠税证明\t0」(深拷贝相邻 TOC 段格式)
- WPS COM 精修(每份单独 Open/Save,必要时杀进程重启):
- 用
Sections(1).PageSetup算版心;断言 max_w 合法后再改宽 - 新插入的图:宽度 ≈ 版心 − 12;按像素保持比例;段落居中;清除 Left/FirstLineIndent
- 禁止对文档里全部 InlineShapes 无条件赋宽;只修超出版心的,或只修本次新图
- SpaceBefore ≈ (版心高 − 图高) / 2.8 略居中(可选)
- Repaginate 后测各正文标题页码(跳过含 tab 的目录行)
- 只改「目录」与「正文附件一」之间的目录文本为 标题\t页码,加右对齐前导符制表位
- 用
- 验收清单(每份必做):
- 总页数;抽查 InlineShapes 宽度均 > 200pt(防止再次缩成点)
- 每个证明标题下一段必须有图
- 正文附件一~九标题仍在且无 tab
- 公司名、地址、正本/副本、分组封面语与改前一致
- 与已验收的样板文件目录条目数、结构对齐
样板路径(本机)
- 目录:C:\Users\Administrator\Desktop\预审资格文件\
- 已验收样板:资格预审文件_分组二_速冻_正本_南通康浩食品有限公司.docx
- 证明源:桌面或同文件夹 无欠税.pdf
批量时
- 先 PRE-CHECK:目标文件应无图、目录 9 条、正文附件四存在
- 再插入 → 逐份 WPS finalize → POST-CHECK
- 任一份断言失败立刻停,用备份还原,勿继续改下一份