前端vue使用onlyoffice控件实现word在线编辑、预览(仅列出前端部分需要做的工作,不包含后端部分)

devtools/2024/10/20 11:32:19/

简介

ONLYOFFICE 文档 是一个开源办公套件,包括文本文档、电子表格、演示文稿和可填写表单的编辑器。
它提供以下功能:
创建、编辑和查看文本文档、电子表格、演示文稿和可填写表单;
与其他队友实时协作处理文件。
基于这个控件,可以实现前端word、excel、pdf等文件在线编辑、预览,可以说非常强大,目前项目中只使用到word编辑预览,但拓展其他文件也非常简单,完善类型传参,更改onlyoffice配置参数中的文件类型即可。
在这里插入图片描述

前端引入onlyoffice的api.js

需要后端服务器上安装配置好 ONLYOFFICE 文档
前端非常简单,引入一行js即可,documentserver即安装配置好 ONLYOFFICE 文档的后端服务器地址,该地址让后端提供,前端引入即可

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

onlyoffice如何使用

1.封装一个onlyoffice页面,在vue-router路由中注册该页面
<template><div id="onlyoffice"></div>
</template>
<script>
word">export word">default {mounted() {word">this.fileDeal();},methods: {fileDeal() {word">let config;// 判断时编辑还是预览word">if (word">this.$route.query.openType === 'edit') {config = word">this.editOfficeConfig();} word">else {config = word">this.viewOfficeConfig();}word">new window.DocsAPI.DocEditor('onlyoffice', config);},editOfficeConfig() {word">let urlView = '';urlView =window.BASE_URL +`/gczd/fill/template/file/content?id=${word">this.$route.query.id}`;word">let callbackUrl = '';callbackUrl =window.BASE_URL +`/gczd/detail/file/callback?fileId=${word">this.$route.query.id}`;word">return {document: {mode: 'edit',fileType: 'docx',key: word">this.$route.query.id,title: '测试wordw文件.docx',url: urlView,permissions: {edit: true,},},documentType: 'word',editorConfig: {user: {name: word">this.$store.state.user.nickName,id: word">this.$store.state.user.userId,},// 隐藏插件菜单customization: {plugins: false,forcesave: true,},lang: 'zh',callbackUrl: callbackUrl,},height: '100%',width: '100%',};},// 纯查看viewOfficeConfig() {word">let urlView = '';urlView =window.BASE_URL +`/gczd/fill/template/file/content?id=${word">this.$route.query.id}`;word">return {document: {mode: 'view',fileType: 'docx',key: word">this.$route.query.id,title: '测试wordw文件.docx',url: urlView,permissions: {edit: false,},},documentType: 'word',editorConfig: {user: {name: word">this.$store.state.user.nickName,id: word">this.$store.state.user.userId,},customization: {plugins: false,},lang: 'zh',},height: '100%',width: '100%',};},},
};
</script><style lang="scss" scoped>
#file-info {position: fixed;top: 0px;z-index: 999;
}
</style>
2.代码解释

new window.DocsAPI.DocEditor是从https://documentserver/web-apps/apps/api/documents/api.js中获取的构造函数,第一个参数是dom的id,onlyoffice会往这个id的dom下生成插入一个iframe,第二个参数是onlyoffice的配置项

配置项文档

很多配置项一目了然是干啥的,直接对照官方文档即可https://api.onlyoffice.com/zh/editors/config/,重点讲解一下urlcallbackUrl

配置项中的url是什么

可以看到前端拼接了一个url的配置项,这个url其实就是后端的一个接口,onlyoffice通过这个接口去打开word等文件。
那么问题来了,这个配置项中的url接口是get还是post?是文件绝对路径还是支持文件流?
答案是:都可以。
可以是一个get请求,即通过绝对路径访问资源,也可以是post请求返回文件流,onlyoffice内部有做处理,传url时不需要指定接口的类型,都可以正常加载,厉害了。
如果打开时出现"下载失败",用postman好好测测这个url接口,能否直接请求通,一般就是这个接口有问题。

配置项中的callbackUrl是什么

callbackUrl就是编辑完文档保存时会调用的一个后端接口,具体信息查看官方文档https://api.onlyoffice.com/zh/editors/callback,后端根据不同status判断文档的状态,编辑完之后会返回后端一个临时缓存文件的url,后端根据这个临时缓存文件url进行文件更新

word_131">支持除了word的其他文件

修改fileType和documentType配置字段即可,后续如果有相关实现也会更新文章

注意点

