news 2026/4/19 9:24:14

机械设计BOM系统TinyMCE如何避免Visio流程图粘贴失真?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
机械设计BOM系统TinyMCE如何避免Visio流程图粘贴失真?

河南某集团企业项目需求评估与实施记录

一、项目背景与需求分析

作为集团项目负责人,近期接到业务部门需求:在企业网站后台管理系统(基于TinyMCE编辑器、Vue2/Vue3/React前端框架、SpringBoot后端)中新增Word粘贴文档导入功能,要求支持:

  1. Word粘贴:保留样式(表格、公式、字体、颜色等),图片自动上传至华为云OBS(兼容未来迁移至阿里云/腾讯云等),避免BASE64编码。
  2. 文档导入:支持Word/Excel/PPT/PDF,保留图片与样式。
  3. 信创兼容:操作系统(Windows/Linux/中标麒麟/统信UOS等)、浏览器(含IE8)、CPU(x86/arm/龙芯)。
  4. 授权模式:一次性买断,集团内无限制使用,预算≤68万元。
  5. 商务要求:提供5个国企/政府合作案例(含合同、转账凭证、信创认证、软著、营业执照)。
二、产品选型与评估
1. 候选产品筛选

通过市场调研,筛选出3款符合技术需求的富文本编辑器插件:

  • TinyMCE官方插件:功能有限,不支持复杂样式保留,排除。
  • Froala Editor:功能强大,但授权费超预算(单项目$5,000+,集团年费用超500万),且不支持买断。
  • 国产信创编辑器(如WEditor)
    • 优势
      • 完全兼容信创环境(中标麒麟/统信UOS/龙芯CPU)。
      • 支持Word/Excel/PPT/PDF导入,保留样式与图片。
      • 提供华为云OBS集成方案,支持多云迁移。
      • 一次性买断授权≤68万元,无项目数量限制。
    • 劣势
      • 需定制开发部分功能(如MathType公式兼容)。
2. 商务验证

要求厂商提供:

  • 5个政府项目案例(某省政务服务网、某央企OA系统等),含合同、转账凭证、信创认证。
  • 软件著作权证书、营业执照、法人身份证(核验真实性)。
  • 现场演示在统信UOS+龙芯CPU环境下运行。

结论:选择国产信创编辑器(WEditor)作为技术方案。

三、技术实现方案
1. 前端集成(Vue2示例)
// main.jsimportTinyMCEfrom'tinymce-vue';import'tinymce/plugins/weditor';// 信创编辑器插件Vue.use(TinyMCE);// 组件配置
2. 后端实现(SpringBoot)
// 图片上传至华为云OBS@RestController@RequestMapping("/api/upload")publicclassUploadController{@Value("${obs.endpoint}")privateStringendpoint;@PostMapping("/image")publicResponseEntityuploadImage(@RequestParam("file")MultipartFilefile){try{OBSClientobsClient=newOBSClient(ak,sk,endpoint);obsClient.putObject("your-bucket",file.getOriginalFilename(),file.getInputStream());Stringurl="https://"+endpoint+"/your-bucket/"+file.getOriginalFilename();returnResponseEntity.ok(url);}catch(Exceptione){returnResponseEntity.status(500).build();}}}
3. 文档导入处理
  • Word/Excel/PPT:使用Apache POI解析文档结构,提取图片与样式。
  • PDF:使用PDFBox或iText转换HTML,保留布局。
  • 公式兼容:通过MathML或LaTeX渲染(集成MathJax库)。
4. 信创环境适配
  • 浏览器兼容:通过Polyfill支持IE8(如es5-shim、html5shiv)。
  • CPU指令集:提供x86/arm/龙芯三版本二进制包。
  • 操作系统:打包为.deb/.rpm/.tar.gz格式,支持自动安装脚本。
四、项目风险与应对
  1. 授权风险:买断授权避免涨价,合同明确无项目数量限制。
  2. 信创兼容性:要求厂商提供30天免费试用,在统信UOS+龙芯环境验证。
  3. 性能优化
    • 图片上传采用分片传输,避免大文件阻塞。
    • 样式解析使用Web Worker多线程处理。
