release: 发布 v0.4.5
新增能力:Web 与 Desktop 支持新建和保存 Markdown;桌面端注册 .md/.markdown 打开程序,支持单实例文件转交、自定义主题目录以及窗口位置、尺寸和最大化状态的延迟原子持久化与屏幕越界修正。 界面与兼容性:保留打开 Markdown 为独立主操作,将新建、保存和主题目录收纳到更多菜单;Web 移除本地素材目录入口并明确默认不支持本地素材;新文档默认使用一级标题或首行合法化生成文件名,可不保存直接导出 PDF。 渲染修复:图片、Mermaid 和 ECharts 按文档顺序串行执行媒体分页回填,每个媒体元素至多重排一次;图片以限宽后的高度作为缩放基准,只缩放媒体主体并保持标题尺寸;ECharts 冻结为 SVG 图片后参与统一分页。 示例与文档:默认示例仅保留一张网络图片,增加有效 Base64 横图、竖图、边界图片及多尺寸 Mermaid/ECharts;更新根 README、Desktop README、部署文档、四个 packages README、PROGRESS 和 AGENTS 发布规范;登记 v0.4.6 超链接导航问题。 部署与验证:构建并运行 yixiong/md-to-pdf:v0.4.5 正式镜像,Compose 健康且 PDF 冒烟无 Mermaid/ECharts 错误;生成 NSIS 安装包和免安装 ZIP,本机已升级到 NSIS v0.4.5 并清理旧 Squirrel 安装;202 项测试、类型检查、生产构建和 git diff --check 全部通过。 发布产物:Setup.exe SHA-256 9CBD6362E15AA745185805E753D5A7749434E0E142E6CE0F66463E6A19468F1D;ZIP SHA-256 97B2D44E72F626A3396E5AB5B330FFB7F9BECAF945A1707808C876940A82E850;当前 Windows 产物未配置代码签名。
This commit is contained in:
+86
-10
@@ -1,6 +1,6 @@
|
||||
# Markdown PDF 导出器进度
|
||||
|
||||
最后更新:2026-07-27
|
||||
最后更新:2026-07-28
|
||||
|
||||
## 1. 当前概况
|
||||
|
||||
@@ -44,6 +44,11 @@ Web/Compose 发布仍保持 `v0.4.1`。
|
||||
`v0.4.4` 仅精简 Electron 桌面发行包的语言资源,保留简体中文和英文;
|
||||
Web/Compose 发布仍保持 `v0.4.1`。
|
||||
|
||||
`v0.4.5` 同步更新 Web 与 Desktop:新增新建/保存 Markdown、桌面文件
|
||||
关联、窗口状态恢复、自定义主题目录和收纳式“更多”菜单;Web 明确取消
|
||||
本地素材目录。图片、Mermaid 与 ECharts 的分页算法统一为按文档顺序
|
||||
串行计算的媒体块回填,每个媒体元素至多重排一次,标题保持原尺寸。
|
||||
|
||||
## 2. 已完成
|
||||
|
||||
### 2.1 项目骨架
|
||||
@@ -437,9 +442,37 @@ Web/Compose 发布仍保持 `v0.4.1`。
|
||||
- 本版本只重新生成桌面安装包和免安装 ZIP;Web/Compose 发布继续保持
|
||||
`v0.4.1`。
|
||||
|
||||
### 3.18 v0.4.5 文档工作流与媒体分页
|
||||
|
||||
- Web 与 Desktop 均支持新建 Markdown;未保存时使用“未命名文档”状态,
|
||||
不显示伪造源文件名,并允许直接导出 PDF。
|
||||
- Web 保存使用浏览器下载;Desktop 使用原生另存为。默认文件名优先取
|
||||
第一个一级标题,没有一级标题时取首行可见文本,并清理 Windows 非法
|
||||
字符、保留名和末尾空格或句点。
|
||||
- “打开 Markdown”继续作为顶部独立强操作;新建、保存及桌面自定义主题
|
||||
目录收纳到“更多”菜单,Web 不再显示本地素材目录入口。
|
||||
- Windows 安装包注册 `.md` 和 `.markdown` 文件关联;系统打开文件会
|
||||
转交给现有单实例窗口并自动加载。
|
||||
- Desktop 监听窗口位置、尺寸和最大化变化,延迟写入完整状态;退出前
|
||||
刷新待写状态。下次启动按当前显示器工作区限制尺寸并修正坐标,避免
|
||||
多显示器断开后窗口落在屏幕外。
|
||||
- Desktop 会建立自定义主题目录,“更多”菜单可直接在资源管理器打开;
|
||||
目录允许留空,放入合法主题后由共享主题注册器读取。
|
||||
- 图片、Mermaid 和 ECharts 统一视为带标题的媒体块。分页按 DOM 文档
|
||||
顺序串行处理,每个媒体元素只允许一次回填或缩放重排。
|
||||
- 图片基准高度按原尺寸先收缩到内容限宽后计算;媒体块只有在上一页空白
|
||||
与所需空间比例达到阈值时才尝试回填。缩放只作用于图片或图表内容,
|
||||
标题保持原字号和自然高度。
|
||||
- ECharts 在分页前冻结为 SVG 图片,三类媒体共享回填决策与边界检查;
|
||||
无法安全回填时仍移至下一页,保证顺序、不跨页且不覆盖后续内容。
|
||||
- 默认示例仅保留一张网络图片,并新增有效 Base64 横图、不同尺寸图片、
|
||||
Mermaid 和 ECharts,用于观察媒体分页、标题配对和渲染效果。
|
||||
- 根 README、Desktop README、四个工作区包 README、进度文档和发布
|
||||
规范随版本同步更新。
|
||||
|
||||
## 4. 已执行验证
|
||||
|
||||
2026-07-27 在当前完整工作区成功执行:
|
||||
2026-07-28 在当前完整工作区成功执行:
|
||||
|
||||
```text
|
||||
npm test
|
||||
@@ -452,16 +485,45 @@ git diff --check
|
||||
|
||||
- ECharts 围栏测试:36 项通过;
|
||||
- 共享配置测试:9 项通过;
|
||||
- 渲染器测试:10 项通过;
|
||||
- 应用服务测试:5 项通过;
|
||||
- 前端测试:67 项通过;
|
||||
- 渲染器测试:12 项通过;
|
||||
- 应用服务测试:9 项通过;
|
||||
- 前端测试:87 项通过;
|
||||
- 后端测试:29 项通过;
|
||||
- 桌面端测试:7 项通过;
|
||||
- 全项目共 171 项测试通过;
|
||||
- 桌面端测试:20 项通过;
|
||||
- 全项目共 202 项测试通过;
|
||||
- 全项目类型检查通过;
|
||||
- 生产构建通过;
|
||||
- `git diff --check` 通过。
|
||||
|
||||
`v0.4.5` 双端与媒体分页验收结果:
|
||||
|
||||
- 正式镜像 `yixiong/md-to-pdf:v0.4.5` 已完成多阶段构建,镜像内容 ID
|
||||
为 `sha256:0703c3762cd0e4e551ce44732b064a938c2095eb331a22e28861a148fe520354`;
|
||||
Compose 已强制替换为正式镜像并健康运行在 `http://localhost:8080`。
|
||||
- 正式镜像 PDF 冒烟请求返回 HTTP 200,生成 1 页、96,661 字节 PDF,
|
||||
Mermaid 与 ECharts 错误数均为 0。
|
||||
- 默认示例在 Web 快速预览与精确预览中均为 10 页;12 个媒体块均只
|
||||
出现一次,全部标题正确配对,无重叠、越界、解码或图表错误。
|
||||
- 容器生成 `output/pdf/v0.4.5-media-pagination-rc.pdf`,共 10 页、
|
||||
928,803 字节;Mermaid 与 ECharts 错误数均为 0,逐页视觉检查通过。
|
||||
- Desktop 新建、输入、默认标题文件名保存、原生 PDF 导出均通过;
|
||||
`output/桌面保存验收.md` 内容正确,Desktop README 导出 PDF 为 5 页。
|
||||
- 从第二实例系统打开 `README.md` 时保持单窗口并自动加载;自定义主题
|
||||
目录能够打开且可识别已有主题。
|
||||
- 窗口最大化变化约 2 秒后写入状态;重启恢复最大化。窗口位置与尺寸
|
||||
测试覆盖屏幕越界修正、最小尺寸、原子写入和损坏状态回退。
|
||||
- 正式 NSIS 安装包为 `md-to-pdf-0.4.5-x86_64-Setup.exe`,
|
||||
94,998,489 字节,SHA-256 为
|
||||
`9CBD6362E15AA745185805E753D5A7749434E0E142E6CE0F66463E6A19468F1D`。
|
||||
- 免安装包为 `md-to-pdf-0.4.5-x86_64.zip`,132,477,245 字节,
|
||||
SHA-256 为
|
||||
`97B2D44E72F626A3396E5AB5B330FFB7F9BECAF945A1707808C876940A82E850`。
|
||||
- 正式目录版主程序版本为 `0.4.5`,只包含 `zh-CN` 和 `en-US` 语言包,
|
||||
Authenticode 状态为未签名,启动后应用与渲染进程均正常响应。
|
||||
- 本机当前用户安装已从 `0.4.3` 原位升级到 `0.4.5`;卸载注册信息、
|
||||
桌面与开始菜单快捷方式、`.md` 和 `.markdown` 打开注册均验证通过,
|
||||
安装版应用启动正常。
|
||||
|
||||
Electron 桌面端第一阶段验证结果:
|
||||
|
||||
- Electron 43.2.0 应用窗口成功加载现有 React/Vite 界面,标题旁正确显示
|
||||
@@ -678,6 +740,10 @@ ECharts 第二阶段浏览器与 PDF 验证结果:
|
||||
## 5. 当前注意事项
|
||||
|
||||
- `output/` 可能包含本地 PDF 验证产物,已被 Git 忽略,不得提交。
|
||||
- 已确认分页预览 iframe 内点击超链接会在 iframe 内执行导航,可能将当前
|
||||
预览替换为空白页。该问题不阻塞 `v0.4.5`,计划在 `v0.4.6` 统一处理:
|
||||
区分文档内锚点与外部链接、阻止危险协议,并为外部链接使用受控的新窗口
|
||||
或系统浏览器打开策略。
|
||||
- `apps/web/src/App.tsx` 负责分页 iframe 生命周期和父页面消息处理。
|
||||
- `apps/web/src/use-markdown-render.ts` 负责 Markdown 防抖请求、取消和
|
||||
渲染错误状态。
|
||||
@@ -720,12 +786,22 @@ ECharts 第二阶段浏览器与 PDF 验证结果:
|
||||
目录读取;远程图片仅保留有界内存缓存。
|
||||
- 桌面端已通过进程内共享服务实现离线 Markdown 渲染、主题读取和 PDF
|
||||
导出,不依赖 Fastify 或本地 HTTP Server。
|
||||
- v0.4.0 AIO 容器已经通过 Docker Desktop 构建、端到端和浏览器验证,
|
||||
当前 Compose 容器保持运行。
|
||||
- `v0.4.5` AIO 正式镜像已经通过 Docker Desktop 构建、PDF 冒烟和
|
||||
Compose 健康检查,当前 Compose 容器保持运行。
|
||||
|
||||
## 6. 推荐接手顺序
|
||||
|
||||
### 阶段一:导出配置扩展
|
||||
### 阶段一:v0.4.6 超链接导航
|
||||
|
||||
- 在快速预览 iframe 中统一拦截链接点击,避免外部页面替换分页预览;
|
||||
- 文档内 `#anchor` 保持在当前预览中定位,并兼容分页后的标题锚点;
|
||||
- `http:`、`https:`、`mailto:` 等允许协议通过受控新窗口或桌面系统
|
||||
浏览器打开;
|
||||
- 拒绝 `javascript:`、`file:`、未知协议及未授权本地资源;
|
||||
- Web 与 Desktop 共用链接分类规则,各平台只实现打开动作适配;
|
||||
- 增加快速预览、精确预览和 Desktop 的链接行为测试。
|
||||
|
||||
### 阶段二:导出配置扩展
|
||||
|
||||
- Front Matter 元数据覆盖;
|
||||
- 浏览器本地配置预设;
|
||||
|
||||
Reference in New Issue
Block a user