1.key字段是用来识别文档的唯一文档标识符,官方文档说key字段为应当在编辑或保存后更新,但实际开发中前端没有更新key值,编辑保存也能正常使用。
2.后端原先是在callbackUrl返回的status===2(文档已准备好保存)时做文件更新操作,发现只有等待10s后再次打开才能显示编辑保存后的文档,因为它在编辑文档关闭后 10 秒 触发,后来后端改成了在callbackUrl返回的status===6(正在编辑文档,但保存了当前文档状态)时做了文件更新操作,前端需要加forcesave:true,编辑文档会强制保存,最后效果正常了。
3.后端callbackUrl接口返回值一定要是"{\"error\":0}",表示接口没有错,不然会提示这份文件无法保存。请检查连接设置或联系您的管理员当你点击“OK“按钮,系统将提示您下载文档

wordonlyofficeonlyoffice_138">编辑和预览word,跳转到onlyoffice页面,携带不同参数用于生成onlyoffice的配置即可

   // 编辑,跳转到onlyoffice页面handleEdit() {word">let routeData = word">this.$router.resolve({path: '/onlyoffice',});window.open(routeData.href +'?id=' +word">this.fileId +'&openType=edit','_blank');},// 预览,跳转到onlyoffice页面handleView() {word">let routeData = word">this.$router.resolve({path: '/fileinfo',});window.open(routeData.href +'?id=' +word">this.fileId,'_blank');},

http://www.ppmy.cn/devtools/57450.html

相关文章

振动分析-12-轴承数据库之深度学习一维故障分类CNN-Transformer

Python轴承故障诊断 (15)基于CNN-Transformer的一维故障信号识别模型 1 制作数据集 import pandas as pd filename = "CWRU_1797.csv" df = pd.read_csv(filename)from sklearn.model_selection import train_test_split df_x=df.drop(labels=1024,axis=1)

嵌入式MCU平台汇总

文章目录 1. 单片机&#xff08;MCU&#xff09; 2. 数字信号处理器&#xff08;DSP&#xff09; 3. ARM Cortex 系列 4. 超低功耗MCU 5. 物联网MCU&#xff08;IoT MCU&#xff09; 6. 开源架构MCU&#xff08;RISC-V&#xff09; 7. 可编程逻辑器件&#xff08;FPGA&a…

2024 最新docker仓库镜像,6月,7月

目前下面的docker仓库镜像源还能使用。 vi /etc/docker/daemon.json添加如下配置{"registry-mirrors": ["https://hub.uuuadc.top", "https://docker.anyhub.us.kg", "https://dockerhub.jobcher.com", "https://dockerhub.icu&…

实验四 图像增强—灰度变换之直方图变换

一&#xff0e;实验目的 1&#xff0e;掌握灰度直方图的概念及其计算方法&#xff1b; 2&#xff0e;熟练掌握直方图均衡化计算过程&#xff1b;了解直方图规定化的计算过程&#xff1b; 3&#xff0e;了解色彩直方图的概念和计算方法 二&#xff0e;实验内容&#xff1a; …

C++ 类和对象 构造函数

一 类的6个默认成员函数&#xff1a; 如果一个类中什么成员都没有&#xff0c;简称为空类。 例&#xff1a; #include <iostream> class Empty {// 空类&#xff0c;什么成员都没有 }; 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&a…

vue2(vue-cli3x[vue.config.js])使用cesium新版(1.117.0)配置过程

看来很多解决方法都没有办法&#xff0c;最后终于。呜呜呜呜 这里我用的是vue-cli去搭建的项目的vue2 项目&#xff0c;其实不建议用vue2搭配cesium。因为目前cesium停止了对vue2的版本更新&#xff0c;现在默认安装都是vue3版本&#xff0c;因此需要控制版本&#xff0c;否则…

记一次阿里云服务器java应用无法响应且无法远程连接的问题排查

问题表现 java服务无响应&#xff0c;无法远程链接到服务器。 今天中午12点多&#xff0c;应用直接崩溃。后续进入到服务器&#xff0c;发现java进程都不在了&#xff0c; 排查过程 先安装atop工具 安装、配置并使用atop监控工具 等下次再出现时看相关时间点日志&#xff…

【深入探索】WebKit与WebGL:渲染高性能图形的秘密

标题&#xff1a;【深入探索】WebKit与WebGL&#xff1a;渲染高性能图形的秘密 WebKit是许多流行的网络浏览器的引擎&#xff0c;包括Safari和之前的版本的Chrome。它负责解析HTML、CSS和JavaScript&#xff0c;以及提供许多其他Web功能。WebGL是一种在浏览器中渲染3D图形的AP…