feat: 完成 DOCX 通用结构映射与严格收口
This commit is contained in:
+31
-4
@@ -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/14,Word 成功导出 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 双向互存、外部主题兼容、体积和正式发布验收。
|
||||
|
||||
每个阶段验收通过后创建一个独立提交,再进入下一阶段。当前阶段不得混入
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
|
||||
审计日期:2026-07-30
|
||||
|
||||
> 本文第 3~8 节记录阶段 10 的首轮审计基线。阶段 12C 已于
|
||||
> 2026-07-31 完成对应结构修复和自动化门禁,最新状态见第 9 节;真实
|
||||
> Word/WPS 视觉、编辑和互存结论仍需阶段 12D 复验。
|
||||
|
||||
## 1. 审计目标
|
||||
|
||||
本轮按 v0.6.0 已冻结的两条 DOCX 发布门禁检查全部内置主题:
|
||||
@@ -258,3 +262,86 @@ Word 实际导出的 PDF 中可见字体符合当前样式意图:
|
||||
|
||||
在完成 P0 项目前,不建议将阶段 10 标记为通过,也不建议创建 v0.6.0
|
||||
正式发布提交或版本标签。
|
||||
|
||||
## 9. 阶段 12C 自动修复复验
|
||||
|
||||
阶段 12C 保留 Pandoc 作为可编辑 OOXML 底座,并增加项目自有的通用转换
|
||||
层:统一语义文档模型生成结构计划,Lua Filter 注入可编辑段落与样式,
|
||||
最终 OOXML 收口层写入真实分节、页码重启、表格宽度和分页属性。映射只
|
||||
依赖语义角色与主题令牌,不包含主题 ID 分支,因此同一机制也可服务未来
|
||||
外部主题。
|
||||
|
||||
2026-07-31 使用 Playwright Chromium 151 重新采集 14 套主题各 56 个
|
||||
计算样式槽位,并由 Pandoc 3.9.0.2 重新生成全部 DOCX,自动结构结果如下:
|
||||
|
||||
| 检查项 | 阶段 12C 结果 | 结论 |
|
||||
| --- | ---: | --- |
|
||||
| 主题使用本轮真实 Chromium 令牌 | 14/14 | 通过 |
|
||||
| 结构化主题字段完整映射 | 8/8 | 通过 |
|
||||
| 项目报告与标书独立封面真实分节 | 4/4 | 通过 |
|
||||
| 封面隐藏页眉页脚、正文页码从 1 重启 | 4/4 | 通过 |
|
||||
| 封面文档使用 `SECTIONPAGES` | 4/4 | 通过 |
|
||||
| 含表格主题的表格铺满内容区 | 11/11 | 通过 |
|
||||
| YAML 标题与正文首个 H1 去重 | 14/14 | 通过 |
|
||||
| 内部结构标记清理 | 14/14 | 通过 |
|
||||
| 禁止 `altChunk`、保留原生可编辑结构 | 14/14 | 通过 |
|
||||
|
||||
统一复现命令仍为:
|
||||
|
||||
```powershell
|
||||
npm run verify:docx-themes
|
||||
```
|
||||
|
||||
该命令不会回退到合成令牌或陈旧快照。它先生成本轮 Chromium 令牌,再
|
||||
执行 14 主题 Pandoc 矩阵和硬断言。阶段 10 的 P0/P1 结构阻塞因此已由
|
||||
自动门禁关闭;“完整主题样式映射”的最终判定仍保留到阶段 12D,必须在
|
||||
Microsoft Word 与 WPS 中完成视觉检查、编辑、保存、重开和双向互存后
|
||||
才能通过。
|
||||
|
||||
## 10. 阶段 12C-R1 OOXML 严格性复验
|
||||
|
||||
2026-07-31 对阶段 12C 生成的 14 份 DOCX 做 Microsoft Word 原生打开
|
||||
时,最初仅 7 份可直接打开,另外 7 份触发“发现无法读取的内容”且无法
|
||||
恢复。WPS 可以容错打开,但会报告缺失字体,因此不能据此判定 OOXML
|
||||
合格。
|
||||
|
||||
深度审计确认根因集中在生成样式与 OOXML 模式约束:
|
||||
|
||||
- Pandoc 消费 `custom-style` 后会追加同名降级样式,造成重复
|
||||
`w:styleId`;
|
||||
- CSS `text-align: justify` 被直接写成非法的 `w:jc="justify"`,正确
|
||||
WordprocessingML 枚举应为 `both`;
|
||||
- 表格条件样式中的 `w:rPr` 与 `w:tcPr` 顺序不符合模式;
|
||||
- `w:tblW` 被写入表格样式层,和正文表格的直接宽度属性混在一起;
|
||||
- 多类段落、文本、表格、单元格和分节属性缺少统一的有序写入门禁。
|
||||
|
||||
通用引擎已经增加有序插入、序列化规范化和严格校验,并在最终 DOCX
|
||||
收口层保留前置主题样式、移除 Pandoc 同名降级样式。修复不按主题 ID
|
||||
分支,也不改变正文表格的内容区全宽属性。
|
||||
|
||||
复验结果:
|
||||
|
||||
| 检查项 | 结果 | 结论 |
|
||||
| --- | ---: | --- |
|
||||
| 14 主题结构矩阵 | 14/14 | 通过 |
|
||||
| Microsoft Open XML SDK 非兼容性错误 | 0 | 通过 |
|
||||
| Microsoft Word 禁止修复打开 | 14/14 | 通过 |
|
||||
| WPS 原生只读打开 | 14/14 | 通过 |
|
||||
| Word 原生 PDF 导出 | 14/14,共 31 页 | 通过 |
|
||||
| 31 页逐页结构检查 | 31/31 | 通过 |
|
||||
|
||||
Open XML SDK 2.20 仍会按 Office 2007 模式报告 Pandoc 表格上的 Office
|
||||
2010 `tblLook` 六个兼容属性;这些属性在本轮 Word/WPS 实测中正常,不计
|
||||
为生成错误。
|
||||
|
||||
逐页检查没有发现内容丢失、裁切、重叠或空白正文,但保留以下阶段 12D
|
||||
视觉问题:
|
||||
|
||||
- 深色表头文字对比度不足;
|
||||
- 部分短文档尾页留白过大;
|
||||
- `gov-red-standard` 在 Word 与 WPS 中分别为 2 页和 3 页,说明字体与
|
||||
客户端排版差异尚未收口;
|
||||
- 当前主题矩阵的 Mermaid 仍使用黑色占位 PNG,不代表真实媒体效果。
|
||||
|
||||
因此 R1 只关闭 OOXML 合法性和 Word/WPS 无修复打开门禁。字体可移植性、
|
||||
PDF 与 DOCX 自动视觉差异、真实媒体和双向编辑互存继续由 R2~R4 验收。
|
||||
|
||||
Reference in New Issue
Block a user