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

简介

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>
export default {mounted() {this.fileDeal();},methods: {fileDeal() {let config;// 判断时编辑还是预览if (this.$route.query.openType === 'edit') {config = this.editOfficeConfig();} else {config = this.viewOfficeConfig();}new window.DocsAPI.DocEditor('onlyoffice', config);},editOfficeConfig() {let urlView = '';urlView =window.BASE_URL +`/gczd/fill/template/file/content?id=${this.$route.query.id}`;let callbackUrl = '';callbackUrl =window.BASE_URL +`/gczd/detail/file/callback?fileId=${this.$route.query.id}`;return {document: {mode: 'edit',fileType: 'docx',key: this.$route.query.id,title: '测试wordw文件.docx',url: urlView,permissions: {edit: true,},},documentType: 'word',editorConfig: {user: {name: this.$store.state.user.nickName,id: this.$store.state.user.userId,},// 隐藏插件菜单customization: {plugins: false,},lang: 'zh',callbackUrl: callbackUrl,},height: '100%',width: '100%',};},// 纯查看viewOfficeConfig() {let urlView = '';urlView =window.BASE_URL +`/gczd/fill/template/file/content?id=${this.$route.query.id}`;return {document: {mode: 'view',fileType: 'docx',key: this.$route.query.id,title: '测试wordw文件.docx',url: urlView,permissions: {edit: false,},},documentType: 'word',editorConfig: {user: {name: this.$store.state.user.nickName,id: 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的其他文件

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

注意点

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/37369.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过window.scrollTo实现丝滑跳转到页面的某个位置

原理 通过计算对应id的组件距离页面顶部的距离&#xff0c;来使用window.scrollTo丝滑跳转到该位置 代码如下&#xff1a; <div id"test1"></div> <div id"test2"></div> <div id"test3"></div><butt…

PySide(PyQt),event.pos() 和 event.position()的区别

在 PySide6 中&#xff0c;event.pos() 和 event.position() 在处理鼠标事件时有所不同&#xff1a; event.pos(): event.pos() 返回的是鼠标指针相对于接收事件的小部件&#xff08;widget&#xff09;的局部坐标。这意味着它返回的是鼠标在接收事件的窗口或部件内的坐标位置。…

基于Java毕业生生活用品出售网站的设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

【算能全国产AI盒子】基于BM1688CV186AH+FPGA智能物联工作站,支持差异化泛AI视觉产品定制

在数据呈现指数级增长的今天&#xff0c;越来越多的领域和细分场景对实时、高效的数据处理和分析的需求日益增长&#xff0c;对智能算力的需求也不断增强。为应对新的市场趋势&#xff0c;凭借自身的硬件研发优势&#xff0c;携手算能相继推出了基于BM1684的边缘计算盒子&#…

Spring Boot中的日志管理最佳实践

Spring Boot中的日志管理最佳实践 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨一下在Spring Boot应用中如何有效管理日志&#xff0c;确保系统…

C4D快捷键整合所有快捷键

C4D快捷键整合所有快捷键 快捷键常用快捷键主菜单建模材质管理器物体管理器图片浏览器结构管理器浏览器编辑器动画模块属性管理器Body Paint 3D时间线视窗Mocca 小技巧 快捷键 常用快捷键 作用快捷键备注裁切时间线ALT【 】最大化显示所限物体0最大化显示场景所有物体H物体属…

解读防水防腐保温二级资质:为何社保需缴纳X月以上?

解读防水防腐保温二级资质中关于社保需缴纳X月以上的要求&#xff0c;可以从以下几个方面进行&#xff1a; 一、社保缴纳的重要性 稳定雇佣关系的体现&#xff1a;社保缴纳是企业与员工之间稳定雇佣关系的直接体现&#xff0c;它展示了企业对员工的长期承诺和责任感。员工权益…

esp32使用TFT_eSPI库,系统双闪,指针溢出的问题

问题描述 使用TFT_eSPI烧录进esp32c3之后&#xff0c;开发板灯双闪&#xff0c;串口输出指针越界的错误。 问题原因 不小心点到了更新&#xff0c;把esp32的库给更新了。 问题解决 把esp32的库改到2.0.9版本。

Spring Boot与Redis集成的最佳实践

Spring Boot与Redis集成的最佳实践 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨如何在Spring Boot应用中实现与Redis的集成&#xff0c;以及一…

c++ std::forward 笔记

请您查看如下代码块&#xff0c;这样方便复制过去直接运行 int x 5; q_forward w1(x); // 使用左值构造 q_forward w2(10); // 使用右值构造 w2.wrapper_func(); /*** std::forward<>() 向前的&#xff0c;前进的&#xff1b;* 通常与模板和右值引用&#xff08;r…

MySQL3(多表联查 子查询 流程控制函数,语句 Sql 执行顺序 学生选课表练习)

目录 一、多表联查 1. 等值查询和非等值查询 等值查询 --- 主外键相等 ​编辑非等值查询 2. 连接查询 ​编辑 内连接 ​编辑 左外连接 ​编辑 右外连接 3. UNION 二、子查询 1. where 型子查询&#xff1a; 2. from型子查询: 3. exists型子查询: 4. any, some…

如何使用PHP Curl类库编写高效的爬虫程序?

如何使用php curl类库编写高效的爬虫程序&#xff1f; 摘要&#xff1a;爬虫程序可以用于从网页中获取数据&#xff0c;以实现各种场景下的自动化处理。本文将介绍如何使用PHP Curl类库编写高效的爬虫程序&#xff0c;并提供相关的代码示例。 导语&#xff1a;随着互联网普及…

ArrayList学习

1.2.1 构造方法 方法名说明public ArrayList()创建一个空的集合对象 1.2.2 成员方法 方法名说明public boolean add(E e)将指定的元素追加到此集合的末尾public boolean remove(E e)删除指定元素,返回值表示是否删除成功public E remove(int index)删除指定索引处的元素&…

PVE更新 报错过程解决

Proxmox 报错提示 E: Failed to fetch https://enterprise.proxmox.com/debian/ceph-quincy/dists/bookworm/InRelease 401 Unauthorized E: The repository https://enterprise.proxmox.com/debian/ceph-quincy bookworm InRelease is not signed.Proxmox 报错提示 Tempor…

笔记本重装系统怎么操作? windows电脑重装系统,超实用的四种方法

重新安装操作系统是维护计算机性能和确保系统稳定运行的重要步骤。对于 Windows 笔记本用户而言&#xff0c;熟悉重装系统的方法可以帮助他们解决各种问题&#xff0c;从提高系统速度到修复软件故障。然而具体来讲&#xff0c;笔记本重装系统怎么操作呢&#xff1f;接下来&…

input的23种属性

button 定义可点击的按钮&#xff08;通常与 JavaScript 一起使用来启动脚本&#xff09;。 checkbox 定义复选框。 color 定义拾色器。 date 定义 date 控件&#xff08;包括年、月、日&#xff0c;不包括时间&#xff09;。 datetime 定义 date 和 time 控件&…

AngularJS 参考手册

AngularJS 参考手册 1. 引言 AngularJS,一种由Google维护的开源前端Web框架,自2010年发布以来,已成为Web开发领域的重要工具。它允许开发者使用HTML作为模板语言,并扩展HTML的语法,以清晰简洁地表达应用的组件。本参考手册旨在为开发者提供AngularJS的全面指南,包括其核…

LLDP 基本原理

LLDP 简介 定义 LLDP&#xff08;Link Layer Discovery Protocol&#xff0c;链路层发现协议&#xff09;是 IEEE 802.1ab 中定义的第二层发现&#xff08;Layer 2 Discovery&#xff09;协议。 LLDP 提供了一种标准的链路层发现方式&#xff0c;可以将本端设备的主要能力、…

单片机使用printf在串口输出字符串

把字符串使用printf输出的本质 实际上调用了putchar和串口字符输出函数&#xff0c;参考 以51单片机中的程序为例 在主函数中使用printf函数向串口发送字符串&#xff0c;当然保证已经定义好串口的波特率等参数 while(1){//uart0SendString("start....\n");prin…

服务器巡查脚本

脚本编程步骤 脚本编程一般分为以下几个步骤&#xff1a; 需求分析&#xff1a;根据系统管理的需求&#xff0c;分析脚本要实现的功能、功能实现的层次、实现的命令与语句等&#xff1b; 命令测试&#xff0c;将要用到的命令逐个进行测试&#xff0c;以决定使用的选项要设置…