feat: 完善 Mermaid 配置与预览缩放

This commit is contained in:
SkyJourney
2026-07-26 23:10:22 +08:00
parent 15dd2acfc0
commit d93728bb8b
25 changed files with 870 additions and 56 deletions
+31 -6
View File
@@ -29,7 +29,7 @@ fa07472 feat: 实现网页实时预览
ec48bce chore: 初始化项目骨架
```
最新阶段已完成 Chromium PDF 导出、精确预览、PDF.js 渲染缓冲和 Mermaid 分页性能优化
最新阶段已完成 Mermaid 全局导出配置、ELK 布局、代码块配置覆盖、重绘隐藏和两种预览模式共用的显示缩放
## 2. 已完成
@@ -46,7 +46,7 @@ ec48bce chore: 初始化项目骨架
`packages/core/src/export-config.ts` 已包含:
- 配置版本号
- 版本 3 配置模型
- A3、A4、A5、Letter、Legal、Tabloid 和自定义纸张;
- 横向、纵向;
- 四边页边距;
@@ -54,6 +54,7 @@ ec48bce chore: 初始化项目骨架
- 页码位置和格式;
- PDF 元数据;
- 打印背景、缩放和一级标题分页选项;
- Mermaid 布局、主题、外观和字体;
- Zod 数据校验;
- 默认 A4 技术文档预设。
@@ -127,7 +128,7 @@ ec48bce chore: 初始化项目骨架
提交 `52cf816` 已完成:
- 导出配置升级到版本 2
- 导出配置升级到版本 3,并兼容迁移版本 2 浏览器缓存
- 纸张收敛为 A3、A4、A5、US-Letter 和 US-Legal
- 默认 A4 纵向和 16mm 四边页边距;
- 统一 96 CSS px/in、72 PDF pt/in 和 25.4mm/in 的物理单位换算;
@@ -136,6 +137,7 @@ ec48bce chore: 初始化项目骨架
- 页眉左中右内容和变量;
- 五种页码样式、对齐和起始页码;
- Mermaid 官方配置 frontmatter、默认主题与错误隔离;
- Mermaid 全局 Dagre/ELK 布局、官方主题、外观和字体设置;
- Markdown 表格对齐属性保留和自适应列宽;
- 纸张尺寸和页边距实时预览。
@@ -190,6 +192,23 @@ ec48bce chore: 初始化项目骨架
- 增加容器健康检查和统一进程退出处理。
- Nginx 显式以 JavaScript MIME 类型提供 PDF.js `.mjs` Worker。
### 3.6 Mermaid 配置与预览缩放
- Mermaid 固定为 `11.16.0`ELK 使用官方
`@mermaid-js/layout-elk@0.2.2` 并按需加载核心布局代码。
- 全局导出设置支持 Dagre、ELK、官方主题、Classic、Hand-drawn、Neo
外观和自定义本地字体。
- 单图 `config` Front Matter 可以覆盖全局布局、主题、外观、字体、
`themeVariables` 和图表专属配置。
- `style``classDef``linkStyle` 保持 Mermaid 原生语义。
- `themeCSS`、严格安全模式和资源限制不能由 Markdown 覆盖。
- Mermaid 与 Paged.js 计算期间隐藏分页 iframe,避免显示官方渲染器的
临时测量节点。
- 快速预览和精确预览共用 50%~400% 显示缩放,支持滑块、手动输入、
100% 重置和独立浏览器缓存。
- 缩放不进入导出配置,不改变分页或 PDF;精确预览会按显示宽度重绘
邻近 Canvas,保持文字清晰。
## 4. 已执行验证
2026-07-26 在当前完整工作区成功执行:
@@ -203,16 +222,21 @@ git diff --check
结果:
- 共享配置测试:6 项通过;
- 共享配置测试:8 项通过;
- 渲染器测试:7 项通过;
- 前端测试:47 项通过;
- 后端测试:17 项通过;
- 前端测试:55 项通过;
- 后端测试:23 项通过;
- 全项目类型检查通过;
- 生产构建通过;
- `git diff --check` 通过。
已使用浏览器插件完成视觉验证:
- 预览缩放在 50%、100%、150% 和 400% 下均按比例显示,快速与精确
预览的分页结果不受缩放影响;
- 包含 ELK、Base 主题、Hand-drawn 外观、自定义字体、
`themeVariables``style``classDef` 的 Mermaid 样例在快速预览
与精确预览中均成功渲染;
- 65 页附件的快速预览生成 64 页,67 个 Mermaid 全部使用静态 SVG
- 同一附件的精确预览和最终 PDF 均为 65 页;
- 精确预览快速跳转至第 46、47、65 页,无黑色 Canvas、空白页或渲染错误;
@@ -259,6 +283,7 @@ git diff --check
- `apps/web/src/mermaid-static-image.ts` 负责锁定 Mermaid 盒模型并转换为静态矢量 SVG 图片。
- `apps/web/src/paged-table-handler.ts` 负责跨页表格表头处理。
- `apps/web/src/PrecisePdfPreview.tsx``pdf-render-queue.ts` 负责 PDF.js 精确预览和 Canvas 生命周期。
- `apps/web/src/preview-zoom.ts``PreviewZoomControl.tsx` 负责预览缩放缓存、边界和控制界面。
- `apps/server/src/pdf-engine.ts` 负责 Chromium 生命周期、并发、网络限制、分页调用和 PDF 输出。
- `apps/web/src/ExportSettingsDrawer.tsx` 是导出设置界面。
- `apps/web/src/export-settings.ts` 负责版本化浏览器缓存。