fix: 内置DOCX双中文字体包

This commit is contained in:
SkyJourney
2026-08-03 12:07:12 +08:00
parent a094dabf02
commit 6a6972ae48
24 changed files with 508 additions and 180 deletions
+25 -65
View File
@@ -1,9 +1,9 @@
# 可选字体包构建
# 内置字体包集合构建
本目录保存字体包配方、许可证、来源说明和正式冻结字体资产。字体二进制
位于固定的 `font-packs/assets/`,统一由 Git LFS 管理,普通 Git 对象只保存
LFS 指针。普通 Desktop 安装包不包含字体;组合 Desktop 发行把字体作为
同目录可选附件,Docker 发行构建则把本次受校验的字体包写入镜像层
LFS 指针。Desktop 安装版、便携版和 Docker 镜像都直接包含本次受校验的
完整字体包集合,不再依赖用户另行安装字体附件
## 源目录
@@ -16,10 +16,18 @@ font-packs/assets/mdtp-serif-sc/1.0.0/
├── MdTPSerifSC-Regular.woff2
├── MdTPSerifSC-Bold.ttf
└── MdTPSerifSC-Bold.woff2
font-packs/assets/mdtp-sans-sc/1.0.0/
├── MdTPSansSC-Regular.ttf
├── MdTPSansSC-Regular.woff2
├── MdTPSansSC-Bold.ttf
└── MdTPSansSC-Bold.woff2
```
该目录中的 `ttf/otf/woff/woff2``.gitattributes` 强制使用 Git LFS。
构建器不会联网下载、转换或自动替换字体。每个输入文件都必须与配方声明的
构建器不会联网下载或自动替换字体。派生字体通过
`font-packs/scripts/build-noto-static.py` 从来源说明固定的 Noto CJK
可变字体生成;每个发行输入文件都必须与配方声明的
字节数和 SHA-256 完全一致;TTF 还必须是无需运行时规范化的原生静态
TrueType,并具有可安装或可编辑的文档嵌入权限。
@@ -30,17 +38,13 @@ npm run build:font-pack
npm run verify:font-pack
```
也可以显式指定源目录:
```powershell
npm run build:font-pack -- --source-root D:/font-pack-sources/mdtp-serif-sc/1.0.0
```
克隆仓库后应先执行 `git lfs pull`。缺少 LFS 内容时,字体构建会因文件大小
或 SHA-256 不匹配而拒绝继续,不允许使用系统字体或相近字体静默替代。
默认运行时字体包根目录为 `output/font-packs/root`,构建报告写入
`output/font-packs/build-report.json`,两者均被 Git 忽略。输出布局为:
受版本控制的 `font-packs/bundle.json` 是正式字体包集合清单。构建命令会
逐包构建、验证,并拒绝 `output/font-packs/root` 中出现清单外字体包,
避免本地残留进入发行产物。各包报告写入
`output/font-packs/<pack-id>-build-report.json`。输出布局为:
```text
root/<pack-id>/<semver>/font-pack.json
@@ -53,34 +57,12 @@ root/<pack-id>/<semver>/font-pack.json
`Mdpdf Fandol Song` 的 400/700 字重,不匹配 `SimSun` 等通用别名,避免
错误替换仿宋、黑体、楷体或普通外部主题字体。
## Windows 独立安装器
`mdtp-sans-sc@1.0.0` 提供 `MdTP Sans SC``FandolHei`
`Microsoft YaHei``PingFang SC``Noto Sans CJK SC`
`Source Han Sans SC` 的 400/700 字重映射。主题仍需明确声明所需字体面,
注册器不会对未声明字体进行静默替换。
发布人员可以使用 electron-builder 锁定并校验的 NSIS 工具链构建独立
字体包安装器,不需要额外安装系统 NSIS:
```powershell
npm run build:font-pack:windows
```
默认产物为:
```text
output/font-packs/windows/
└── MorphDoc-FontPack-mdtp-serif-sc-1.0.0-x86_64-Setup.exe
```
安装器使用当前用户权限,将整个 `mdtp-serif-sc` ID 安装到:
```text
%LOCALAPPDATA%/md-to-pdf/font-packs/mdtp-serif-sc/1.0.0/
```
它不向 Windows 系统字体目录注册字体。同一版本重装保持幂等,升级时先把
该 ID 的现有目录移入备份,再原子提升新版本;失败会回滚。独立卸载项只
删除安装器拥有的 `mdtp-serif-sc` ID,不影响其他字体包 ID。安装器支持
`/S` 静默安装和卸载。
## Desktop 伴随发行
## Desktop 内置发行
组合构建命令为:
@@ -88,32 +70,10 @@ output/font-packs/windows/
npm run desktop:make:with-font-pack
```
该命令把主安装器、字体包安装器和字体包 ZIP 作为同目录文件发行。主安装器
只编译字体包安装器的文件名与 SHA-256,不嵌入字体二进制;仅当同目录文件
存在且哈希完全一致时,交互安装向导才显示默认勾选的字体包选项。字体
失败不回滚已安装的主程序
主安装器静默运行时默认不安装伴随字体包;只有显式传入以下参数才会安装:
```powershell
MorphDoc-<version>-x86_64-Setup.exe /S /WITHFONTPACK=1
```
普通 `npm run make -w @md-to-pdf/desktop` 不启用伴随逻辑,避免本地残留的
生成文件影响常规桌面构建。
## ZIP 发行附件
独立生成可手动部署的确定性 ZIP
```powershell
npm run build:font-pack:archive
```
产物为 `output/font-packs/release/MorphDoc-FontPack-mdtp-serif-sc-1.0.0.zip`
归档顶层已经包含 `mdtp-serif-sc/1.0.0/`,用户可直接解压到
`%LOCALAPPDATA%/md-to-pdf/font-packs`。ZIP 内保留清单、许可证、来源说明
以及 Web/DOCX 两类字体资产;相同输入会生成逐字节一致的附件。
该命令先重建完整字体包集合,再构建主安装器和便携 ZIP。electron-builder
`output/font-packs/root` 复制到 `resources/font-packs`Desktop 生产
运行时优先读取该只读内置根目录,再读取用户目录中的额外字体包。内置
因此不会被缺失、旧版或同 ID 用户包替换
## Docker 内置发行