五、项目成果
  1. 功能交付
    • Word粘贴保留95%以上样式(含MathType公式)。
    • 文档导入平均耗时<3秒(10MB文件)。
    • 华为云OBS上传成功率99.9%。
  2. 成本节约
    • 一次性买断授权节省年授权费432万元(68万 vs 500万)。
  3. 客户反馈
    • 某省政府项目验收评分98/100,获“信创标杆案例”表彰。
六、后续计划
  1. 扩展支持WPS文档直接编辑(通过COM接口调用本地WPS)。
  2. 研发移动端适配,支持政务APP内嵌编辑器。
  3. 探索AI辅助写作功能(如自动生成政府公文模板)。

附件

  1. 厂商合作案例清单(含合同编号、转账凭证截图)。
  2. 信创环境兼容性测试报告(统信UOS+龙芯CPU)。
  3. 华为云OBS集成技术文档。

通过严格选型与定制开发,项目在预算内实现了信创环境下的高兼容性需求,为集团后续项目提供了标准化解决方案。

复制插件

安装jquery

npm install jquery

在组件中引入

// 引入tinymce-vueimportEditorfrom'@tinymce/tinymce-vue'import{WordPaster}from'../../static/WordPaster/js/w'import{zyOffice}from'../../static/zyOffice/js/o'import{zyCapture}from'../../static/zyCapture/z'

添加工具栏

//添加导入excel工具栏按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor).importExcel()}varregister$1=function(editor){editor.ui.registry.addButton('excelimport',{text:'',tooltip:'导入Excel文档',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('excelimport',{text:'',tooltip:'导入Excel文档',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('excelimport',function(editor){Buttons.register(editor);});}Plugin();}());//添加word转图片工具栏按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor);WordPaster.getInstance().importWordToImg()}varregister$1=function(editor){editor.ui.registry.addButton('importwordtoimg',{text:'',tooltip:'Word转图片',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('importwordtoimg',{text:'',tooltip:'Word转图片',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('importwordtoimg',function(editor){Buttons.register(editor);});}Plugin();}());//添加粘贴网络图片工具栏按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor);WordPaster.getInstance().UploadNetImg()}varregister$1=function(editor){editor.ui.registry.addButton('netpaster',{text:'',tooltip:'网络图片一键上传',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('netpaster',{text:'',tooltip:'网络图片一键上传',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('netpaster',function(editor){Buttons.register(editor);});}Plugin();}());//添加导入PDF按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor);WordPaster.getInstance().ImportPDF()}varregister$1=function(editor){editor.ui.registry.addButton('pdfimport',{text:'',tooltip:'导入pdf文档',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('pdfimport',{text:'',tooltip:'导入pdf文档',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('pdfimport',function(editor){Buttons.register(editor);});}Plugin();}());//添加导入PPT按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor);WordPaster.getInstance().importPPT()}varregister$1=function(editor){editor.ui.registry.addButton('pptimport',{text:'',tooltip:'导入PowerPoint文档',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('pptimport',{text:'',tooltip:'导入PowerPoint文档',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('pptimport',function(editor){Buttons.register(editor);});}Plugin();}());//添加导入WORD按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor).importWord()}varregister$1=function(editor){editor.ui.registry.addButton('wordimport',{text:'',tooltip:'导入Word文档',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('wordimport',{text:'',tooltip:'导入Word文档',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('wordimport',function(editor){Buttons.register(editor);});}Plugin();}());//添加WORD粘贴按钮(function(){'use strict';varglobal=tinymce.util.Tools.resolve('tinymce.PluginManager');varico="http://localhost:8080/static/WordPaster/plugin/word.png"functionselectLocalImages(editor){WordPaster.getInstance().SetEditor(editor).PasteManual()}varregister$1=function(editor){editor.ui.registry.addButton('wordpaster',{text:'',tooltip:'Word一键粘贴',onAction:function(){selectLocalImages(editor)}});editor.ui.registry.addMenuItem('wordpaster',{text:'',tooltip:'Word一键粘贴',onAction:function(){selectLocalImages(editor)}});};varButtons={register:register$1};functionPlugin(){global.add('wordpaster',function(editor){Buttons.register(editor);});}Plugin();}());

在线代码:

添加插件

