Files

1.8 KiB

一页纸 docx 排版压缩配方

适用场景:创建必须严格一页的 Word 文档(合作框架、报价单、一页摘要等),通过 OnlyOffice x2t 渲染验证。

迭代压缩流程

x2t 渲染的行高/间距比 python-docx 估算的略宽松,不能靠"调好参数直接交付"。必须走渲染验证循环。

第一轮:合理起点

参数
上下边距 1.5–2.0 cm
左右边距 1.8–2.0 cm
正文字号 9–10 pt
表格字号 8–9 pt
行距 1.05–1.15

验证循环

bash ~/.hermes/skills/legal/contract-editor/scripts/onlyoffice-render.sh <docx> <pdf>
python3 -c "
import subprocess
r=subprocess.run(['pdftotext','<pdf>','-'],capture_output=True,text=True)
pages=r.stdout.split('\f')
print(f'页数: {len(pages)}')
"
  • 页数=1 → 交付
  • 页数=2 且末页空白 → 内容刚好溢出,微调即可
  • 页数=2 且有内容 → 需要大幅压缩或精简文字

逐级压缩(按优先级)

  1. 底部边距:1.5→1.0→0.8→0.5 cm(先砍底部,顶部保阅读感)
  2. 表格字号:8→7.5→7 pt
  3. 行距:1.05→1.0
  4. 左右边距:1.8→1.5 cm
  5. 段落间距:Pt(2)→Pt(1)→Pt(0)
  6. 精简文字(最后手段)

已实证的可用参数(5000字内一页A4)

参数
上下边距 1.2 / 0.5 cm
左右边距 1.5 cm
正文字号 8 pt
表格字号 7 pt
行距 1.0
段落间距 0

陷阱

  • x2t 对表格行高估算偏大,表内文字多时尤其明显
  • 分隔线(*N)占用空间,一页紧张时去掉
  • 表格 Table Grid 样式自带内边距,无法通过 python-docx 参数完全消除
  • 第二页空白但无文字 = 内容刚好溢出几像素,再砍 0.2cm 底部边距或减 0.5pt 字号即可