Skip to content

Latest commit

 

History

History
186 lines (131 loc) · 8.47 KB

File metadata and controls

186 lines (131 loc) · 8.47 KB

OnlyOffice Web Comp

📖 English | 中文

🌐 在线演示: https://onlyoffice-web-comp.vercel.app/

基于 OnlyOffice 静态 SDK 的浏览器端文档处理方案:在客户端完成 Word / Excel / PowerPoint 的查看、编辑与转换,无需 Document Server

本仓库包含两部分:

部分 路径 说明
组件库 src/components/onlyoffice-web-comp/ 可复用的 Web 端编辑器封装 + Markdown 文档源
演示站点 src/app/ + src/features/ Next.js 主页、文档站、在线示例

项目定位

这个项目目前不是一个 npm install 后直接引入的包,而是一个浏览器端 OnlyOffice 集成模板:可复用的运行时代码在 src/components/onlyoffice-web-comp/,仓库同时包含这套运行时需要的 OnlyOffice SDK / x2t 静态资源。

如果你希望在自己的 Web 项目里接入 OnlyOffice,并且不想部署 OnlyOffice Document Server,可以把这里当作一套可复制的工程实现。演示站点也是项目的一部分,目的是让你直接参考一个已经跑通的编辑器生命周期,而不是只看零散 API 片段。

怎么集成进你的项目

实际接入可以按这个路径做:

  1. 复制 src/components/onlyoffice-web-comp/ 到你的项目源码目录。
  2. 复制 public/packages/onlyoffice/ 静态资源到你的项目 public/packages/onlyoffice/ 目录。
  3. 参考 src/features/demo/office-preview-page.tsx 构造自己的界面:准备编辑器容器,维护一个 OnlyOfficeManager 实例,按需调用 openDocumentdownloadExporttoggleReadOnly,并在页面卸载时销毁 manager。需要从父页面调用编辑器 Automation API 时,可通过 createConnector() 获取 Developer Edition Connector。

静态资源读取统一在 src/components/onlyoffice-web-comp/const/index.ts 配置。本地与 CDN 模式默认均读取 Developer Edition Docker 导出的 9.4 SDK:/packages/onlyoffice/9.4.0-develop;如 CDN 目录不同,可通过 onlyofficeVersion 覆盖。

核心优势

  • 数据留在本地:文档处理在浏览器内完成
  • 格式兼容:Word、Excel、PowerPoint、CSV、DOCM 等
  • 零后端:托管静态 SDK 即可使用
  • 工程化 API:只读/编辑、主题/语言、多实例容器隔离
  • 连接器支持:通过 Developer Edition Connector 从父页面调用编辑器 Automation API,本地和 CDN 模式均可用

快速体验

  1. 访问 在线演示 或本地启动:
git clone <repository-url>
cd onlyoffice-web-comp
pnpm install
pnpm dev
# http://localhost:3001
  1. 打开路由:
路由 说明
/ 产品主页
/docs 组件库文档(直接渲染 Markdown)
/docs/demos/single 单实例在线示例
/docs/demos/multi 多实例 Tab 在线示例
  1. 上传本地文件 → 编辑 → 导出

旧路由 /examples 会重定向到单实例示例;/multi 会重定向到多实例示例。

组件库文档

API 与接入说明不在本 README 重复,请阅读组件库文档:

文档 内容
快速开始 初始化与容器挂载
核心API OnlyOfficeManager、多实例
事件系统 EventBus
完整示例 React 集成模式
API参考 常量与类型
注意事项与格式 前置条件与格式
字体配置 自定义字体注册
批注修订 批注、修订
单实例示例 单实例 Demo 与源码说明
多实例示例 Tab 多实例完整源码
import { OnlyOfficeManager, FILE_TYPE, ONLYOFFICE_ID } from "@/components/onlyoffice-web-comp";

项目结构

onlyoffice-web-comp/
├── src/
│   ├── app/                              # Next.js 路由
│   │   ├── page.tsx                      # 主页
│   │   ├── docs/                         # 文档站
│   │   │   ├── page.tsx                  # /docs(概述 md)
│   │   │   ├── [slug]/page.tsx           # /docs/*
│   │   │   └── demos/                    # /docs/demos/single|multi
│   │   └── examples/                     # → 重定向至单实例示例
│   ├── features/
│   │   ├── docs/                         # 文档壳、Markdown 渲染、site-map
│   │   ├── demo/                         # 在线演示组件
│   │   ├── marketing/                    # 着陆页
│   │   └── shell/                        # 站点 Header / Footer / Layout
│   └── components/
│       └── onlyoffice-web-comp/          # SDK 封装 + docs/*.md 文档源
├── public/                               # OnlyOffice SDK 静态资源
└── ...

文档页直接读取 src/components/onlyoffice-web-comp/docs/ 下的 Markdown;示例 Tab 内嵌 src/features/demo/ 的可交互编辑器。

技术栈

  • OnlyOffice SDK:文档编辑核心
  • x2t + WebAssembly:格式转换
  • Next.js 15 + React 19:演示应用

部署

pnpm install
pnpm build

可部署至 Vercel 或任意静态托管。演示地址:https://onlyoffice-web-comp.vercel.app/

将 SDK 静态资源部署到 Cloudflare Pages CDN

OnlyOffice SDK 资源可以和应用分开托管。把 public/packages 的内容部署到 Cloudflare Pages,然后在创建编辑器前注册 Pages 地址即可。

# 首次创建项目
npx wrangler pages project create onlyoffice-packages

# 将 public/packages 作为 CDN 根目录上传
npx wrangler pages deploy public/packages \
  --project-name onlyoffice-packages \
  --commit-dirty=true

部署后资源地址应该类似:

https://<project>.pages.dev/onlyoffice/9.4.0-develop/web-apps/apps/api/documents/api.js

在运行时把 Pages origin 注册为静态资源根地址:

import { OnlyOfficeManager } from "@/components/onlyoffice-web-comp";

OnlyOfficeManager.registerStaticResource({
  cdnOrigin: "https://<project>.pages.dev",
});

cdnOrigin 对应上传后的 public/packages 根目录,不需要再追加 /packages。在 src/components/onlyoffice-web-comp/const/index.ts 中修改 buildStaticResourcecdnOrigin 逻辑即可固定资源来源。Cloudflare Pages Direct Upload 支持用 Wrangler 上传目录;由于 SDK 文件数量较多,Dashboard 拖拽上传不太适合本仓库。

字体配置

自定义字体通过 __custom_font_registry__ 注册,配合 ttf-to-catalog-font.mjs 生成 OnlyOffice catalog 线格式。完整步骤见组件库文档 字体配置

简要流程:

  1. 运行 ttf-to-catalog-font.mjs --id <id> --verify 生成 fonts/{id} catalog 文件
  2. AllFonts.jswindow["__custom_font_registry__"] 中注册 id 与别名
  3. 确保别名覆盖文档内实际使用的字体名

请确保所用字体文件符合相关许可协议。

相关资源

参与贡献

欢迎提交 Issue 和 Pull Request。

开源许可

详见 LICENSE