SkyJourney 925b0d1485 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 产物未配置代码签名。
2026-07-28 13:31:42 +08:00
2026-07-28 13:31:42 +08:00
2026-07-28 13:31:42 +08:00
2026-07-28 13:31:42 +08:00
2026-07-27 20:56:39 +08:00
2026-07-28 13:31:42 +08:00
2026-07-25 16:51:16 +08:00
2026-07-27 20:56:39 +08:00
2026-07-25 16:51:16 +08:00
2026-07-26 16:55:36 +08:00
2026-07-27 20:56:39 +08:00
2026-07-28 13:31:42 +08:00
2026-07-28 13:31:42 +08:00
2026-07-28 13:31:42 +08:00
2026-07-28 13:31:42 +08:00

Markdown PDF 导出器

一个同时提供 Web 与 Windows 桌面端的 Markdown 排版、分页预览和 PDF 导出工具。预览与 PDF 复用同一份安全 HTML、#write DOM、主题 CSS 和 分页运行时,适合内网部署,也可以作为不依赖本地服务的桌面应用使用。

当前版本:v0.4.5

v0.4.5 主要能力

  • 新建、打开和保存 Markdown;新文档可直接导出 PDF;
  • Windows 注册 .md.markdown 文件关联,系统打开文件时自动加载;
  • 桌面窗口位置、尺寸和最大化状态延迟持久化,并在多显示器变化后自动 修正到可见工作区;
  • “打开 Markdown”保留为独立主按钮,新建、保存和主题目录收纳在“更多” 菜单;
  • 桌面端提供可直接放置自定义主题的本地目录;
  • 图片、Mermaid 和 ECharts 采用串行媒体分页:每个媒体块至多重排一次, 严格保持文档顺序;
  • 媒体先按内容限宽计算基准高度。当上一页空白接近媒体所需空间时,允许 将媒体内容等比例缩小回填;图片标题或图表标题保持原字号且与媒体成块;
  • 示例文档覆盖横图、竖图、Base64 图片、Mermaid、ECharts 以及不同尺寸 的分页边界。

Web 与桌面端

能力 Web / Docker Windows Desktop
新建 Markdown 支持 支持
打开 Markdown 浏览器文件选择 原生对话框、文件关联、第二实例转交
保存 Markdown 浏览器下载 原生另存为
相对本地图片 默认不支持 以 Markdown 所在目录为安全边界
远程图片 服务端受限下载并内嵌 应用服务受限下载并内嵌
自定义主题 Compose 只读挂载目录 “更多 → 打开自定义主题目录”
PDF 引擎 固定版本 Playwright Chromium Electron 自带 Chromium

Web 端不提供本地素材目录能力。需要包含本地相对资源的文档时,请使用 DesktopWeb 端可使用 Base64/Data URL 或受限公网图片。

渲染架构

flowchart LR
    A["Markdown 与受限资源"] --> B["Renderer 安全渲染"]
    B --> C["统一 #write HTML"]
    D["主题 CSS 与导出配置"] --> C
    C --> E["共享分页运行时"]
    E --> F["Web 快速预览"]
    E --> G["Playwright Chromium"]
    E --> H["Electron Chromium"]
    G --> I["Web PDF"]
    H --> J["Desktop PDF"]

快速预览适合编辑反馈;精确预览直接展示服务端生成的 PDF,是 Web 最终 分页的权威结果。桌面 PDF 复用相同分页载荷和运行时。

项目目录

apps/
  web/                  React 编辑、设置、快速/精确预览与浏览器文件操作
  server/               Fastify API、Playwright PDF 与容器运行入口
  desktop/              Electron 主进程、IPC、原生文件和 Windows 打包
packages/
  core/                 跨端文档、导出配置和主题协议
  renderer/             Markdown 到安全 #write HTML 的渲染管线
  application/          共享渲染、主题注册和图片资源应用服务
  markdown-echarts/     ECharts YAML 协议、验证与浏览器 SVG 运行时
themes/                 内置主题与主题清单
deploy/                 Dockerfile、Compose、Nginx 和部署文档
docs/                   项目进度与主题开发说明
scripts/                主题导入等维护脚本
logos/                  应用图标源文件
.local/themes/          本地开发和 Compose 自定义主题目录

包依赖保持单向:core 提供基础协议;markdown-echarts 提供独立图表 能力;renderer 消费两者生成安全 HTMLapplication 组合渲染器、主题 和资源用例;三个 apps/* 只负责各自平台的界面、传输与 PDF 适配。

各包的目录和用法:

本地开发

要求 Node.js 22 或更高版本。

npm install
npm run dev

默认地址:

桌面端开发:

npm run desktop:dev

桌面端目录包和 Windows 安装包:

npm run desktop:package
npm run make -w @md-to-pdf/desktop

产物位于 apps/desktop/out/v0.4.5/。正式安装包命名为 md-to-pdf-0.4.5-x86_64-Setup.exe,同时生成免安装 ZIP;当前发行包 未配置代码签名。

文档与媒体

Markdown 支持 Front Matter、表格、任务列表、脚注、highlight.js、 KaTeX、Mermaid 和安全的 ECharts YAML 围栏。

独立一行的 ![标题](地址) 会生成带标题的图片块。分页引擎将图片、 Mermaid、ECharts 及其紧邻标题视为不可拆分媒体块,并按文档顺序串行 计算。图片的缩放基准是原图先收缩到内容限宽后的高度;需要回填上一页时 只缩放媒体内容,不缩放标题。这样可利用接近可容纳的页尾空白,同时避免 跨页、重复重排和后续媒体顺序变化。

ECharts 围栏语法、支持系列和安全边界详见 markdown-echarts 包文档

主题

仓库内置 Typora 风格、GitHub、Pixyll 和 Whitey 四套主题。主题由 版本化 theme.json 清单、主体 CSS、可选基础 CSS、打印 CSS 和资源组成。

  • 本地开发与 Compose:将主题目录放入 .local/themes/
  • Desktop:从“更多 → 打开自定义主题目录”打开实际安装目录,再放入主题;
  • 主题格式、安全限制和资源引用详见主题开发指南

Compose 会把 .local/themes 只读挂载到容器。Typora 主题导入脚本只用于 刷新本地开发副本:

npm run theme:import-typora

Docker Compose 部署

docker compose -f deploy\compose.yaml up --build -d

默认访问 http://localhost:8080。端口、镜像、主题挂载、PDF 并发和超时 配置详见 AIO 容器部署说明

验证

npm test
npm run typecheck
npm run build
git diff --check

涉及分页或 PDF 的改动还应使用包含中文、长表格、代码、公式、图片、 Mermaid、ECharts 和分页边界的示例完成 Web、Compose 与 Desktop 端到端 验证,并检查 PDF 页面渲染结果。

安全与隐私

  • 不建立 Markdown、图片或 PDF 历史数据库;
  • 文档和资源只在当前请求或当前桌面会话中处理;
  • Markdown 原始 HTML 不执行,输出经过白名单过滤;
  • Mermaid 使用严格安全模式,ECharts 只接受受限纯数据 YAML
  • 本地资源阻止路径穿越和符号链接越界;
  • 远程资源阻止内网地址,并限制数量、单文件大小、总大小和超时;
  • PDF 页面阻止未授权外部网络访问。

当前实现与交接状态详见 docs/PROGRESS.md

S
Description
No description provided
Readme
90 MiB
2026-08-26 10:50:32 +08:00
Languages
TypeScript 83.8%
JavaScript 11.3%
CSS 3.6%
Dockerfile 0.4%
NSIS 0.3%
Other 0.3%