惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
博客园_首页
罗磊的独立博客
云风的 BLOG
云风的 BLOG
J
Java Code Geeks
Last Week in AI
Last Week in AI
D
DataBreaches.Net
Jina AI
Jina AI
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
Apple Machine Learning Research
Apple Machine Learning Research
V
V2EX
D
Docker
MongoDB | Blog
MongoDB | Blog
B
Blog RSS Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Engineering at Meta
Engineering at Meta
The Cloudflare Blog
博客园 - 三生石上(FineUI控件)
有赞技术团队
有赞技术团队
人人都是产品经理
人人都是产品经理
H
Help Net Security
T
The Blog of Author Tim Ferriss

动物的光合作用

使用 Peer Relay 提高 Tailscale 的速度 内网穿透下 NAS 使用 DNS 轮循作为负载均衡 <众安车保>上当指南 - 动物的光合作用 JS 中的 Shebang/Hashbang - 动物的光合作用 我的自建 NAS - 动物的光合作用 React 组件中复用代码的方式 - 动物的光合作用 负载均衡下的前端资源更新策略 - 动物的光合作用 CSS 基于视区的长度单位 - 动物的光合作用 我用 Docker 部署的一些服务 - 动物的光合作用 CSS 书写模式和逻辑属性 - 动物的光合作用 大量活动页面持续性维护的解决方案 - 动物的光合作用 Mac mini 搭建外网可访问的简易 NAS - 动物的光合作用 React Fragment 添加事件监听? - 动物的光合作用 如何在 React 解决竞态条件 - 动物的光合作用 使用脚本备份 Github 仓库 - 动物的光合作用 高性能 React 应用的几个小技巧 - 动物的光合作用 复习 DOM 事件 - 动物的光合作用 我的博客架构变迁之路 - 动物的光合作用 浏览器和 JavaScript 的一些新特性 - 动物的光合作用 useCallback 的误区 - 动物的光合作用 在 React 中使用事件分离状态 - 动物的光合作用 如何处理 RESTFUL 数据异常导致的前端错误 - 动物的光合作用 基于 Node.js 的 WebFont 解决方案
Excalidraw 支持自定义字体 - 动物的光合作用
mebtte · 2023-07-24 · via 动物的光合作用

Excalidraw 是一款开源的画板工具, 可以用来绘制带有手写风格的图. 虽然 Excalidraw 本身支持多语言, 但是其手写风格的字体只支持英文, 其他语言会回退到普通字体.

非英语会回退到普通字体
非英语会回退到普通字体

因为 Excalidraw 是开源的, 为了能让其手写风格的字体支持中文, 当时的想法是 fork 之后用支持的中文的手写字体替换原来的, 然后部署在自己的域名下. 这个修改非常简单, 但是带来了几个问题:

  • 上游修改需要手动同步到自己的仓库, 自动化拉取无法解决冲突问题
  • 一些依赖网络的功能比如实时协作, 因为非官方 Excalidraw 的域名导致无法正常工作

偶然想起页面调试 API 用到过请求拦截工具, 如果拦截并改写手写字体的请求, 这样的话就可以实现支持任意字体, 不仅仅是中文手写字体.

我使用的工具是 Requestly, 登录账号的情况下可以多设备同步数据, 只要在一台设备编辑配置就能同步到其他设备.

Requestly
Requestly

首先我们先下载一份喜欢的字体, 需要浏览器支持的格式(ttf/otf/woff/…), 可以在 Can I use 查阅字体格式在相关浏览器的兼容性.

然后将字体上传到任意静态资源服务器取得可以访问的 URL, 例如 https://example.com/favorite.ttf. 如果没有相关的静态资源服务可以使用 GitHub, 将字体放入 git 仓库然后推送到 GitHub, 就能使用 GitHub 的静态资源服务, 以 Excalidraw 本身为例, Virgil 字体直接访问的链接是 https://github.com/excalidraw/excalidraw/raw/master/public/Virgil.woff2.

使用 GitHub 的静态资源服务
使用 GitHub 的静态资源服务

以 Chrome 为例, 在 DevTools 找到手写字体的请求, 通过预览可以判断手写字体的 URL 是 https://excalidraw.com/Virgil.woff2.

预览中的手写字体
预览中的手写字体

在 Requestly 新建 Redirect Request, 将 https://excalidraw.com/Virgil.woff2 重定向到你的字体链接, 保存后打开该规则的开关. 回到 Excalidraw 的页面, 刷新后应该就能看到你定义的字体.

字体重定向
字体重定向
修改字体后的 Excalidraw
修改字体后的 Excalidraw

刷新后字体如果没有生效, 有可能是缓存导致的, 因为 Excalidraw 使用 Service Worker 对资源进行了缓存, 使用 DevTools 删除缓存后重新刷新, 就能够正确显示重定向后的字体了.

清除缓存
清除缓存

本文最早发表于 https://github.com/mebtte/excalidraw

使用 Discussions 讨论 Github 上编辑 分享到 X