前言

需要实现word文档的编辑和保存功能,之前写了一篇选方案的。
现在就按照onlyoffice开始实现。【没有使用到多人协同】

正文

1.后端部署(忽略),后端给我了一个地址之后,我运行了一个demo(代码)
报错:文档安全令牌未正确形成
可能的解决方案:

  1. dzzoffice中安装onlyoffice后打开显示文档安全令牌未正确形成的临时解决办法
  2. 请问一下这个怎么解决:文档安全令牌未正确形成onlyoffice
    总之,后端后面又给了我一个地址。demo可以运行成功。

引入后台配置好的office服务器

main.js中

<script type="text/javascript" src="xxxxxx/web-apps/apps/api/documents/api.js"></script>
  1. 其实第一步测试服务器的时候,就封装了一下组件和配置项之类的。在这里进一步根据需求调整配置项。
    参考官网修改:
    • 编辑器定制:注意:有些要企业版才可以修改,比如logo。这个是比较详细的配置项参考
    • 高级参数:包括文档权限和编辑器定制等。

主要用到的就是文档权限和编辑器配置项的定制了。

  1. 修改完之后的保存,修改后的文档是在onlyOffice的服务器上的,需要使用后端回调url
    逻辑
    1)对于一个新的word文档A,前端上传A到后台服务器,同时页面渲染打开,用户可以进行编辑。
    2)编辑完成后,点击保存,修改后的A通过回调url保存到新的服务器位置。
    ps:这部分功能主要是在后端实现的(文档的替换和路径修改),前端主要是填一下回调的url(拼接上文档id(或者其他区分的属性)),完成后再刷新一下,这样就好了。
    官网回调处理程序,主要后端看

  2. 后面有加了一个下载的功能
    虽然在前面的配置中,存在一个 download的权限配置项。
    但是在测试的时候发现,它的不足(?
    1.在菜单栏中没有明显的Icon(或者是我没找到)
    2.另存为可以有很多格式,但是它的保存地址实际为原来提供的url?(这样的话又会保存到服务器上了,而不是下载到用户本地)ps.并不知道它是否有下载回服务器。
    最后选择的方案是:前端加个按钮,直接获取后台的对应url,进行下载。
    使用的是a链接下载。比较简单。
    参考:前端vue中实现文件下载的几种方法
    代码

        <div @click.prevent="downloadFile">
          <img
            src="./img/download.png"
            alt=""
            style="cursor: pointer;"
          />
          <a :href="fileUrl"></a>
        </div>
    downloadFile() {
      this.getWordMes();//获取this.fileTitle && this.fileUrl的接口
      if (!(this.fileTitle && this.fileUrl)) {
        return;
      } else {
        // 创建隐藏的<a>元素
        console.log(this.fileTitle);
        const link = document.createElement("a");
        link.href = this.fileUrl; // 使用 this.fileUrl 获取文件的完整路径
        link.download = this.fileTitle; // 指定下载的文件名
        link.target = "_blank";
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      }
    },

存在的问题是,文件名设置了但会变乱码。不知道为啥。

一些尝试

菜单栏的功能比较多,但是实际需求不需要那么多,需要去掉一些

  • 看了配置,但是好像是只有企业版才可以自定义。所以修改配置的方法pass。
  • 本来想使用deep直接修改的,但是无法获取到需要一定时间后生成的iframe里的内容。所以也pass。(感觉这个应该是一个可行的方案,只是目前我不知道怎么实现)
    修改iframe内部元素的样式,但是里面使用的应该不是动态生产的iframe吧。
  • 最后就是相当勉强的使用css+div遮挡了一下。

参考

vue基于onlyoffice实现DOC、DOCX、XLSX、PPT、PDF文档编辑预览 :包括了选方案,Vue2+3还有后端部署,主要偏后端
Vue 预览word,excel,ppt等office文档-内网访问(基于onlyoffice,后端返回文件流) 有解释常用的配置,偏前端的功能。比较简单。因为也没有提到返回文件流后的处理或者操作。
Onlyoffice 二次开发指南:有讲协作、加密之类的。也有讲一些原理。
java+vue+onlyoffice的简单集成 大差不差,包括前后端的代码。
onlyoffice使用记录偏后端,提取了打印功能。样式是自定义的,但是没说咋实现的。不知道是不是企业版。

扩展&可优化

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