feat: 完成 DOCX 通用结构映射与严格收口

This commit is contained in:
SkyJourney
2026-07-31 15:19:34 +08:00
parent 6e40374200
commit f3847f3e4b
31 changed files with 3175 additions and 64 deletions
+31 -4
View File
@@ -1,6 +1,6 @@
# Markdown PDF 导出器进度
最后更新:2026-07-30
最后更新:2026-07-31
## 1. 当前概况
@@ -207,6 +207,31 @@ Server Playwright 与 Desktop Electron 适配器,按主题 CSS SHA-256
当前结构样式尚未绑定到 Pandoc AST,封面、版头、分节与标题去重留给
阶段 12C。
`v0.6.0` 阶段 12C 已完成通用 Pandoc 结构映射和最终 OOXML 收口。统一
语义文档模型先生成主题无关的结构计划,静态 Lua Filter 将公文版头、
文号、签发人、落款、版记、简报元数据及项目/标书封面注入可编辑 Word
段落,并绑定标准 Markdown 样式和 31 个 `Md*` 结构样式;转换过程不按
主题 ID 分支。最终 DOCX 后处理生成真实分节,支持封面无页眉页脚、正文
页码从 1 重启和 `SECTIONPAGES`,同时收口容器边框、背景、分页控制、
表格内容区全宽、固定网格和行不拆分。标题策略会抑制 YAML 与首个 H1
重复,所有内部结构标记在输出前强制清除。根级
`npm run verify:docx-themes` 现在强制先用 Playwright Chromium 151
重新采集 14 套主题各 56 个真实槽位,再由 Pandoc 3.9.0.2 生成最终矩阵;
结果为 11/11 表格全宽、8/8 结构化主题字段完整、4/4 独立封面分节合格、
重复标题失败 0、内部标记残留 0。下一步阶段 12D 继续使用真实 Word/WPS
做视觉、编辑和互存回归,自动结构通过不替代客户端验收。
阶段 12C-R1 已完成 WordprocessingML 严格性修复。OOXML 写入层现在按
模式顺序生成和规范化段落、文本、表格、单元格、分节及条件表格样式属性;
样式生成将 CSS `justify` 映射为合法的 `w:jc="both"`,表格宽度仅写入
正文表格而不写入表格样式,最终转换会移除 Pandoc 追加的重复样式 ID。
内置校验器会拒绝乱序属性、重复样式 ID、非法两端对齐枚举和表格样式
`w:tblW`。Microsoft Open XML SDK 2.20 审计确认 14 份最终 DOCX 的上述
错误全部归零;Microsoft Word 和 WPS 均以禁止修复的只读方式正常打开
14/14Word 成功导出 31 页 PDF。逐页检查未发现内容丢失、裁切、重叠或
空白正文。下一步按 R2 字体嵌入、R3 PDF 与 DOCX 视觉差异引擎、R4 全主题
深度回归的顺序推进。
## 2. 已完成
### 2.1 项目骨架
@@ -1140,9 +1165,11 @@ ECharts 第二阶段浏览器与 PDF 验证结果:
共用同一语义树,现有 HTML DOM 保持兼容;
- 阶段 12B:已将跨端主题令牌接入动态 `reference.docx`14 主题双引擎
令牌和真实 Pandoc 模板矩阵通过;
- 阶段 12C:完成 Pandoc 结构映射、封面分节、标题去重、表格宽度和
分页控制;
- 阶段 12D:完成 14 套主题的真实 Word/WPS 视觉与结构回归
- 阶段 12C完成通用 Pandoc 结构映射、封面真实分节、标题去重、
表格内容区全宽、分页控制、OOXML 严格性和 14 主题真实 Word/WPS
无修复打开门禁
- 阶段 12D:依次完成可分发字体嵌入、PDF 与 DOCX 自动视觉差异、14 套
主题真实 Word/WPS 编辑互存和深度视觉回归;
- 阶段 13:完成 Word/WPS 双向互存、外部主题兼容、体积和正式发布验收。
每个阶段验收通过后创建一个独立提交,再进入下一阶段。当前阶段不得混入