Vue3+TS实现将html或富文本编辑器转为Word并下载

说明:我用的富文本编辑器是wangEditor:
wangEditor官网

  • 安装
yarn add @wangeditor/editor
# 或者 npm install @wangeditor/editor --save
yarn add @wangeditor/editor-for-vue@next
# 或者 npm install @wangeditor/editor-for-vue@next --save
yarn add html-docx-js-typescript
# 或者  npm install html-docx-js-typescript --save-dev
  • 在所需页面中引入资源
    import '@wangeditor/editor/dist/css/style.css' // 引入 富文本编辑器css
    import { Editor, Toolbar } from '@wangeditor/editor-for-vue'//富文本编辑器
    import { asBlob } from 'html-docx-js-typescript';//将html转为word
    
  • wangeditor+vue3+TS 实现Web 富文本编辑器
  • HTML部分
<el-button type="primary" plain @click="exportDoc">导出文档
</el-button>
<div style="border: 1px solid #ccc"><Toolbarstyle="border-bottom: 1px solid #ccc":editor="editorRef":default-config="toolbarConfig":mode="mode"/><Editorv-model="valueHtml"style="height: 500px; overflow-y: hidden;":default-config="editorConfig":mode="mode"@on-created="handleCreated"/>
</div>
  • JavaScript部分

    <script setup lang="ts">// 编辑器实例,必须用 shallowRefconst editorRef = shallowRef()const mode = ref('default')// 内容 HTMLconst valueHtml = ref('')// 工具栏配置项const toolbarConfig: Partial<IToolbarConfig> = {}const editorConfig = { placeholder: '请输入内容...', MENU_CONF: {} }// 组件销毁时,也及时销毁编辑器onBeforeUnmount(() => {const editor = editorRef.valueif (editor == null)returneditor.destroy()})function handleCreated(editor: any) {editorRef.value = editor // 记录 editor 实例,重要!}// 导出文档async function exportDoc() {const editor = editorRef.value// 将富文本内容拼接为一个完整的htmlconst html = editor.getHtml()const value =  `<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title></head><body>${html}</body></html>//  landscape就是横着的,portrait是竖着的,默认是竖屏portrait。const data = await asBlob(value, { orientation: 'portrait' }) as Blobconst a= document.createElement('a')a.href = window.URL.createObjectURL(data)a.setAttribute('download', 'document.docx')a.click()// 下载后将标签移除a.remove()}
    </script>
    
  • 效果图
    • Web 富文本编辑器富文本

      image.png

    • word文档
      image.png

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

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

相关文章

Django + React 全栈开发 demo

视频 https://www.youtube.com/watch?vc-QsfbznSXI 笔记 在windows 系统上开发此项目&#xff0c;Linux 命令有所不同。先写 Django&#xff0c;后写 React。 此项目实现的功能是&#xff0c;用户可以注册并登录网站&#xff0c;创建或删除 note&#xff0c;note 包含 title和…

小程序|手写签名功能如何开启?

老师们可以利用易查分的手写签名功能&#xff0c;在发布查询后&#xff0c;让学生或家长签字确认知晓。下面教大家如何使用吧。 &#x1f4cc;使用教程 &#x1f50e;在哪里开启手写签名&#xff1f; 按照正常流程创建查询后&#xff0c;在查询管理页找到需要开启签名功能的查…

【ggplot、图片导出、字符串、数据框处理】

发现问题的眼睛&#xff0c;面对困难的信心&#xff0c;解决问题的能力 From 生物技能树&#xff0c;R语言基础第六节 文章目录 [TOC](文章目录) 接上次的ggplot1.ggplot几何对象a.局部设置和全局设置b.坐标系c.主题 2.ggplot语法总结a. ggpubr包 3.图片保存的三种方法a.基础包…

HI-TOP网关HT3S-DPM-ECS实现PROFIBUS DP大功率变频器与青岛港口汇川EtherCAT主站PLC通讯互联的案例研究

一、引言 随着工业自动化技术的不断发展&#xff0c;青岛港口寻求提升其物流自动化系统&#xff0c;以提高效率和可靠性&#xff0c;不同品牌和协议的工业设备之间的通讯互联成为了技术实现的重要挑战。在青岛港口&#xff0c;作为该系统核心的变频器和PLC之间需要无缝通讯&…

leetcode.所有可能的路径(python)

找到从节点0到n-1的所有路径&#xff0c;肯定是用dfs算法&#xff0c;不过有两种思考方式&#xff1a; 一种是&#xff1a;从后往前考虑。如果这条路能到n-1节点&#xff0c;那么dfs返回一个rec列表&#xff0c;里面存路径。 class Solution:def allPathsSourceTarget(self, …

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(76)

1. 题目解析 题目链接&#xff1a;LCR 091. 粉刷房子 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 1. 状态定义 在解决这类问题时&#xff0c;我们首先需要根据题目的具体要求来定义状态。针对房屋粉刷问题&#…

刷题之字母异位词(leetcode 哈希表)

https://leetcode.cn/problems/group-anagrams/ class Solution { public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string>>map;//哈希表键为排序后或者处理后的字符串&#xff0c;值为某…

LeetCode474:一和零

题目描述 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的长度&#xff0c;该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素&#xff0c;集合 x 是集合 y 的 子集 。 代码 /*抽象为两个维度的背包问题 dp[i][j…

认定6月7日截止!合肥市2024年第二批国家高新技术企业申报条件、流程和材料

合肥市2024年第二批国家高新技术企业认定截止在6月7日&#xff0c;关于合肥市高新技术企业认定条件、申报材料、流程的详细内容整理如下&#xff1a; 一、申报范围 &#xff08;一&#xff09;在我市行政区域内注册成立一年以上的居民企业&#xff0c;且符合《认定办法》第十一…

C++实现CSS布局管理器

/* Yoga 是一个针对 Web 标准的嵌入式布局引擎。 https://www.yogalayout.dev/docs/styling/ https://www.yogalayout.dev/playground 其它类似&#xff1a; https://github.com/Tencent/Taitank */ #include <yoga/Yoga.h> void applyLayout(YGNodeRef node) { //i…

渣土车上路识别报警摄像机

随着城市建设的不断推进&#xff0c;渣土车在城市道路上的数量也逐渐增加。然而&#xff0c;一些不法渣土车司机往往会超载、超速行驶或者闯红灯&#xff0c;给道路交通安全和城市环境带来了一定的隐患。为了有效监管渣土车上路行驶的情况&#xff0c;渣土车上路识别报警摄像机…

unity制作app(7)--panel control

根据用户的状态&#xff0c;在界面中显示不同的panel 1.新建一个脚本PanelControl&#xff0c;控制各个脚本的显示与隐藏 2.实现第一个逻辑判断功能&#xff1a;如果没有登记过信息&#xff0c;就直接跳转到登记界面&#xff0c;如果登记过&#xff0c;跳转到住界面。许多需要…