Draw.io 自动化中英文字体混排方案

 技术  字体  draw.io  i18n 󰈭 1006字

原生的 draw.io 绘图软件不支持很好的中英文混排, 其只支持设置一种默认字体, 而无法做到为中英文都设置各自的默认字体. 因此在绘制字体要求较为严格的图片时(如宋体 + Times New Roman), 会带来很多不必要的麻烦. 因此, 本文使用 draw.io 支持的自定义插件方式, 自动化中英文混排时的字体设置问题.

前言与背景

draw.io 是一款免费的在线绘图工具, 由于其主要使用 JS 编写, 因此可以很容易地使用 electron 移植到 Linux 桌面软件上, 加上其功能看上去尚且较为完善, 且经过了一个博士师兄的认可, 最终选择暂时使用该软件进行各种图形的绘画.

不过由于其样式设置仅支持一种字体, 经过测试使用 , 连接两种字体也无济于事:

字体配置方式
字体测试结果

解决方案

draw.io 支持用户自定义一段 JS 插件代码来进行自动化的字体检测与设置, 因此使用该插件方案自动检测所有的元素, 当出现中英文混排时使用内置的 span 标签, 为对应的字符串设置相应的字体.

插件文件代码如下, powered by Claude 3.7 Sonnet Extended, debugged by rqdmap.

允许外部拓展

默认的 draw 桌面应用出于安全原因不支持外部代码拓展, 需要为程序添加 --enable-plugins 参数以启用外部拓展.

加载拓展

分 draw.io 的两种使用方式来看:

  • 对于 Web 应用来说, 直接将脚本放在 F12 控制台中即可, 调试起来也更加方便, 可以通过 console.log 打印信息到控制台, 但是缺点是无法持久化插件, 每次都需要手动塞进去

    • 此外, Web 端的应用在导出 PDF 格式时, 会出现字体格式变化等问题, 具体就我所观测到的是, 加粗的宋体字体在 Web 端导出后, 加粗格式消失, 但换用桌面段则可以正常导出, 疑似也是与浏览器的字体配置/功能等问题相关.
  • 对于桌面应用来说, 脚本是通用的(electron 是方便的), 在 其他->插件 中导入该插件文件即可, 之后即可持久化加载该插件

总体来看确实 draw.io 项目是 bug 多多的, 但是也可能间接说明了其复杂程度.. 难怪官方 contributer 是不接受公开 pr 的, 也是第一次看到开源项目的此类声明…

draw.io is closed to contributions (unless a maintainer permits it, which is extremely rare).

The level of complexity of this project means that even simple changes can break a lot of other moving parts. The amount of testing required is far more than it first seems. If we were to receive a PR, we’d have to basically throw it away and write it how we want it to be implemented.

部署结果

Draw.io 自动化中英文字体混排方案
嗨! 这里是 rqdmap 的个人博客, 我正关注 GNU/Linux 桌面系统, Linux 内核 以及一切有趣的计算机技术! 希望我的内容能对你有所帮助~
如果你遇到了任何问题, 包括但不限于: 博客内容说明不清楚或错误; 样式版面混乱; 加密博客访问请求等问题, 请通过邮箱 rqdmap@gmail.com 联系我!
修改日志
  • 2025-02-26 16:33:16 更新: 修改 draw.io 插件加载相关内容
  • 2025-02-25 22:11:56 更新字体处理插件代码
  • 2025-02-25 19:52:58 Draw.io 自动化中英文字体混排方案