// 插件plugins:{type:[String,Array],// default: 'advlist anchor autolink autosave code codesample colorpicker colorpicker contextmenu directionality emoticons fullscreen hr image imagetools importcss insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus table template textcolor textpattern visualblocks visualchars'default:'autoresize code autolink autosave image imagetools paste preview table powertables'},

点击查看在线代码

初始化组件

// 初始化WordPaster.getInstance({// 上传接口:http://www.ncmem.com/doc/view.aspx?id=d88b60a2b0204af1ba62fa66288203edPostUrl:'http://localhost:8891/upload.aspx',// 为图片地址增加域名:http://www.ncmem.com/doc/view.aspx?id=704cd302ebd346b486adf39cf4553936ImageUrl:'http://localhost:8891{url}',// 设置文件字段名称:http://www.ncmem.com/doc/view.aspx?id=c3ad06c2ae31454cb418ceb2b8da7c45FileFieldName:'file',// 提取图片地址:http://www.ncmem.com/doc/view.aspx?id=07e3f323d22d4571ad213441ab8530d1ImageMatch:''})

在页面中引入组件

功能演示

编辑器

在编辑器中增加功能按钮

导入Word文档,支持doc,docx

导入Excel文档,支持xls,xlsx

粘贴Word

一键粘贴Word内容,自动上传Word中的图片,保留文字样式。

Word转图片

一键导入Word文件,并将Word文件转换成图片上传到服务器中。

导入PDF

一键导入PDF文件,并将PDF转换成图片上传到服务器中。

导入PPT

一键导入PPT文件,并将PPT转换成图片上传到服务器中。

上传网络图片

一键自动上传网络图片。

下载示例

点击下载完整示例

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

导师推荐!千笔,顶尖配置的AI论文写作软件

你是否曾为论文选题而苦恼&#xff1f;是否在深夜面对空白文档时感到无从下手&#xff1f;是否反复修改却总对表达不满意&#xff1f;论文写作不仅是学术能力的考验&#xff0c;更是时间与精力的挑战。对于本科生来说&#xff0c;从选题到查重&#xff0c;每一步都可能成为“卡…

作者头像 李华
网站建设 2026/4/18 5:33:59

Jenkins节点拉取代码报错场景及解决方案全解析

Jenkins节点在拉取代码时可能因多种原因报错&#xff0c;涵盖SSH认证、网络配置、Git环境、权限管理等问题。本文从问题机制和解决方案两个维度&#xff0c;系统梳理常见场景及处理方法&#xff0c;帮助快速定位和修复问题。一、SSH认证相关问题 1. 密钥算法不匹配 现象&#x…

作者头像 李华
网站建设 2026/4/17 15:33:41

全网最全8个降AIGC网站,千笔AI助你高效降AI率

AI降重工具&#xff1a;高效降低AIGC率&#xff0c;守护学术诚信 在当前学术研究日益依赖AI辅助写作的背景下&#xff0c;如何有效降低论文中的AIGC率&#xff0c;已成为研究生们关注的核心问题。随着各大高校和期刊对AI生成内容的识别技术不断升级&#xff0c;单纯依靠AI撰写…

作者头像 李华
网站建设 2026/4/18 8:47:24

多平台环境下大文件上传的通用解决方案总结?

2023年XX月XX日 &#x1f31f; | 一个菜鸟程序员的“秃头”日记 &#x1f4bb; 今日份的崩溃与突破 早上8点&#xff1a;对着镜子默念三遍——“我能搞定10G文件上传&#xff01;”&#xff08;然后发现IE8连console.log都报错…&#xff09; 上午10点&#xff1a;试图用WebU…

作者头像 李华
网站建设 2026/4/18 5:33:31

智能制造MES系统如何实现SPC控制图到富文本编辑器的动态绑定?

重庆XX教育集团项目评估与技术方案 ——基于信创环境的富文本编辑器增强模块开发纪实 一、需求分析与技术评估 1. 核心需求矩阵 需求分类具体要求技术挑战点内容粘贴Word/微信公众号图文粘贴&#xff08;含图片自动上传&#xff09;IE8下Clipboard API兼容性、微信公众号反爬…

作者头像 李华