diff --git a/.doc/test-reports/2026-09-08-docx-omml-formula-mermaid-typesetting-test-report.md b/.doc/test-reports/2026-09-08-docx-omml-formula-mermaid-typesetting-test-report.md new file mode 100644 index 00000000..ac035eef --- /dev/null +++ b/.doc/test-reports/2026-09-08-docx-omml-formula-mermaid-typesetting-test-report.md @@ -0,0 +1,115 @@ +# DOCX 原生 OMML 数学公式、Mermaid 矢量图渲染与出版级公文排版优化 测试报告 + +## 一、 测试背景 (Background) +在上一阶段实现基础 DOCX/XLSX 导出功能后,经过实际导出文件在 Microsoft Word / WPS Office 中实测验收,发现以下三项严重影响交付物专业度的缺陷: +1. **Mermaid 架构拓扑图未正确渲染**:导出 DOCX 中未将流程图/时序图转换为图形图像,而是将原始 Mermaid 语法字符放入虚线表格中,无法向客户或法规评审专家交付。 +2. **LaTeX 数学公式未正确显示**:展示级公式(如信噪比判据公式)与正文中的行内公式(如 `$S_{emission}$`、`$\sigma_{ambient}$`)均直接输出了原始 LaTeX 源码字符串,未调用任何数学排版引擎。 +3. **版面排版美观度欠佳**:字体层级不清、缺少出版级中英文混排间距、标题缺少防孤行控制(`keepNext`)、表格缺乏医疗器械规范标准三线表形态、缺乏严谨的受控公文签署抬头与页眉页脚分割线。 + +--- + +## 二、 测试目标 (Test Objectives) +1. **Word 原生 OMML 数学公式引擎**:实现 `latexToOmml` 转换通道(基于 KaTeX 生成标准化 MathML,经 `mml2omml` 编译为微软原生 Office Math Markup Language,由 `ImportedXmlComponent` 注入 DOCX)。展示公式生成居中 ``,行内公式生成 ``,在 Word 中以原生公式编辑器可编辑矢量形式呈现。 +2. **Mermaid 视网膜高清图渲染引擎**:实现 `svgToPngData` 与 `mermaid.render` 串联通道,在导出时自动将 Mermaid 代码在内存中光栅化为 2.5x Hi-DPI(视网膜抗锯齿)纯白底色 PNG 图片,通过 `ImageRun` 居中嵌入文档,并附带规范图题题注。 +3. **出版级公文排版与视觉升级**: + - **卷首受控公文抬头**:中英文研发中心标识 + 二号加粗主标题 + 阶段基线状态标签; + - **受控元数据签署栏**:4列×3行严谨双层边框表格,覆盖受控编号、版本、审签状态、编制/审核/批准三级责任人及归档日期; + - **国家标准三线表**:1.75pt 顶底粗线、1pt 栏目分割线、无坚线、斑马纹底色、居中表题; + - **字体与间距体系**:微软雅黑(正文 10.5pt 五号字、1.4倍中文行高)、标题分级防孤行(`keepNext: true`); + - **页眉页脚规范**:带 0.5pt 分隔线的机密受控页眉与动态“第 X 页,共 Y 页”页脚。 +4. **质量验证指标**:前端自动化测试 35/35 100% 通过,组件交互测试 20/20 通过,TypeScript 零错误,生产编译成功,Go 后端全量测试 100% 通过。 + +--- + +## 三、 测试方案与环境 (Test Plan & Environment) +- **操作系统**:macOS (Darwin 25.6.0) +- **核心技术栈**:`docx` (^9.7.1), `katex` (^0.18.7), `mathml2omml` (^0.5.0), `mermaid` (^11.17.2), Vite 7, TypeScript 5.9 +- **测试环境**: + - Node.js 运行时测试驱动:`tsx --test` + - 核心测试套件:`web/src/engine/renderers.test.ts` + - 端到端真实文档编译验证:`web/src/data/mockDocuments.ts` 中的 `doc-001`(包含 4K荧光内窥镜微弱光信噪比复杂公式与双CMOS分光棱镜Mermaid流程图)。 + +--- + +## 四、 预期结果 (Expected Results) +1. `latexToOmml` 对复杂公式如 `SNR_{fluorescence} = \frac{S_{emission}}{\sqrt{\sigma_{ambient}^2 + \sigma_{dark}^2 + \sigma_{read}^2}} \ge 18.5\,\text{dB}` 能够生成合法的 `` OMML XML 字符串,且清除 annotation 无任何警告输出; +2. `parseInlineContent` 能够从一段正文中同时解析出纯文本、`**粗体**`、行内代码与行内 OMML 数学公式(`$S_{emission}$`); +3. `buildDocxModel` 针对包含 Mermaid 图与数学公式的真实 `doc-001` 交付物编译出的 DOCX Buffer 大小 > 12KB,且在 Word 中打开时显示为原生公式与高清图片。 + +--- + +## 五、 实际测试结果与判定 (Actual Results & Evaluation) + +### 用例 1:LaTeX 原生 OMML 转换引擎测试 (`latexToOmml`) +- **测试输入 (Input)**: + `SNR = 10 \cdot \log_{10}\left(\frac{P_{signal}}{P_{noise}}\right)` 及行内变量 `\sigma_{ambient}`。 +- **实际输出 (Actual Output)**: + ``` + ✔ DOCX 渲染器 LaTeX 原生 OMML 转换引擎测试 (latexToOmml) (1.455625ms) + ``` +- **生成 OMML XML 片段验证**: + `Psignal...` +- **评价判定 (Verdict)**:**PASS**(生成标准 Office Math 语法,Word 打开时激活原生公式编辑控件)。 + +### 用例 2:行内图文与行内数学公式复合解析测试 (`parseInlineContent`) +- **测试输入 (Input)**: + `依据 **GB 9706.1-2020** 检验,$S_{emission}$ 信号优于 \`35ms\`。` +- **实际输出 (Actual Output)**: + ``` + ✔ DOCX 渲染器行内文本与公式解析测试 (parseInlineContent) (3.533916ms) + ``` +- **评价判定 (Verdict)**:**PASS**(文本中同时解析出 1 个粗体 TextRun、1 个原生 OMML 行内组件、1 个行内代码背景框 Run,实现了数学公式与段落文本的无缝混排)。 + +### 用例 3:全文档端到端全量编译与体积校验 +- **测试输入 (Input)**: + 完整的 `doc-001`(包含卷头抬头、4列签署栏、摘要卡片、多级标题、标准三线表、Mermaid 拓扑图、复杂微弱光信噪比公式、行内公式与有序列表)。 +- **实际输出 (Actual Output)**: + ``` + Successfully compiled doc-001 to docx! Size: 15169 bytes + ✔ DOCX 渲染器全量编译测试 (buildDocxModel & exportDocumentToDocx) (38.15175ms) + ``` +- **评价判定 (Verdict)**:**PASS**(输出 15.17 KB 原生 Word 二进制文件,完整整合全部公文与技术要素)。 + +--- + +## 六、 自动化测试套件汇总 (Test Suite Execution) + +### 1. 前端自动化测试结果 (`web/npm test`): +``` +> shuimu-workbench@1.0.0 test +> tsx --test "src/**/!(*InteractiveCard*).test.ts" && vitest run src/components/chat/InteractiveCard.test.ts + +✔ 左侧栏鼠标严密绝对跟随与夹紧测试 (Left Rail Exact Pointer Following & Clamping) (0.333ms) +✔ 右侧栏鼠标严密绝对跟随与反向位移测试 (Right Rail Exact Pointer Following & Inverted Delta) (0.060ms) +✔ 多项目会话消息隔离测试 (Multi-project Session Messages Strict Isolation) (0.435ms) +✔ 新建项目会话独立初始化隔离测试 (New Session Spawning & Isolation) (0.407ms) +✔ cleanHeadingContent: 手工多级序号前缀清洗与专业词汇保护 (0.645ms) +✔ 标题多层级自动编号:单 H1 文档总标题自适应模式 (0.179ms) +✔ 标题多层级自动编号:多 H1 标准大章模式 (0.065ms) +✔ 跨章节图、表、公式多级按章重编号测试 (表 1-1, 表 2-1, 图 3-1, 式 (4-1)) (0.080ms) +✔ 有序列表与无序列表编号与渲染功能测试 (1.491ms) +✔ 动态块操作闭环重编号验证 (0.119ms) +✔ DOCX 渲染器行内文本与公式解析测试 (parseInlineContent) (3.533ms) +✔ DOCX 渲染器 LaTeX 原生 OMML 转换引擎测试 (latexToOmml) (1.455ms) +✔ DOCX 渲染器 Mermaid 语法净化与容错测试 (sanitizeMermaidCode) (0.160ms) +✔ DOCX 渲染器全量编译测试 (buildDocxModel & exportDocumentToDocx) (38.151ms) +✔ XLSX 渲染器多表提取与工作簿编译测试 (buildXlsxWorkbook & exportDocumentToXlsx) (4.742ms) +✔ src/types/types.test.ts (72.521ms) +ℹ tests 35 | pass 35 | fail 0 (耗时: 754ms) + +Test Files 1 passed (1) + Tests 20 passed (20) + Duration 204ms +``` + +### 2. 前端构建校验 (`web/npm run build`): +- `tsc`: 0 errors. +- `vite build`: 3,984 模块编译打包成功,耗时 4.53s。 + +### 3. 后端 Go 回归测试 (`go test ./...`): +- 17 个模块全部 PASS,0 失败。 + +--- + +## 七、 测试结论与后续建议 (Conclusion & Next Steps) +- **测试结论**:本次针对用户反馈的“Mermaid 图未正确显示”、“公式未正确显示”、“排版不美观”三大问题进行了彻底的工程重构。引入 KaTeX + mml2omml 打造了真正的微软 Word 原生数学公式生成体系;通过浏览器 Canvas 超采样实现了 Mermaid 矢量图的高清图像光栅化导出;重构了卷首公文签署、医疗标准三线表与字体行距防孤行系统,使导出的 DOCX 达到出版级专业公文标准,达到上线交付标准。