news 2026/3/27 6:32:29

TinyMCE6处理word文档超链接自动检测

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TinyMCE6处理word文档超链接自动检测

VUE后台管理中使用富文本编辑器导入word 文档进行编辑

前言

最近因业务需求在项目中嵌入了tinymce这个编辑器,用于满足平台给用户编辑各类新闻内容什么的业务需求,前后也花了不少时间体验和对比了市面上各类开源编辑器,直接将新闻部门的工作从半天工作量提升只要一个小时就可以搞到,一两分钟就可以搞定一个任务

优点

文档好,功能强,bug少,无外部依赖。
word文档粘贴进来要带格式
兼容移动端
word文档粘贴进来要正常显示并且还要兼容移动端
电脑网页里粘贴进来内容要正常显示并且排版还不能乱
电脑网页拷过来的内容还要兼容到移动端

安装

cssnpm install tinymce @tinymce/tinymce-vue@3.2.8 -S

下载语言包

中文语言包下载

开始操作文件

将依赖包 node_modules 里找到 tinymce文件夹,复制到public 里,【左图是tinymce,右图是public复制后的目录】

一下是注意点:

很多的博客的写法是将 node_modules 里面的skins文件夹复制到public/tinymce目录下,经过尝试是不完善的,需要将整个目录倒入进public里

不完全导入的错误显示,我还以为是语言包的问题,一个个语言包版本去试,这种展示一半英文一半中文的

导入tinymcejs

public/index.html 添加 tinymce.js

引入基本文件

javascript// 引入组件importtinymcefrom'tinymce/tinymce'importEditorfrom'@tinymce/tinymce-vue'// 引入富文本编辑器主题的js和cssimport'tinymce/themes/silver/theme.min.js'import'tinymce/skins/ui/oxide/skin.min.css'// 扩展插件import'tinymce/plugins/image'import'tinymce/plugins/link'import'tinymce/plugins/code'import'tinymce/plugins/table'import'tinymce/plugins/lists'import'tinymce/plugins/wordcount'

注册组件

css

components:{Editor},

使用组件

tinymce 初始化配置

