1723 天、1460 次提交!Canvas Editor 1.0 版发布背后的技术攻坚与功能亮点

📅 2026/8/2 5:29:46
1723 天、1460 次提交!Canvas Editor 1.0 版发布背后的技术攻坚与功能亮点
项目背景与发布历程1723 天前提交了 Canvas Editor 的第一行代码。经过 1460 次提交它正式发布了 1.0.0 版本。促成 1.0 的最后一块拼图是一个挂了 1556 天的 issue(#41)。2022 年 4 月 28 日有用户反馈跨页表格在修改列宽的时候不能够同步1556 天、39 条讨论之后这个 issue 随 1.0 一起关闭。Canvas Editor 项目介绍Canvas Editor 是一个基于原生 Canvas 渲染的富文本编辑器不用 contenteditable不用 DOM 排版文档里每一个字、每一条表格线、每一个分页符都是 Canvas API 画出来的。之所以选择这条更难的路线是因为目标场景是电子病历、合同、公文这类严肃文书而这些恰好是 contenteditable 最不稳定的地方。从 2021 年 11 月 12 日第一次提交到 1.0.0 发布历经 1723 天、1460 次提交、139 个版本。表格分页难题为何一个 issue 能挂四年跨页表格渲染的复杂性跨页表格是 Canvas 编辑器里最复杂的渲染路径之一。表格行要在页边界动态拆分拆分点随内容变化拆分后各页列宽必须严格一致单元格里如果有图片、列表、子表格行高要随内容自适应光标、选区、中文输入法都要在分页之后正确响应。方案演进从数据层拆分到渲染层切分第一版思路2024 年前后是数据层拆分把超出当前页的行拆出来物理上形成一个新表格但这个方案存在诸多问题本质是数据被物理切成两段之后所有操作都要为“同步两段状态”付代价。2025 年社区协作期间陆续贡献了一些思路和 PR梳理出一张完整的待办清单。最终方案2026.07是渲染层切分放弃数据层的物理切割只在渲染层切分大量的状态同步类 bug 不再存在。改动规模这次改动新增了约 740 行的 TablePaging 分页计算模块重写约 510 行改动的 TableParticle 渲染逻辑Position 光标系统跨页适配约 500 行改动配套 1600 行单元测试合计 3373 行新增。同时落地了 rowspan 高内容单元格行高自适应、表格宽度自适应内容与页面、跨页列宽同步。最后的重构阶段使用了 AI 编程工具辅助效率提升明显。1.0 版本的新特性留痕模式(#312)类 Word 修订增删改留痕删除内容划删除线悬停显示谁改的、什么时候改的痕迹可见性可控适用于病历质控、合同审阅、公文批改。控件级联与表达式(#671)Select/Radio/Checkbox/文本控件之间建立父子联动 校验支持表达式自动计算文档模板可以自带一部分业务逻辑。排版能力具备多栏布局(#1237)、图片四周环绕(#554签名图文字绕排)、水平 垂直双标尺(#438)、多级有序列表(#440)等排版能力。区域子文档一份文档内划分多个独立编辑区配套完整的 Area API。此外还有控件嵌套(#425)、宏录制回放(#478)、文档对比 API(#1024)等完整清单在 Release Notes。项目数据与团队协作项目在业余时间维护数据全部可查。1723 天里有 1460 次提交发布了 139 个版本处理了 479 个 issue近 3 年有 781 次提交162 次提交发生在深夜 10 点以后245 次在周末GitHub 有 5000 Star845 Fork。1.0 版本不是一个人的结果吸收了多位社区同学 PR 的思路issue 区里的用户也帮项目做了大量测试。1.0 之后的规划API 冻结进入 SemVer1.x 无破坏性变更0.9.x 用户可以直接升级。路线图按优先级包括大文本渲染性能、渲染层独立、多光标选区、协作编辑能力哪个呼声高先做哪个。项目会一直 MIT 开源用户可以通过 Star、转发支持也可量力赞助。