- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章利用 ONLYOFFICE 将在线文档编辑器集成到 Python Web 应用程序中由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
ONLYOFFICE 是根据 GNU AGPL v.3 许可证条款分发的开源协作办公套件。它包含三个用于文本文档、电子表格和演示文稿的编辑器,并具有以下功能:
.docx
、.xlsx
、.pptx
文件。OOXML 作为一种核心格式,可确保与 Microsoft Word、Excel 和 PowerPoint 文件的高度兼容性。.odt
、.rtf
、.txt
、.html
、.ods
、.csv
、.odp
)。通过 API,开发人员可以将 ONLYOFFICE 编辑器集成到网站和利用程序设计语言编写的应用程序中,并能配置和管理编辑器.
要集成 ONLYOFFICE 编辑器,我们需要一个集成应用程序来连接编辑器(ONLYOFFICE 文档服务器)和服务。 要在你的界面中使用编辑器,因该授予 ONLYOFFICE 以下权限:
流行的协作解决方案的成功集成案例有很多,如 Nextcloud、ownCloud、Alfresco、Confluence 和 SharePoint,都是通过 ONLYOFFICE 提供的官方即用型连接器实现的.
实际的集成案例之一是 ONLYOFFICE 编辑器与以 C# 编写的开源协作平台的集成。该平台具有文档和项目管理、CRM、电子邮件聚合器、日历、用户数据库、博客、论坛、调查、Wiki 和即时通讯程序的功能.
将在线编辑器与 CRM 和项目模块集成,你可以:
在“邮件”模块中,你可以关联存储在“文档模块”中的文件,或者将指向所需文档的链接插入到邮件正文中。 当 ONLYOFFICE 用户收到带有附件的文档的消息时,他们可以:下载附件、在浏览器中查看文件、打开文件进行编辑或将其保存到“文档模块”。 如上所述,如果格式不同于 OOXML ,则文件将自动转换为 .docx、.xlsx、.pptx,并且其副本也将以原始格式保存.
在本文中,你将看到 ONLYOFFICE 与最流行的编程语言之一的 Python 编写的文档管理系统的集成过程。 以下步骤将向你展示如何创建所有必要的部分,以使在 DMS(文档管理系统Document Management System)界面内的文档中可以进行协同工作成为可能:查看、编辑、协同编辑、保存文件和用户访问管理,并可以作为服务的示例集成到 Python 应用程序中.
。
首先,创建集成过程的关键组件:ONLYOFFICE 文档服务器 和用 Python 编写的文件管理系统.
要安装 ONLYOFFICE 文档服务器,你可以从多个安装选项中进行选择:编译 GitHub 上可用的源代码,使用 .deb 或 .rpm 软件包亦或 Docker 镜像.
我们推荐使用下面这条命令利用 Docker 映像安装文档服务器和所有必需的依赖。请注意,选择此方法,你需要安装最新的 Docker 版本.
docker run -itd -p 80:80 onlyoffice/documentserver-de
如果已经拥有一个,请检查它是否满足以下条件:
对于该应用程序,我们将使用 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
一旦我们运行该应用程序,点击 http://localhost:8080 就会在浏览器上呈现一个空白页面 。 为了使文档服务器能够创建新文档,添加默认文件并在模板中生成其名称列表,我们应该创建一个文件夹 files 并将3种类型文件(.docx、.xlsx 和 .pptx)放入其中.
要读取这些文件的名称,我们使用 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")
。
所有组件准备就绪后,让我们添加函数以使编辑者可以利用应用接口操作.
第一个选项使用户可以打开和查看文档。连接模板中的文档编辑器 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>
要打开编辑器,必须调用调用一个函数:
<script>
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
是你要打开的文件链接。editorConfig.mode
。我们还可以添加将在编辑器中显示的 title.
接下来,我们可以在 Python 应用程序中查看文档.
。
首先,添加 “Edit”(编辑)按钮:
<button onclick="edit('files/{{file}}')">edit</button>
然后创建一个新功能,打开文件进行编辑。类似于查看功能.
现在创建 3 个函数:
<script>
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 应用程序中进行协同编辑的所有功能.
。
通过在编辑器中设置对同一文档使用相同的 document.key 来实现协同编辑。 如果没有此键值,则每次打开文件时,编辑器都会创建编辑会话.
为每个文档设置唯一键,以使用户连接到同一编辑会话时进行协同编辑。 密钥格式应为以下格式:filename +"_key"。下一步是将其添加到当前文档的所有配置中.
document: {
url: "host_url" + '/' + filepath,
title: filename,
key: filename + '_key'
},
。
每次我们更改并保存文件时,ONLYOFFICE 都会存储其所有版本。 让我们仔细看看它是如何工作的。 关闭编辑器后,文档服务器将构建要保存的文件版本并将请求发送到 callbackUrl 地址。 该请求包含 document.key和指向刚刚构建的文件的链接.
document.key 用于查找文件的旧版本并将其替换为新版本。 由于这里没有任何数据库,因此仅使用 callbackUrl 发送文件名.
在 editorConfig.callbackUrl 的设置中指定 callbackUrl 参数并将其添加到 edit() 方法中:
function edit(filename) {
const filepath = 'files/' + filename;
if (editor) {
editor.destroyEditor()
}
editor = new DocsAPI.DocEditor("editor",
{
documentType: get_file_type(filepath),
document: {
url: "host_url" + '/' + filepath,
title: filename,
key: filename + '_key'
}
,
editorConfig: {
mode: 'edit',
callbackUrl: "host_url" + '/callback' + '&filename=' + filename // add file name as a request parameter
}
});
}
编写一种方法,在获取到 POST 请求发送到 /callback 地址后将保存文件:
@post("/callback") # processing post requests for /callback
def callback():
if request.json['status'] == 2:
file = requests.get(request.json['url']).content
with open('files/' + request.query['filename'], 'wb') as f:
f.write(file)
return "{\"error\":0}"
# status 2 是已生成的文件,当我们关闭编辑器时,新版本的文件将保存到存储器中.
。
如果应用中有用户,并且你需要查看谁在编辑文档,请在编辑器的配置中输入其标识符(id和name).
在界面中添加选择用户的功能:
<select id="user_selector" onchange="pick_user()">
<option value="1" selected="selected">JD</option>
<option value="2">Turk</option>
<option value="3">Elliot</option>
<option value="4">Carla</option>
</select>
如果在标记 <script> 的开头添加对函数 pick_user() 的调用,负责初始化函数自身 id 和 name 变量.
function pick_user() {
const user_selector = document.getElementById("user_selector");
this.current_user_name = user_selector.options[user_selector.selectedIndex].text;
this.current_user_id = user_selector.options[user_selector.selectedIndex].value;
}
使用 editorConfig.user.id 和 editorConfig.user.name 来配置用户设置。将这些参数添加到文件编辑函数中的编辑器配置中.
function edit(filename) {
const filepath = 'files/' + filename;
if (editor) {
editor.destroyEditor()
}
editor = new DocsAPI.DocEditor("editor",
{
documentType: get_file_type(filepath),
document: {
url: "host_url" + '/' + filepath,
title: filename
},
editorConfig: {
mode: 'edit',
callbackUrl: "host_url" + '/callback' + '?filename=' + filename,
user: {
id: this.current_user_id,
name: this.current_user_name
}
}
});
}
使用这种方法,你可以将 ONLYOFFICE 编辑器集成到用 Python 编写的应用程序中,并获得用于在文档上进行协同工作的所有必要工具。有关更多集成示例(Java、Node.js、PHP、Ruby),请参考官方的 API 文档.
原文地址:https://linux.cn/article-13037-1.html 。
最后此篇关于利用 ONLYOFFICE 将在线文档编辑器集成到 Python Web 应用程序中的文章就讲到这里了,如果你想了解更多关于利用 ONLYOFFICE 将在线文档编辑器集成到 Python Web 应用程序中的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我想在 Onlyoffice 中编辑 .xlsx 文档,并在单元格中写入“=TOLETTER(E1)”,其中 TOLETTER 是我定义的函数。 我知道如何在 Excel 中做到这一点(使用 VBA
我正在使用基于 ubuntu 的集成文档服务器 4.4.3,根据我的适用性定制了波纹管代码,我如何根据 key 形成一个 url asc_docs_api.prototype.asc_customCa
我用 docker docker run -i -t -d -p 80:80 onlyoffice/documentserver 和一个提供 ssl 加密的 nginx 负载平衡器运行 onlyoff
我需要将 MSWord 文件加载到嵌入式编辑器 (onlyoffice) 中,对其进行修改,然后作为 MSWord 文件上传到我的服务器。我已经在我的电脑上安装了 onlyoffice。 https:
正在关注 OnlyOffice's help center's instructions导致创建被浏览器声明为无效的安全证书,因为它是自签名的。 目的是在 Docker for NextCloud 上
ONLYOFFICE 是根据 GNU AGPL v.3 许可证条款分发的开源协作办公套件。它包含三个用于文本文档、电子表格和演示文稿的编辑器,并具有以下功能: 查看,编辑和协同
我正在致力于 OnlyOffice 服务器集成以使用自定义插件,该插件用于在文档、电子表格和演示文稿中生成图表和表格。 添加表格时,我无法将格式应用于特定单元格,例如粗体和颜色。 我已经尝试了以下方法
在同一服务器上使用nextcloud 17.0.2和documentserver:5.4.2.46 docker镜像。两种服务都可以使用,但是在浏览器中打开文件会显示“无法保存文档”错误消息。 错误消
我是一名优秀的程序员,十分优秀!