如何使用 ONLY OFFICE 在你的 WEB 中集成 OFFICE 文档编辑功能

sxkk20081年前知识分享81

前言

在日常 WEB 开发过程中常常有附件管理的需求,而这些附件大部分是 OFFICE 文件,而对于这些办公文档,用户需要下载下来编辑,编辑完成后上传,而对于用户的改动,开发者还需要实现历史版本管理功能。若能够实现 Office 文档在线编辑功能,这将大大提高用户的协作效率,而这个功能对于普通开发者来说非常困难的,今天我将介绍一款开源的办公套件 ONLYOFFICE,它可以帮你在 WEB 中轻松集成 OFFICE 文档编辑功能。

ONLY OFFICE 介绍

ONLYOFFICE 是一个免费开源的协作办公套件,适用于 Windows、Linux 和 macOS。该套件包括 3 个主要微软 Office 的替代品(Word、Excel、PowerPoint)。也提供表单(Forms)生成器,PDF 查看器和文件转换器。

对于个人用户,我们完全可以使用 ONLYOFFICE 代替 Microsoft Office,它与 Microsoft Office 高度兼容,并且免费无广告,你可以在 ONLYOFFICE 官网上下载桌面版本或者手机版本。

ONLYOFFICE 除了能够代替 Microsoft Office,还拥有云端存储,多人实时编辑共享的功能。

在侧边底部,选择链接到云,通过简单的注册,就可以实现文档云端同步

在这个 Tab 下新建的文档便会自动保存到云,只要登录相同的账号,我们就可以在多个设备之间共享文档。

云端的文档还可以协同编辑,我们只需要点击右上角的共享,添加一个链接,将这个链接发送给你的同事,你们就可以协同编辑。

协同者只需要浏览器,就可以编辑,我们再也不用为了软件版本不兼容而烦恼,这大大提高了文档协同编辑的效率。

能够使用浏览器编辑,这一功能这得益于 ONLY OFFICE 是使用 HTML5 的 canvas 和 JavaScript 实现的。

ONLY OFFICE 实现原理

想要在你的 web 中集成 ONLYOFFICE,我们得先要知道它的原理,下图来自于 ONLYOFFICE 官方文档

  1. 用户使用浏览器访问打开文档进行查看或者编辑;
  2. 通过 url 上的 fileName 参数,使用 JavaScript API 将文档唯一标识符(key)以及文档发送到文档编辑器(editor)。
  3. 文档编辑器(editor)向文档编辑服务(server)发送一个打开文档的请求。
  4. 文档编辑服务从文档存储服务(document storage service)下载相对应的文档,并将文档转换为 Office Open XML 格式。
  5. 准备就绪后,文档编辑服务(server)会将转化后的文档传输到基于浏览器的文档编辑器(editor)。
  6. 文档编辑器提供编辑或者查看权限,对文档进行相应操作,执行保存。

因此实现这一功能需要有 2 部分组成

  • 文档编辑器(document editor)
  • 文档服务器(document server)

前端实现

对于前端来说实现很简单,只需要在 html 设置一个容器,并且引入文档编辑器的 api

<div id="placeholder">div>
<script
  type="text/javascript"
  src="https://documentserver/web-apps/apps/api/documents/api.js"
>script>

其中documentserver 是安装了 ONLYOFFICE Document server 的服务器的名称。

new DocsAPI.DocEditor('placeholder', {
  document: {
    fileType: 'docx',
    key: 'Khirz6zTPdfd7',
    title: 'Example Document Title.docx',
    url: 'https://example.com/url-to-example-document.docx',
  },
  documentType: 'word',
})

JavaScript 部分只需要通过 DocsAPI new 一个 DocEditor 即可。

其中 example.com 是安装文档管理器和文档存储服务的服务器的名称。

安装 OnlyOffice

因此关键部分还是在 server 部分,为此我们要准备一台服务器, 我这里选择使用 CentOS、2 核 2GB 的服务器,其他 Linux 版本的安装,大家可以参考官网

安装方式我选择使用 Docker

前置条件:服务器可连接外网

安装 Docker

安装 Docker 我选择使用阿里云镜像安装,登录服务器后,在命令行中输入以下命令

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

等待几分钟后就可以安装成功。

我们可以使用 docker -v, 查看 docker 的版本

安装 OnlyOffice 社区版

在命令行中输入以下命令

sudo docker run -i -t -d -p 80:80 --restart=always onlyoffice/documentserver
  • -p 80:80 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。

  • --restart=always 容器自动重启

  • onlyoffice/documentserver 镜像名称

官方还建议将数据存放在 Docker 容器之外,因为这样可以新版本发布后,轻松更新 ONLYOFFICE Docs 而不会造成丢失数据。

因此需要使用下面命令

sudo docker run -i -t -d -p 80:80 --restart=always \
    -v /app/onlyoffice/DocumentServer/logs:/var/log/onlyoffice  \
    -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data  \
    -v /app/onlyoffice/DocumentServer/lib:/var/lib/onlyoffice \
    -v /app/onlyoffice/DocumentServer/db:/var/lib/postgresql  onlyoffice/documentserver

数据卷说明

  • /var/log/onlyoffice 对于 ONLYOFFICE 文档日志
  • /var/www/onlyoffice/Data 证书
  • /var/lib/onlyoffice 用于文件缓存
  • /var/lib/postgresql 对于数据库

首次执行,镜像需要下载,需要等待几分钟。

安装成功后可以使用 docker ps 查看运行状态

接下来我们, 就可以使用 ip 访问 onlyoffice 的服务页面了。

