利⽤ONLYOFFICE将在线⽂档编辑器集成到PythonWeb应⽤
程序中Linux中国
导读:通过 API,开发⼈员可以将 ONLYOFFICE 编辑器集成到⽹站和利⽤程序设计语⾔编写的应⽤程序中,并能配置和管理编辑器。
本⽂字数:9635,阅读时长⼤约:12分钟
ONLYOFFICE 是根据 GNU AGPL v.3 许可证条款分发的开源协作办公套件。它包含三个⽤于⽂本⽂档、电⼦表格和演⽰⽂稿的编辑器,并具有以下功能:
◈ 查看,编辑和协同编辑 .docx、.xlsx、.pptx ⽂件。OOXML 作为⼀种核⼼格式,可确保与 Microsoft Word、Excel 和 PowerPoint ⽂件的⾼度兼容性。
◈ 通过内部转换为 OOXML,编辑其他流⾏格式(.odt、.rtf、.txt、.html、.ods、.csv、.odp)。
◈ 熟悉的选项卡式界⾯。
◈ 协作⼯具:两种协同编辑模式(快速和严谨),跟踪更改,评论和集成聊天。
◈ 灵活的访问权限管理:完全访问权限、只读、审阅、表单填写和评论。
◈ 使⽤ API 构建附加组件。
◈ 250 种可⽤语⾔和象形字母表。
通过 API,开发⼈员可以将 ONLYOFFICE 编辑器集成到⽹站和利⽤程序设计语⾔编写的应⽤程序中,并能配置和管理编辑器。
要集成 ONLYOFFICE 编辑器,我们需要⼀个集成应⽤程序来连接编辑器(ONLYOFFICE ⽂档服务器)和服务。要在你的界⾯中使⽤编辑器,因该授予 ONLYOFFICE 以下权限:
◈ 添加并执⾏⾃定义代码。
◈ ⽤于下载和保存⽂件的匿名访问权限。这意味着编辑器仅与服务器端的服务通信,⽽不包括客户端的任何⽤户授权数据(浏览器cookies)。
◈ 在⽤户界⾯添加新按钮(例如,“在 ONLYOFFICE 中打开”、“在 ONLYOFFICE 中编辑”)。
◈ 开启⼀个新页⾯,ONLYOFFICE 可以在其中执⾏脚本以添加编辑器。
◈ 能够指定⽂档服务器连接设置。
中国在线编程流⾏的协作解决⽅案的成功集成案例有很多,如 Nextcloud、ownCloud、Alfresco、Confluence 和 SharePoint,都是通过
ONLYOFFICE 提供的官⽅即⽤型连接器实现的。
实际的集成案例之⼀是 ONLYOFFICE 编辑器与以 C# 编写的开源协作平台的集成。该平台具有⽂档
和项⽬管理、CRM、电⼦邮件聚合器、⽇历、⽤户数据库、博客、论坛、调查、Wiki 和即时通讯程序的功能。
将在线编辑器与 CRM 和项⽬模块集成,你可以:
◈ ⽂档关联到 CRM 时机和容器、项⽬任务和讨论,甚⾄创建⼀个单独的⽂件夹,其中包含与项⽬相关的⽂档、电⼦表格和演⽰⽂稿。◈ 直接在 CRM 或项⽬模块中创建新的⽂档、⼯作表和演⽰⽂稿。
◈ 打开和编辑关联的⽂档,或者下载和删除。
◈ 将联系⼈从 CSV ⽂件批量导⼊到 CRM 中,并将客户数据库导出为 CSV ⽂件。
在“邮件”模块中,你可以关联存储在“⽂档模块”中的⽂件,或者将指向所需⽂档的链接插⼊到邮件正⽂中。当 ONLYOFFICE ⽤户收到带有附件的⽂档的消息时,他们可以:下载附件、在浏览器中查看⽂件、打开⽂件进⾏编辑或将其保存到“⽂档模块”。如上所述,如果格式不同于 OOXML ,则⽂件将⾃动转换为 .docx 、.xlsx 、.pptx ,并且其副本也将以原始格式保存。
在本⽂中,你将看到 ONLYOFFICE 与最流⾏的编程语⾔之⼀的 Python 编写的⽂档管理系统的集成过程。以下步骤将向你展⽰如何创建
所有必要的部分,以使在 DMS((Document Management System)
⽂档管理系统)界⾯内的⽂档中可以进⾏协同⼯作成为可能:查看、编辑、协同编辑、保存⽂件和⽤户访问管理,并可以作为服务的⽰例集成到 Python 应⽤程序中。
1、前置需求⾸先,创建集成过程的关键组件:ONLYOFFICE ⽂档服务器 和⽤ Python 编写的⽂件管理系统。
1.1、ONLYOFFICE ⽂档服务器
要安装 ONLYOFFICE ⽂档服务器,你可以从多个安装选项中进⾏选择:编译 GitHub 上可⽤的源代码,使⽤ .deb  或 .rpm  软件包亦或Docker 镜像。
我们推荐使⽤下⾯这条命令利⽤ Docker 映像安装⽂档服务器和所有必需的依赖。请注意,选择此⽅法,你需要安装最新的 Docker 版本。docker run -itd -p 80:80 onlyoffice/documentserver-de
1.2、利⽤ Python 开发 DMS
如果已经拥有⼀个,请检查它是否满⾜以下条件:
◈ 包含需要打开以查看/编辑的保留⽂件
◈ 允许下载⽂件
对于该应⽤程序,我们将使⽤ Bottle 框架。我们将使⽤以下命令将其安装在⼯作⽬录中:
pip install bottle
然后我们创建应⽤程序代码 main.py  和模板 index.tpl 。
我们将以下代码添加到 main.py  ⽂件中:
from bottle import route, run, template, get, static_file # connecting the framework and the necessary components
@route('/') # setting up routing for requests for /
def index():
return template('index.tpl') # showing template in response to request
run(host="localhost", port=8080) # running the application on port 8080
要读取这些⽂件的名称,我们使⽤ listdir 组件(模块):
from os import listdir
现在让我们为⽂件夹中的所有⽂件名创建⼀个变量:
sample_files = [f for f in listdir('files')]
要在模板中使⽤此变量,我们需要通过 template ⽅法传递它:
def index():
return template('index.tpl', sample_files=sample_files)
这是模板中的这个变量:
% for file in sample_files:
<div>
<span>{{file}}</span>
</div>
% end
我们重新启动应⽤程序以查看页⾯上的⽂件名列表。
使这些⽂件可⽤于所有应⽤程序⽤户的⽅法如下:
@get("/files/<filepath:re:.*\.*>")
def show_sample_files(filepath):
return static_file(filepath, root="files")
2、查看⽂档
所有组件准备就绪后,让我们添加函数以使编辑者可以利⽤应⽤接⼝操作。
第⼀个选项使⽤户可以打开和查看⽂档。连接模板中的⽂档编辑器 API :
<script type="text/javascript" src="editor_url/web-apps/apps/api/documents/api.js"></script> editor_url 是⽂档编辑器的链接接⼝。
打开每个⽂件以供查看的按钮:
<button onclick="view('files/{{file}}')">view</button>
现在我们需要添加带有 id 的 div 标签,打开⽂档编辑器:
<div id="editor"></div>
要打开编辑器,必须调⽤调⽤⼀个函数:
function view(filename) {
if (/docx$/.exec(filename)) {
filetype = "text"
}
if (/xlsx$/.exec(filename)) {
filetype = "spreadsheet"
}
if (/pptx$/.exec(filename)) {
filetype = "presentation",
title: filename
}
new DocsAPI.DocEditor("editor",
{
documentType: filetype,
document: {
url: "host_url" + '/' + filename,
title: filename
},
editorConfig: {mode: 'view'}
});
}
</script>
DocEditor 函数有两个参数:将在其中打开编辑器的元素 id 和带有编辑器设置的 JSON。在此⽰例中,使⽤了以下必需参数:◈documentType 由其格式标识(.docx、.xlsx、.pptx ⽤于相应的⽂本、电⼦表格和演⽰⽂稿)
◈document.url 是你要打开的⽂件链接。
◈de。
我们还可以添加将在编辑器中显⽰的 title。
接下来,我们可以在 Python 应⽤程序中查看⽂档。
3、编辑⽂档
⾸先,添加 “Edit”(编辑)按钮:
<button onclick="edit('files/{{file}}')">edit</button>
然后创建⼀个新功能,打开⽂件进⾏编辑。类似于查看功能。
现在创建 3 个函数:
var editor;
function view(filename) {
if (editor) {
editor.destroyEditor()
}
editor = new DocsAPI.DocEditor("editor",
{
documentType: get_file_type(filename),
document: {
url: "host_url" + '/' + filename,
title: filename
},
editorConfig: {mode: 'view'}
});
}
function edit(filename) {
if (editor) {
editor.destroyEditor()
}
editor = new DocsAPI.DocEditor("editor",
{
documentType: get_file_type(filename),
document: {
url: "host_url" + '/' + filename,
title: filename
}
});
}
function get_file_type(filename) {
if (/docx$/.exec(filename)) {
return "text"
}
if (/xlsx$/.exec(filename)) {
return "spreadsheet"
}
if (/pptx$/.exec(filename)) {
return "presentation"
}
}
</script>
destroyEditor 被调⽤以关闭⼀个打开的编辑器。
你可能会注意到,edit() 函数中缺少 editorConfig 参数,因为默认情况下它的值是:{"mode":"edit"}。
现在,我们拥有了打开⽂档以在 Python 应⽤程序中进⾏协同编辑的所有功能。
4、如何在 Python 应⽤中利⽤ ONLYOFFICE 协同编辑⽂档
通过在编辑器中设置对同⼀⽂档使⽤相同的 document.key 来实现协同编辑。如果没有此键值,则每次打开⽂件时,编辑器都会创建编辑会话。
为每个⽂档设置唯⼀键,以使⽤户连接到同⼀编辑会话时进⾏协同编辑。密钥格式应为以下格式:filename +"_key"。下⼀步是将其添加到当前⽂档的所有配置中。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。