ranuts/document 浏览器文档编辑器
基于 OnlyOffice 与 WebAssembly 的纯前端 Office 文档编辑器,可在浏览器中直接打开、编辑 DOCX、XLSX、PPTX、PDF 等格式,文档不上传服务器,支持离线与 PWA。
爱鲜报评分
0 人评分
2k
星数
是
中文
TypeScript
主语言
是
活跃
6
贡献者
人工分析
EDITORIAL推荐理由
它把 OnlyOffice 引擎和 WASM 转换器完整搬到浏览器端,文档全程不离开本机,对隐私敏感场景非常友好。支持真实编辑而非只读预览,还能通过 iframe 与 postMessage 嵌入自有系统,并提供 WebMCP 工具供浏览器 AI 智能体调用。静态构建即可部署,自托管成本低,适合做内部文档处理或本地优先办公工具。
适用场景
- 企业内部文档在线编辑与预览
- 隐私敏感场景下的本地文档处理
- 将 Office 编辑能力嵌入自有 Web 系统
- 离线办公与 PWA 场景
- 浏览器 AI 智能体读取/转换文档
优点
- 文档不上传服务器,全部在本地浏览器完成转换与编辑
- 支持 DOCX/XLSX/PPTX/PDF 等真实编辑,而非仅预览
- 可安装为 PWA,首次访问后支持离线使用
- 提供 iframe + postMessage 完整嵌入 API,便于集成
- 静态构建,Docker 或任意 Web 服务器即可自托管
- 内置 WebMCP 工具,方便浏览器端 AI 智能体调用
缺点
- 依赖 OnlyOffice 与 WASM,首次加载体积较大
- 自动保存副本存于浏览器 IndexedDB,7 天后自动清除,不能当备份
- 写回原文件等能力依赖 Chromium 浏览器支持
- 采用 AGPL-3.0 许可证,商用与二次分发需注意合规
项目简介
ranuts/document 是一个运行在浏览器里的 Office 文档编辑器。它把 OnlyOffice 引擎和 WebAssembly 转换器搬到访问者自己的设备上运行,因此文档不会被上传到任何服务器,也不需要注册账号。
官方在线体验地址:https://edit.chaxus.com/
核心特性
- 数据不出本机:所有转换、编辑、导出都在浏览器标签页内完成。
- 真实编辑而非预览:支持 DOCX、XLSX、PPTX、CSV,以及 ODF、RTF、TXT 和旧版二进制格式;PDF 可打开并批注。
- 保存回原文件:在 Chromium 中选定一次文件后,后续保存直接写回该文件;其他浏览器则按下载方式处理。
- 关闭标签页不丢内容:编辑内容自动保存到浏览器本地,保留 7 天,可随时删除。
- 离线可用:可安装为 PWA,首次访问后无需网络。
- 多语言:页面、应用界面与编辑器均支持多语言切换。
- 可嵌入:提供完整的 postMessage API,便于通过 iframe 集成。
- 面向智能体:暴露 WebMCP 工具,浏览器 AI 智能体可直接打开、转换和读取文档。
支持格式
| 类型 | 可编辑 | 也可打开 |
|---|---|---|
| 文档 | .docx |
.doc .odt .rtf .txt |
| 表格 | .xlsx .csv |
.xls .ods |
| 演示 | .pptx |
.ppt .odp |
| 批注、填写、导出 | .pdf |
以上格式均可导出为 PDF。CSV 在打开时会自动识别 UTF-8、GB18030、Latin-1 等编码。
快速开始
直接使用在线站点即可,无需安装。
使用 Docker 自托管:
docker run -d --name document -p 8080:80 ghcr.io/ranuts/document:latest
从源码运行:
git clone https://github.com/ranuts/document.git
cd document
pnpm install
pnpm run dev
路由与 URL 参数
主要路由包括:
/:落地页,未打开文档前不加载编辑器包。/editor:编辑器。/history:查看当前浏览器保存的文档。/help、/changelog:由content/下的 Markdown 生成。
/editor 常用参数:
src=<url>:从 URL 打开文档(需允许 CORS)。new=docx:新建空白文档(docx、xlsx、pptx)。saved=<id>:重新打开本浏览器保存过的文档。readonly=1:只读模式,禁用编辑与导出。embed=1:嵌入模式,由宿主页面通过 postMessage 驱动。locale=zh-CN:界面语言。
数据与隐私
文档不会被发送到任何地方。浏览器本地会保存两类数据,且都可自行删除:
- 编辑副本:编辑过程中保存到 IndexedDB,防止刷新、关闭标签页或崩溃导致丢失,重新打开编辑器时可恢复。注意它不是备份,重要内容请及时导出。
- 7 天后自动清除:每份文档在最后一次编辑或打开 7 天后自动删除。
/history 页面会列出已保存内容,支持逐条删除、全部删除以及关闭自动保存。在共用电脑上建议访问该页面清理。
嵌入到自有系统
通过 iframe 嵌入编辑器,并用 postMessage 驱动,常见分工是:宿主系统负责鉴权与存储,iframe 负责编辑。
<iframe
id="documentEditor"
src="https://your-deployment/editor?embed=1"
style="width: 100%; height: 720px; border: 0"
></iframe>
// 打开文档
iframe.contentWindow.postMessage(
{ id: '1', type: 'document:open-url', payload: { url: 'https://example.com/doc.xlsx' } },
'https://your-deployment',
);
// 监听结果
window.addEventListener('message', (e) => {
if (e.data?.type === 'document:opened') console.log('可以开始编辑');
if (e.data?.type === 'document:saved') uploadFile(e.data.payload.file);
});
嵌入模式下不保留本地历史,文档归属宿主页面。完整消息类型、来源白名单、只读模式与保存流程可参考仓库中的嵌入 API 文档。
浏览器 AI 智能体(WebMCP)
在支持的浏览器中,页面会注册可供智能体直接调用的工具,例如 open_document_url、open_document_buffer、create_document、save_document、get_document_text、set_readonly、get_document_state。文档依然不离开设备,由浏览器自行获取与转换;不支持该 API 的环境下此功能为空操作。
部署
项目为纯静态构建,无运行时、无数据库:
pnpm build # 输出到 dist/
将 dist/ 上传到 Cloudflare Pages、Nginx、Vercel、Netlify 等任意静态托管即可。
适用与注意事项
- 适合对隐私要求高、希望文档不落第三方的在线编辑场景。
- 首次加载资源较大,需评估网络与设备性能。
- 本地自动保存副本会过期,重要文档请自行导出留存。
- 项目采用 AGPL-3.0 许可证,商用与二次分发前请确认合规要求。
评论
- 暂无评论,来写第一条吧。