onlyoffice 很贴心地在欢迎页面上添加了 example 测试示例,按页面上的命令执行,启动测试示例,点击Go To Example, 就可以访问文档编辑器示例了

点击左侧,便可以创建在线 Word、Excel、PowerPoint 等

在 Nodejs 中集成

接下来,我们需要在自己的程序中集成 onlyoffice。

ONLYOFFICE Docs 旨在无缝适配您的网络应用程序,无论您的应用程序是用什么语言编写的,ONLYOFFICE 为流行的前端框架提供了在线编辑器集成和示例

我们可以在API 官网下载 Nodejs Example

下载完成完成后, 进入程序目录,并且安装 npm 包

cd  Node.js Example
yarn install

接下来我们需要修改文档服务器地址 config/default.json

"storageFolder": "./files"
"storagePath": "/files"
"siteUrl": "https://documentserver/"

documentserver 就是刚刚安装的 IP 地址。 storageFolder 和 storagePath 我们可以根据实际修改。

运行程序

yarn satrt

然后我们使用浏览器访问 http://localhost:3000

进入后的界面同 Docker Example 一致,但是我们创建一个新的文档,界面会提示以下错误。

The document security token is not correctly formed.

原因是从 7.2 版本开始, JWT 验证默认开启

如果在安装期间未添加自定义密钥,则会自动生成随机密钥。

查看秘钥

我们可以根据文档服务器欢迎页面上的提示,执行查看秘钥。

获得的秘钥修改到 config/default.json 中。

修复完成后,我们再次创建文档,访问http://localhost:3000/editor?fileName=new.docx

此时页面会有以下错误提示Download failed.

Download failed.

原因是,我们的 document server 安装在 docker 中。对于 docker 服务来说, localhost:3000 是不存在这个文件的。

因此我们需要通过本机 IP 访问。 真实生产环境上,我们会分配一个域名。使用 IP 或者域名访问就可以成功了。最后附上一张成功的截图。

小结

本文我们没有介绍 Nodejs 文件读写的实现,其大部分代码都在 app.js 中,而是主要介绍了 ONLYOFFICE 部署和对接过程。

  1. 使用开源软件 ONLYOFFICE 代替 Microsoft Office
  2. 使用 docker 部署了 ONLYOFFICE 社区版 Document Server
  3. 使用官方的 Nodejs Demo 对接 Document Server

当然本文只是对 ONLYOFFICE 做了一个简单的介绍,更多功能请大家参考 ONLYOFFICE 官网

以上就是本文全部内容,如果对你有帮助,可以随手点个赞,这对我真的很重要,希望这篇文章对大家有所帮助,也可以参考我往期的文章或者在评论区交流你的想法和心得,欢迎一起探索前端。

相关文章

AI技术广泛应用-从医疗到金融的探索与挑战

AI技术广泛应用-从医疗到金融的探索与挑战

  近年来,随着技术的不断进步,人工智能(AI)逐渐实现了从科幻梦想到现实应用的转变。尤其是在医疗、金融等领域,AI技术正在广泛应用,为人类创造了更多的可持续发展和公平共享的...

我们使用相同步骤,建立标签表,并且添加数据到表中。

建立表关联

题目表和标签表是多对一的关系,一个标签下有多道题目,一个题目只有一个标签

Notion 建立表关联

在题目表添加属性tag,选择 Relation,让后选择“标签”表

Notion 建立表关联

这样题目表和标签表就建立了关系

创建 Notion 集成

在使用 Notion API 之前,我们需要创建一个 Notion 的应用集成,获取 API Key。 打开 https://www.notion.so/my-integrations,打开 Notion 集成页面,登录自己的账号,点击 New integration 创建一个新的应用:

创建 Notion 集成

名称可以自己起,上传一个 LOGO,然后关联一个 Notion 的工作空间:

创建 Notion 集成,填写信息

点击提交,这个应用就创建好了,在跳转的新页面里,把Internal Integration Token复制下来,不要泄露,否则拿到这个 key 的人都能操作你的笔记啦。

复制 Notion Token

使用 Notion 数据库进行 Next.js 应用全栈开发

文章为稀土掘金技术社区首发签约文章,14 天内禁止转载,14 天后未获授权禁止转载,侵权必究!前言在上一篇中,我们使用了 strapi 和 Next.js 开发了一个简易微博,但是我没有部署上线,因为...

人脸识别:探寻其在人工智能领域地位和影响力

人脸识别:探寻其在人工智能领域地位和影响力

  人工智能的不断进步和创新已经取得了在各个领域非凡的成就,其中之一便是人脸识别技术。然而,人脸识别是否真正属于人工智能范畴一直备受关注和争议。以人脸识别是人工智能,探讨其在...

AI技术的发展与应用-探索人工智能的新未来

AI技术的发展与应用-探索人工智能的新未来

   人工智能(AI)在20世纪50年代开始被提出,如今在技术和应用上取得了巨大的进步,得到了各行各业的应用。随着数据和算力的爆发式增长,我们正在看到AI技术的未来发展将更加...

AI绘画生成器:探究人工智能发展中的艺术生产力

AI绘画生成器:探究人工智能发展中的艺术生产力

  随着人工智能技术的不断发展,各行业开始将其与实际应用相结合,比如在艺术创作领域中,越来越多的人开始尝试使用AI绘画生成器进行创作。这一工具可以让普通用户轻松创作出具有艺术...

AI绘画:让想象变为现实

AI绘画:让想象变为现实

  随着人工智能技术的发展,AI绘画成为越来越热门的领域。AI绘画不仅让人们可以更加轻松地绘画,还能生成以前从未有过的创新艺术。本文将介绍AI绘画的背景、应用和前景。  最初...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。