data(){return{// tinymce的绑定值tinymceHtml:'',// tinymce的初始化配置editorInit:{selector:'#tinymce',language_url:'/tinymce/langs/zh_CN.js',language:'zh_CN',skin_url:'/tinymce/skins/ui/oxide',height:400,plugins:'link lists image code table wordcount importword',toolbar:'bold italic underline strikethrough | fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent blockquote | undo redo | link unlink image code | removeformat | importword',//点击富文本图片上传的时候将图片转成base64再通过success插入images_upload_handler:(blobInfo,success)=>{constimg='data:image/jpeg;base64,'+blobInfo.base64()success(img)},importword_filter:function(result,insert,message){// console.log(result)// console.log(insert)// console.log(message)// 自定义操作部分insert(result)// 回插函数},// statusbar: false // 是否隐藏底部的状态栏// menubar: false, // 是否隐藏最上方的菜单branding:false// 是否禁用“Powered by TinyMCE”}}},

整体代码

// 引入组件 import tinymce from 'tinymce/tinymce' import Editor from '@tinymce/tinymce-vue' // 引入富文本编辑器主题的js和css import 'tinymce/themes/silver/theme.min.js' import 'tinymce/skins/ui/oxide/skin.min.css' // 扩展插件 import 'tinymce/plugins/image' import 'tinymce/plugins/link' import 'tinymce/plugins/code' import 'tinymce/plugins/table' import 'tinymce/plugins/lists' import 'tinymce/plugins/wordcount' ​ // import { uploadImgage } from '@/api/activeConfig' ​ export default { name: 'ActiveConfig', components: { Editor }, data() { return { // tinymce的绑定值 tinymceHtml: '', // tinymce的初始化配置 editorInit: { selector: '#tinymce', language_url: '/tinymce/langs/zh_CN.js', language: 'zh_CN', skin_url: '/tinymce/skins/ui/oxide', height: 400, plugins: 'link lists image code table wordcount importword', toolbar: 'bold italic underline strikethrough | fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent blockquote | undo redo | link unlink image code | removeformat | importword', // 此处为图片上传处理函数 // images_upload_handler: (blobInfo, success, failure) => { // this.handleImgUpload(blobInfo, success, failure) // }, images_upload_handler: (blobInfo, success) => { const img = 'data:image/jpeg;base64,' + blobInfo.base64() success(img) }, importword_filter: function(result, insert, message) { // console.log(result) // console.log(insert) // console.log(message) // 自定义操作部分 insert(result) // 回插函数 }, // statusbar: false // 是否隐藏底部的状态栏 // menubar: false, // 是否隐藏最上方的菜单 branding: false // 是否禁用“Powered by TinyMCE” } } }, mounted() { tinymce.init({}) }, methods: { // 图片上传 handleImgUpload(blobInfo, success, failure) { // this.baseUrl = process.env.VUE_APP_BASE_URL // const imgBase64 = 'data:image/jpeg;base64,' + blobInfo.base64() // const data = { img: [imgBase64] } // uploadImgage(data).then(res => { // // 传入success回调里的数据就是富文本编辑器里插入图片的src的值 // success(`${this.baseUrl}/${res.data[0]}`) // }).catch(() => { failure('error') }) } } } ​ .activeConfig { &-container { margin: 30px; } } ​

特殊需求

需要找个能实现word文档上传到富文本编辑器,减轻编辑机构的负担,解决机构需要每次打开文档复制再编辑的繁琐工作,实现直接导入编辑

tinymce插件

一个下载插件,一个是注意点,图片在富文本是base64的方式
导入插件
下载示例:https://gitee.com/xproer/wordpaster-vue-tinymce5

下载解压后

将整个文件复制到public的插件目录

再往tinymce配置添加即可

editorInit.plugins 和 editorInit.toolbar 添加importword即可

vbneteditorInit: {
selector: ‘#tinymce’,
language_url: ‘/tinymce/langs/zh_CN.js’,
language: ‘zh_CN’,
skin_url: ‘/tinymce/skins/ui/oxide’,
height: 400,
plugins: ‘link lists image code table wordcount importword’,
toolbar: ‘bold italic underline strikethrough | fontsizeselect | forecolor backcolor | alignleft aligncenter alignright alignjustify | bullist numlist | outdent indent blockquote | undo redo | link unlink image code | removeformat | importword’
}

图片解决方案

如果碰到图片的问题,处理图片有两种方式:
1、一种在提交内容的时候统一处理图片,稿件文件里图片只要提交一次。
2、一种是监听图片上传,每次更新图片都上传图片。

图片上传函数有
images_upload_handler

第二种
jsconst files = []
const base64ImgSum = []
for (let i = 0; i < imgs.length; i++) {
//去除不用的属性
imgs[i].removeAttribute(‘data-mce-src’)
imgs[i].removeAttribute(‘alt’)
//拿到所有的图片列表
imgs[i].src.includes(‘base’) && base64ImgSum.push(imgs[i])
}

//将base64图片转换file文件
dataURLToFile(dataURL, filename) {
const arr = dataURL.split(‘,’)
const mime = arr[0].match(/😦.*?);/)[1] // mime类型 image/png
const bstr = atob(arr[1]) // base64 解码

let n = bstr.length const u8arr = new Uint8Array(n) while (n--) { u8arr[n] = bstr.charCodeAt(n) } return new File([u8arr], filename, { type: mime }) // return new Blob([a8arr], {type: mime});

},

//将处理file文件当参处理即可
fd.append(‘file’, this.dataURLToFile(base64ImgSum[i].src,${(new Date()).getTime()}.jpg))

最终效果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 15:25:09

vue3大文件上传组件的信创环境适配与优化

天津XX软件公司大文件传输系统前端技术方案&#xff08;第一人称视角&#xff09; 一、技术选型与架构设计 作为前端负责人&#xff0c;我主导了基于Vue3 TypeScript的模块化架构设计&#xff0c;核心解决以下痛点&#xff1a; 浏览器兼容性&#xff1a;通过分层适配策略覆…

作者头像 李华
网站建设 2026/3/27 13:46:28

护照阅读器,边检工作的超级助力!

宝子们&#xff0c;出入境时&#xff0c;边检人员快速查验护照&#xff0c;保障我们顺利通行。这背后&#xff0c;护照阅读器发挥着关键作用&#xff0c;堪称边检工作的 “超级英雄”&#xff01;护照阅读器究竟是何方神圣&#xff1f;它是一种专业光学仪器&#xff0c;专为识别…

作者头像 李华
网站建设 2026/3/26 21:46:52

springboot智能鲜花商店销售商城系统_76e5982x

目录已开发项目效果实现截图关于博主开发技术介绍核心代码参考示例1.建立用户稀疏矩阵&#xff0c;用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;已开发…

作者头像 李华
网站建设 2026/3/27 11:30:35

PyTorch-CUDA-v2.7镜像在智能制造质检环节的应用

PyTorch-CUDA-v2.7镜像在智能制造质检环节的应用 在现代电子制造车间&#xff0c;一条SMT&#xff08;表面贴装技术&#xff09;产线上每小时要处理数万枚PCB板。传统质检依赖三班倒的人工目检&#xff0c;不仅成本高昂&#xff0c;还因视觉疲劳导致漏检率波动剧烈——这曾是困…

作者头像 李华
网站建设 2026/3/26 18:26:44

电脑扬声器没声音显示驱动异常怎么办?深度解析与提供两种修复方案

核心问题解答&#xff1a; 扬声器没声音且提示驱动异常怎么办&#xff1f; 这通常源于声卡驱动文件损坏、Windows系统更新导致的兼容性冲突或注册表错误&#xff1b;解决途径分为两种&#xff1a;一是通过设备管理器进行复杂的手动清理与ID匹配重装&#xff0c;二是利用金山毒…

作者头像 李华
网站建设 2026/3/21 10:15:57

JS浏览器兼容问题怎么解决?3个核心方法实战解析

处理JavaScript的浏览器兼容性问题&#xff0c;是前端开发中一项虽基础却至关重要的实际工作。它并非仅仅是技术上的挑战&#xff0c;更直接影响着网站在不同用户环境下的可用性与体验。现代Web开发虽已提供诸多工具和方法&#xff0c;但理解其根源并建立有效的应对策略&#x…

作者头像 李华