# CADFontAutoReplace
**Repository Path**: splrad/CADFontAutoReplace
## Basic Information
- **Project Name**: CADFontAutoReplace
- **Description**: CAD 字体缺失检测与自动替换插件
- **Primary Language**: C#
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 6
- **Forks**: 5
- **Created**: 2026-03-22
- **Last Updated**: 2026-05-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: cad
## README
# AFR — CAD 缺失字体自动替换工具
**打开图纸不再出现文字不显示、乱码,所有缺失字体自动搞定**
[](LICENSE.txt)
[](#-已支持版本)
[](https://dotnet.microsoft.com/)
[GitHub](https://github.com/splrad/CADFontAutoReplace) · [Gitee(国内镜像)](https://gitee.com/splrad/CADFontAutoReplace) · [Releases](https://github.com/splrad/CADFontAutoReplace/releases) · [提交 Issue](https://github.com/splrad/CADFontAutoReplace/issues)
**📥 补充下载链接:[蓝奏云网盘](https://wwbcq.lanzouv.com/b01jt1w7of) (密码: exsc)**
---
## ✨ 项目亮点
- ✅ **自动处理图纸中的缺失字体**:配置一次后,后续大多数图纸都能自动处理,不用反复手动改字体。
- ✅ **覆盖三类常见缺失字体场景**:支持 `SHX 主字体`、`SHX 大字体` 与 `TrueType` 缺失的统一处理。
- ✅ **支持 MText 乱码场景修复**:针对多行文字中的内联字体缺失提供专门处理,不限于普通文字样式替换。
- ✅ **减少 SHX 缺失对话框干扰**:部署工具会自动关闭“缺少 SHX 文件”对话框,减少打开图纸时的重复确认。
- ✅ **安装与卸载更省心**:使用 `部署工具`,无需手动处理注册表、自动加载项和文件放置。
- ✅ **自动识别 CAD 版本**:发布包同时支持 AutoCAD 2018–2027,部署工具会自动扫描并列出可安装版本。
- ✅ **插件状态清晰可见**:可以直接查看插件是否已安装、是否为最新版,以及是否存在 DLL 缺失或待安装项。
- ✅ **运行中场景自动保护**:安装或卸载前会先检测 CAD 是否正在运行,降低操作冲突和写入失败的风险。
- ✅ **支持结果复核与手动调整**:如果自动替换结果仍需优化,可以通过 `AFRLOG` 逐条查看、调整和复核。
---
## 🖼️ 界面预览
插件配置
AFR 命令 — 字体配置
配置 SHX 主字体、大字体与 TrueType 替换目标。
|
日志复核
AFRLOG 命令 — 替换日志
查看缺失字体检测结果,并执行手动替换与复核。
|
部署管理
AFR.Deployer — 扫描、安装、卸载一体化部署工具
扫描已安装 CAD、识别插件状态,并执行一键安装/卸载。
|
---
## ✅ 已支持版本
| CAD 版本 | DLL 文件名 | .NET |
|:---:|:---:|:---:|
| AutoCAD **2018**(R22.0) | `AFR-ACAD2018.dll` | .NET Framework 4.6.2 |
| AutoCAD **2019**(R23.0) | `AFR-ACAD2019.dll` | .NET Framework 4.7.2 |
| AutoCAD **2020**(R23.1) | `AFR-ACAD2020.dll` | .NET Framework 4.7.2 |
| AutoCAD **2021**(R24.0) | `AFR-ACAD2021.dll` | .NET Framework 4.8 |
| AutoCAD **2022**(R24.1) | `AFR-ACAD2022.dll` | .NET Framework 4.8 |
| AutoCAD **2023**(R24.2) | `AFR-ACAD2023.dll` | .NET Framework 4.8 |
| AutoCAD **2024**(R24.3) | `AFR-ACAD2024.dll` | .NET Framework 4.8 |
| AutoCAD **2025**(R25.0) | `AFR-ACAD2025.dll` | .NET 8.0 |
| AutoCAD **2026**(R25.1) | `AFR-ACAD2026.dll` | .NET 8.0 |
| AutoCAD **2027**(R26.0) | `AFR-ACAD2027.dll` | .NET 10.0 |
---
## 🚀 快速开始
### 部署工具一键安装
1. 在 [Releases](https://github.com/splrad/CADFontAutoReplace/releases) 下载最新发行包,其中包含 `AFR.Deployer.exe` 与对应版本插件文件。
2. **先关闭所有 AutoCAD 进程**(部署工具会在检测到 CAD 运行时禁用安装/卸载按钮)。
3. 双击运行 `AFR.Deployer.exe`,工具会自动扫描本机已安装的 AutoCAD 版本。
4. 勾选需要安装的项目,确认"部署路径"(默认会选中首个非系统盘下的 `\CADPlugins\`),点击"安装"。
5. 工具会自动完成:
- 将对应版本 DLL 复制到部署路径;
- 在注册表写入自动加载项;
- 释放内嵌默认 SHX 字体到各 CAD 的 `Fonts` 目录;
- 写入 `FixedProfile.aws` 以抑制"缺少 SHX 文件"弹窗。
6. 启动 AutoCAD 后,插件自动生效。
> 💡 部署工具会实时监听注册表变化:后续安装/卸载新的 CAD 版本或修改配置文件后,无需手动"刷新",列表会自动更新。
>
> 卸载同样在部署工具中完成:勾选已安装的项目点击"卸载",工具会同步还原注册表与 `FixedProfile.aws` 中由本插件写入的节点。
### 首次配置与验证
1. 首次安装后启动 AutoCAD,插件会自动将内置默认字体释放到 CAD 的 `Fonts` 目录。
2. 插件会自动写入默认配置:
- SHX 主字体:`ming.shx`
- SHX 大字体:`tssdchn.shx`
- TrueType 字体:`宋体`
3. 如需修改默认配置,可在 AutoCAD 中输入 `AFR`,重新配置三类替换字体。
> ⚠️ 字体精简建议:
> - 建议将 CAD 安装目录 `Fonts` 中 SHX 字体精简至 100 个以内
> - 保留 `sas_____.pfb`、`MstnFontConfig.xml`、`internat.rsc`、`font.rsc` 等非 SHX 文件
> - 字体过多会导致插件界面加载明显卡顿
>
> 👉 [点击下载 CAD 字体包(Fonts.zip)](https://github.com/splrad/CADFontAutoReplace/releases)
打开有缺失字体的 DWG,看到类似日志即说明工作正常:
```
====================================================================================
AFR 缺失字体自动替换 v9.0
项目地址GitHub(国外):github.com/splrad/CADFontAutoReplace
项目地址Gitee(国内):gitee.com/splrad/CADFontAutoReplace
命令: AFR(配置) AFRLOG(日志)
====================================================================================
[字体修复]已替换缺失字体 3 个(SHX主字体:1,SHX大字体:1,TrueType:1) | MText内联字体映射:0
```
### 手动替换
如果自动替换结果不理想:
1. 输入 `AFRLOG`
2. 查看缺失字体与当前替换目标
3. 逐条调整或使用批量填充
4. 点击“应用替换”写入当前图纸
> 💡 `AFRLOG` 每次打开都会重新读取图纸实时状态(含 `STYLE` 修改结果)。
>
> ⚠️ MText 内联字体采用 Hook 重定向自动修复,不支持手动替换。
---
## ⌨️ 命令说明
| 命令 | 说明 |
|:---:|---|
| `AFR` | 打开字体配置界面,选择 SHX 主字体、大字体和 TrueType 替换字体 |
| `AFRLOG` | 打开替换日志,查看检测结果,支持手动调整和批量填充 |
---
## ❓ 常见问题
如何修改替换字体配置?
随时输入 `AFR`,重新选择字体并确认即可。新配置会立即对当前图纸生效。
替换后文字显示异常怎么办?
**不要保存图纸。** 使用 `AFRLOG` 重新选择替换字体,直至显示正常。
如何卸载插件?
使用 `AFR.Deployer` 执行卸载:勾选已安装项后点击“卸载”,工具会同步清理自动加载配置与由本插件写入的 `FixedProfile.aws` 节点。
为什么 AFR 能修复多行文字(MText)乱码?
AFR 在 DWG 解析阶段通过 `ldfile` Hook 拦截字体加载请求。针对 MText 内联字体(`\F` / `\f`)缺失场景,会优先在解析链路中重定向,再由样式表替换阶段统一收敛。
> 注意:若图纸正文字符已经被错误编码保存(文字数据已损坏),字体替换无法恢复原文。
---
## 🐞 问题反馈
### Issues提交
如果使用插件后仍出现“字体不显示”或“乱码”,欢迎提交 [Issues](https://github.com/splrad/CADFontAutoReplace/issues)。
为便于快速定位,请尽量附上:
1. 脱敏后的问题图纸(可最小化为单个问题区域)
2. 同一图纸中“正常显示部分”截图
3. 同一图纸中“不正常显示部分”截图
4. AutoCAD 版本 + 插件 DLL 版本 + 插件配置
信息越完整,定位越快。
### 联系作者
QQ:1186191934
微信:splrad
电子邮箱:alearner@splrad.com
---
## 🛠️ 开发者说明
- [新手:开发者指南](docs/developer-guide-beginner.md)
- [进阶:开发者指南](docs/developer-guide-advanced.md)
- [规范:Git 分支模板](docs/git-branch-guidelines.md)
---
## 🤝 贡献者指南
欢迎提交 Issue 和 PR,一起完善 AFR。
### 提交流程
1. 拉取仓库 `main` 最新代码。
2. 从 `main` 切出功能分支并完成修改(本仓库禁止直接向 `main` 分支推送)。
3. 本地构建:
```bash
# 构建某个 CAD 版本适配壳
dotnet build src/AutoCAD/AFR-ACAD20XX/AFR-ACAD20XX.csproj
# 构建部署工具
dotnet build src/AFR.Deployer/AFR.Deployer.csproj
# 一次构建所有项目
dotnet build CADFontAutoReplace.slnx
```
> 将 `20XX` 替换为当前目标版本(例如 `2027`)。插件统一版本号集中在根目录的 `Version.props`(发版时仅修改这个文件)。
4. 验证关键命令(`AFR` / `AFRLOG` ,Debug 下可验证 `AFRVIEW` / `AFRINSERT` 等测试命令)。
5. 推送分支后,流程会自动创建/更新 `你的分支 -> test` 的 PR。
6. `test` 合并后,流程会自动创建/更新 `test -> main` 的 PR。
7. 提交说明与 PR 描述会自动生成;不准确时请在 PR 评论补充。
### 审批与权限规则
- 核心开发者(`TRUSTED_DEVELOPERS`)提交的 PR 会自动审批授权。
- 非核心开发者提交到 `main` 的 PR,需要至少 1 位核心开发者有效审批。
- 非核心开发者向 `test` 提交 PR 时,禁止修改 `.github/workflows/` 下文件。
- `main` 仅允许 `test` 分支发起合并,且禁止外部 Fork 直接向 `main` 提 PR。
### 贡献约定
- 遵守分层依赖方向:`AFR.Core` / `AFR.UI` 不引用 AutoCAD SDK;`AFR.HostIntegration` 由部署工具与 CAD 插件共用,不反向依赖其中任一方。
- 新增命令必须在 `PluginEntry.cs` 注册,否则 CAD 无法识别。
- 仅调试使用的功能请用 `#if DEBUG` 包裹(并在命令注册处同步控制)。
- 发版需要修改版本号时,仅修改根目录 `Version.props`文件。
- 聚焦当前问题,避免无关重构。
---
## 📜 第三方开源库
| 库名 | 版本 | 作者 | 用途 | 许可协议 |
|---|:---:|---|---|:---:|
| [CommunityToolkit.Mvvm](https://github.com/CommunityToolkit/dotnet) | 8.4.2 | Microsoft / .NET Community Toolkit | 部署工具的 MVVM 属性通知、命令生成与 ViewModel 基础设施 | MIT |
| [WPF-UI](https://github.com/lepoco/wpfui) | 4.2.1 | [lepoco](https://github.com/lepoco) | 部署工具的 WPF 现代化界面控件与窗口样式 | MIT |
| [System.Management](https://www.nuget.org/packages/System.Management) | 10.0.7 | Microsoft | 部署工具中用于 WMI 进程监听与系统管理查询 | MIT |
| [AutoCAD.NET](https://www.nuget.org/packages/AutoCAD.NET) | 22.0.0 ~ 26.0.0 | Autodesk / 社区封装分发 | 各版本 AutoCAD 托管 API 引用,供插件适配壳编译使用 | 依发布源约定 |
| [System.ValueTuple](https://www.nuget.org/packages/System.ValueTuple) | 4.5.0 | Microsoft | 兼容 AutoCAD 2018 对应的 .NET Framework 4.6.2 目标 | MIT |
| [HandyControl](https://github.com/HandyOrg/HandyControl) | 3.5.1 | [NaBian](https://github.com/NaBian) | 插件侧 WPF UI 控件库,用于字体配置窗口、日志窗口等界面能力 | MIT |
---
## 📜 字体来源声明
本项目提供的 CAD 字体包中,部分字体来自互联网整理。为尊重原作者知识产权,现将可追溯来源列出如下:
| 字体文件 | 来源 / 作者 | 备注 |
|---|---|---|
| [AutoCAD 原版字体清单](docs/autodesk-fonts.md) | Autodesk | 基于 CAD 初始安装释放的 SHX 清单 |
| `tssdchn.shx` `tssdeng.shx` `cadzxw.shx` | 探索者软件 (TSSD) | 探索者结构设计字体 |
| `cadzxw-e.shx` | ChenYong longfly199@sina.com) | 探索者英文字体,基于 ROMANS 修改 |
| `whgdtxt.shx` `whgtxt.shx` `whtgtxt.shx` `whtmtxt.shx` | 天正建筑 | 天正系列中文大字体 |
| `yjkeng.shx` | 盈建科 (YJK) | 基于 TSSD 英文字体修改 |
| `CDM_NC.shx` `Cdm.shx` | CDM 软件 | 工程设计字体 |
| `ming.shx` `ming1.shx` `ming2.shx` | 淘宝店铺:CAD专家 Q421259113 | 基于 tssdeng / Roman Simplex 修改 |
> ⚠️ 若你是某款字体原作者,且认为收录方式不当,请通过 [Issues](https://github.com/splrad/CADFontAutoReplace/issues) 联系,我会第一时间处理(移除或补充署名)。
>
> 本项目字体包仅供学习与辅助使用,不以任何形式进行商业销售。
---
## ☕ 打赏支持
如果本插件对你有帮助,欢迎请开发者喝杯咖啡 ☕
---
⭐ Star History