vue3-element-ui + ckeditor4 预览和编辑word文档(word数据由后端接口返回-使用DocumentFormat.OpenXml 转成html字符串)

vue3-element-ui + ckeditor4 预览和编辑word文档(word数据由后端接口返回-使用DocumentFormat.OpenXml 转成html字符串)

需求描述

最近遇到一个需求:对已上传服务器的word文档使用ckeditor富文本编辑器实现预览和编辑功能。
之前没有接触过ckeditor组件,只能一边查资料一边自己摸索。

需求现状

1、目前已实现word文档的在线预览(word数据由后端API获取返回)
2、文档编辑后点击工具栏的”保存“按钮保存编辑后的数据

第一步,ckeditor组件的下载与安装

  这一点就不多说了,网上有很多详细教程,我也是按照网上的教程进行安装的。
  但是网上的大神们侧重的是教会大家安装,安装成功后没有把word文档中的信息显示到编辑器中逻辑,
  一般是前端直接扔一句简单的字符串显示就结束了。

第二步,预览word文档

  作为初次接触该组件的人,试了传入文件流和byte数组等方式结果显示乱码,如下图:

富文本编辑器显示乱码

解决显示乱码问题

后端API读取word文档后使用DocumentFormat.OpenXml 把文档内容转成html字符串再返回。不知道这么做对不对,反正实现正常预览了。

API部分代码:

    // word文档保存路径
    var filePath = ".\\doc.docx";
    byte[] byteArray = System.IO.File.ReadAllBytes(filePath);
    using (MemoryStream memoryStream = new MemoryStream())
    {
        memoryStream.Write(byteArray, 0, byteArray.Length);
        using (WordprocessingDocument doc = WordprocessingDocument.Open(memoryStream, true))
        {
            HtmlConverterSettings settings = new HtmlConverterSettings();
            XElement html = HtmlConverter.ConvertToHtml(doc, settings);
            return html.ToString();
        }
    }
}

正确预览
在这里插入图片描述

第三步,使用编辑器工具栏中的保存按钮来保存word文档

ckeditor4组件基础版和标准版的工具栏中是没有保存按钮的,完整版里面有,安装的时候根据个人需要来选择版本。组件引用进来后,保存按钮默认是置灰的,扒了下官方API,需要把editor放在表单中才会亮起。
在这里插入图片描述
在这里插入图片描述
前端vue代码:

<template>
  <div>
    <form>
      <textarea :id="id" name="content"></textarea>
    </form>
  </div>
</template>

在这里插入图片描述
下一步就是重写保存按钮来实现编辑word文档后保存到服务器了。
重写工具栏保存按钮
在这里插入图片描述

    // 重写保存事件
    this.ckeditor.on('instanceReady', () => {
      this.ckeditor.addCommand('save', {
        modes: { wysiwyg: 1, source: 1 },
        exec: () => {
          this.$emit('saveContnet', this.ckeditor.getData())
        }
      })
    })

在这里插入图片描述
在这里插入图片描述
重写工具栏保存方法后,就可以在使用组件的地方进行保存到后台的方法了

最后再保存到word文档就可以啦…

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
易购商城是一个基于Vue框架开发的前端毕设项目。在该项目中,我使用VueVuex、Vue Router、Element UI、Axios等技术和库来实现各种功能。 首先,Vue是一种流行的前端框架,它具有响应式的数据绑定和组件化的特性,使得开发者可以轻松构建交互性强、高效的单页面应用。 其次,我使用Vuex来管理应用的状态。Vuex提供了一种集中式的状态管理方案,帮助我管理和共享全局的数据,使得不同组件之间的通信更加便捷。 Vue Router是Vue官方提供的路由管理库,用于实现页面之间的导航和路由跳转。我使用它来定义和管理不同页面之间的跳转逻辑,使得用户可以通过URL来访问和导航各个页面。 Element UI是一套基于Vue的桌面端组件库,它提供了丰富的UI组件和样式,使得我可以快速构建出美观和功能完善的界面。 为了与后端进行数据交互,我使用了Axios库。Axios是一个基于Promise的HTTP客户端,可以在前端与后端进行异步数据交互,使得用户可以实现登录、注册、添加购物车、结算等功能。 最后,我还使用Vue插件vue-echarts和vue-awesome-swiper来实现商品数据的可视化展示和轮播图功能。这些插件都提供了强大且易用的功能,使得易购商城的用户界面更加丰富和吸引人。 总体来说,通过使用VueVuex、Vue Router、Element UI、Axios等技术和库,我成功地实现了易购商城的前端开发工作,提供了丰富的功能和良好的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值