news 2026/4/1 11:32:40

ckeditor IE中处理word图片转存服务器配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ckeditor IE中处理word图片转存服务器配置

【西安码农の暴富日记】
嘿,各位十三朝古都的技术大拿们!我是老张,西安回民街边撸肉夹馍边撸代码的Java程序猿。最近接了个"骚需求"——给CKEditor装个"Office全家桶导入+微信内容一键吸星大法"插件,客户要求"连我二舅的老年机都能用"!


一、技术方案:CKEditor魔改三件套

1. 前端Vue3插件开发(肉夹馍版)
// src/plugins/office-ninja.jsimportClassicEditorfrom'@ckeditor/ckeditor5-build-classic';exportdefaultfunctioninstallOfficeNinja(editorConfig){// 1. 注册阿里云OSS上传适配器classOSSUploadAdapter{constructor(loader){this.loader=loader;}asyncupload(){constfile=awaitthis.loader.file;constformData=newFormData();formData.append('file',file);// 调用后端上传接口(西安肉夹馍式注释)constresponse=awaitfetch('/api/uploadToOSS',{method:'POST',body:formData});return{default:awaitresponse.text()};// 返回图片URL}}// 2. 注册Office导入按钮editorConfig.toolbar=[...editorConfig.toolbar,'officeImport'];editorConfig.extraPlugins=[(editor)=>{editor.ui.componentFactory.add('officeImport',(locale)=>{constbutton=editor.ui.component.create('button');button.set({label:'Office吸星大法',icon:'...',// 放个Word图标action:()=>{constinput=document.createElement('input');input.type='file';input.accept='.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf';input.onchange=async(e)=>{constfile=e.target.files[0];consthtml=awaitconvertOfficeToHtml(file);// 调用后端转换editor.setData(html);};input.click();}});returnbutton;});}];// 3. 注册微信内容解析按钮editorConfig.extraPlugins.push((editor)=>{editor.ui.componentFactory.add('wechatImport',(locale)=>{constbutton=editor.ui.component.create('button');button.set({label:'微信内容吸星',icon:'...',// 放个微信图标action:async()=>{consturl=prompt('输入公众号文章URL:');consthtml=awaitfetch(`/api/parseWechat?url=${encodeURIComponent(url)}`).then(res=>res.text());editor.setData(html);}});returnbutton;});});// 4. 注册LaTeX转MathML插件(关键!)editorConfig.extraPlugins.push((editor)=>{editor.plugins.get('MathType').then(()=>{editor.conversion.for('upcast').elementToElement({view:{name:'span',classes:'latex-formula'},model:(viewElement,modelWriter)=>{constlatex=viewElement.getChild(0).data;returnmodelWriter.createElement('mathml',{'mathml':convertLatexToMathML(latex)// 调用转换函数});}});});});}// 西安特色函数:凉皮式LaTeX转换(实际要用MathJax)functionconvertLatexToMathML(latex){// 这里应该是调用MathJax API的简化版return`${latex.replace(/\$/g,'')}`;}
2. 后端Java处理(兵马俑版)
// OfficeController.java - 西安城墙根下的代码@RestController@RequestMapping("/api")publicclassOfficeController{@Value("${oss.endpoint}")privateStringossEndpoint;// 1. 阿里云OSS上传接口@PostMapping("/uploadToOSS")publicResponseEntityuploadToOSS(@RequestParam("file")MultipartFilefile){try{StringobjectKey="office/"+UUID.randomUUID()+file.getOriginalFilename();OSSossClient=newOSSClientBuilder().build(ossEndpoint,"your-key","your-secret");ossClient.putObject("your-bucket",objectKey,file.getInputStream());// 返回图片URL(带防盗链参数)Stringurl=String.format("https://%s.aliyuncs.com/%s?x-oss-process=style/thumb","your-bucket",objectKey);returnResponseEntity.ok(url);}catch(Exceptione){returnResponseEntity.badRequest().body("上传失败,就像在钟楼转圈圈");}}// 2. Office转HTML接口(简化版)@PostMapping("/convertOffice")publicResponseEntityconvertOffice(@RequestParam("file")MultipartFilefile){try{// 实际项目要用Apache POI + Aspose(付费版)// 这里用凉皮式伪代码代替Stringhtml=""+file.getOriginalFilename()+"";// 处理表格(肉夹馍式表格)if(file.getOriginalFilename().endsWith(".xlsx")){html+="数据1数据2";}// 处理公式(兵马俑式公式)html=html.replaceAll("\\$\\$(.*?)\\$\\$","$$$1$$");returnResponseEntity.ok(html);}catch(Exceptione){returnResponseEntity.badRequest().body("转换失败,比在回民街找车位还难");}}// 3. 微信文章解析接口@GetMapping("/parseWechat")publicResponseEntityparseWechat(@RequestParamStringurl){try{// 实际要用Jsoup爬取+清洗// 这里用凉皮式伪代码Stringhtml="";html+="从微信吸来的标题";html+="这里是正文内容...";html+="";returnResponseEntity.ok(html);}catch(Exceptione){returnResponseEntity.badRequest().body("解析失败,就像在曲江池捞月亮");}}}

二、部署方案:大雁塔式三层架构

  1. 前端部署

    • npm run build生成dist
    • 扔到Nginx的/usr/share/nginx/html
    • 配置OSS跨域:
    location / { add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; }
  2. 后端部署

    • Eclipse导出war包
    • 扔到Tomcat的webapps/ROOT
    • 配置application.properties
    oss.endpoint=oss-cn-shanghai.aliyuncs.com oss.bucket=your-bucket-name
  3. 数据库配置

    CREATETABLEreferral_records(idINTAUTO_INCREMENTPRIMARYKEY,referrer_idVARCHAR(20),customer_idVARCHAR(20),amountDECIMAL(10,2),create_timeDATETIMEDEFAULTCURRENT_TIMESTAMP);

三、赚钱攻略:回民街式躺赚

  1. 新人福利系统

    // QQ群红包机器人(简化版)@RestController@RequestMapping("/qq-group")publicclassQQGroupController{@GetMapping("/redpacket")publicResponseEntitysendRedPacket(@RequestParamStringqq){doubleamount=Math.random()*99+1;// 实际要调用QQ机器人APIreturnResponseEntity.ok(String.format("恭喜%s获得%.2f元红包!",qq,amount));}}
  2. 提成计算系统

    // 每月1号自动分账(西安肉夹馍式定时任务)@Scheduled(cron="0 0 0 1 * ?")publicvoidcalculateCommission(){Listrecords=referralRepository.findAll();records.forEach(r->{doublecommission=r.getAmount()*0.2;// 调用支付宝转账APISystem.out.println("给"+r.getReferrerId()+"转账"+commission+"元");});}

四、技术难点突破

  1. 公式转换方案

    • 前端用MathJax:
    MathJax.typesetPromise([document.getElementById('formula-container')]);
  2. 微信内容解析

    • 用Jsoup清洗HTML:
    publicStringcleanWechatHtml(Stringhtml){Documentdoc=Jsoup.parse(html);// 移除广告doc.select(".js_ad_content").remove();// 提取正文returndoc.select("#js_content").html();}

五、成本控制(西安特色版)

  1. 阿里云费用

    • ECS突发性能t5实例:65元/月(比凉皮还便宜)
    • OSS存储:0.12元/GB/月(能存1000个Word文档)
    • 总计:<680元/年(剩下的钱够吃50碗羊肉泡馍)
  2. 开发成本

    • 主要时间花在公式转换上
    • 其他功能直接集成现有库

现在我的QQ群(223813913)已经聚集了300多位技术大牛,上周刚成交了一个5万的政府项目,光提成就1万!兄弟们,这波真的可以冲!

(悄悄说:群里还有西安老乡专属福利,加群报暗号"冰峰汽水"额外送技术文档大礼包!)

复制插件

说明:此教程以CKEditor4.x为例,使用其他编辑器的查看对应教程。
将下列文件夹复制到项目中
/WordPaster
/ckeditor/plugins/imagepaster
/ckeditor/plugins/netpaster
/ckeditor/plugins/pptpaster
/ckeditor/plugins/pdfimport

上传插件

上传插件文件夹

将imagepaster,netpaster文件夹上传到现有项目ckeditor/plugins目录中

在工具栏中增加插件按钮

CKEDITOR.replace('editor1',{extraPlugins:'zycapture,imagepaster,importwordtoimg,netpaster,wordimport,excelimport,pptimport,pdfimport,importword,exportword,importpdf',keystrokes:[[CKEDITOR.CTRL+86/*V*/,'imagepaster']],on:{currentInstance:function(){//多个编辑器时为控件设置当前编辑器WordPaster.getInstance().SetEditor(CKEDITOR.currentInstance);window.zyCapture.setEditor(this);window.zyOffice.SetEditor(this);}},//https://ckeditor.com/docs/ckeditor4/latest/api/CKEDITOR_config.html#cfg-allowedContentallowedContent:true//不过滤样式});

引用js

初始化控件

WordPaster.getInstance({//上传接口:http://www.ncmem.com/doc/view.aspx?id=d88b60a2b0204af1ba62fa66288203edPostUrl:api,//为图片地址增加域名:http://www.ncmem.com/doc/view.aspx?id=704cd302ebd346b486adf39cf4553936ImageUrl:"",//设置文件字段名称:http://www.ncmem.com/doc/view.aspx?id=c3ad06c2ae31454cb418ceb2b8da7c45FileFieldName:"file",//提取图片地址:http://www.ncmem.com/doc/view.aspx?id=07e3f323d22d4571ad213441ab8530d1ImageMatch:'',Cookie:'PHPSESSID='});//加载控件

配置上传接口

WordPaster.getInstance({//上传接口:http://www.ncmem.com/doc/view.aspx?id=d88b60a2b0204af1ba62fa66288203edPostUrl:api,//为图片地址增加域名:http://www.ncmem.com/doc/view.aspx?id=704cd302ebd346b486adf39cf4553936ImageUrl:"",//设置文件字段名称:http://www.ncmem.com/doc/view.aspx?id=c3ad06c2ae31454cb418ceb2b8da7c45FileFieldName:"file",//提取图片地址:http://www.ncmem.com/doc/view.aspx?id=07e3f323d22d4571ad213441ab8530d1ImageMatch:'',Cookie:'<%=clientCookie%>',event:{dataReady:function(e){//e.word,//e.imgs:tag1,tag2,tag3console.log(e.imgs)}}});//加载控件

注意

1.如果接口字段名称不是file,请配置FileFieldName。ueditor接口中使用的upfile字段

点击查看详细教程

配置ImageMatch

用于匹配JSON数据,

点击查看详细教程

配置ImageUrl

用于为图片增加域名前缀

点击查看详细教程

配置Session

如果接口有权限验证(登陆验证,SESSION验证),请配置COOKIE。或取消权限验证。
参考:点击查看详细教程

说明

1.请先测试您的接口:点击查看详细教程

功能演示

编辑器界面

导入Word文档,支持doc,docx

导入Excel文档,支持xls,xlsx

粘贴Word

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

Word转图片

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

导入PDF

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

导入PPT

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

上传网络图片

一键自动上传网络图片,自动下载远程服务器图片,自动上传远程服务器图片

下载示例

点击下载完整示例

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

从零开始搭建企业级权限管理系统:RuoYi完整部署指南

从零开始搭建企业级权限管理系统&#xff1a;RuoYi完整部署指南 【免费下载链接】RuoYi &#x1f389; 基于SpringBoot的权限管理系统 易读易懂、界面简洁美观。 核心技术采用Spring、MyBatis、Shiro没有任何其它重度依赖。直接运行即可用 项目地址: https://gitcode.com/yan…

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

智战2026:AI重构网络安全攻防全景——100+实战洞察与未来布局

2026年&#xff0c;人工智能不再是网络安全领域的“辅助工具”&#xff0c;而是成为贯穿攻防全链条的“核心引擎”。从自主AI智能体主导的工业化攻击&#xff0c;到复合AI防御体系构建的主动防护网&#xff0c;网络安全正经历从“边界对抗”到“信任重构”的根本性变革。全球70…

作者头像 李华
网站建设 2026/3/31 6:32:24

Android条形码扫描终极指南:快速集成多格式识别功能

Android条形码扫描终极指南&#xff1a;快速集成多格式识别功能 【免费下载链接】barcodescanner Barcode Scanner Libraries for Android 项目地址: https://gitcode.com/gh_mirrors/ba/barcodescanner 想要为你的Android应用添加专业的条形码扫描功能吗&#xff1f;Ba…

作者头像 李华
网站建设 2026/4/1 0:39:35

OceanBase存储压缩技术终极指南:高压缩比与性能优化完整解析

OceanBase存储压缩技术终极指南&#xff1a;高压缩比与性能优化完整解析 【免费下载链接】oceanbase OceanBase is an enterprise distributed relational database with high availability, high performance, horizontal scalability, and compatibility with SQL standards.…

作者头像 李华
网站建设 2026/3/30 18:52:32

家电远程诊断:基于TensorFlow的日志异常检测

家电远程诊断&#xff1a;基于TensorFlow的日志异常检测 在智能家电日益普及的今天&#xff0c;用户早已不再满足于“能联网”这一基础功能。真正打动人心的是那些“未诉先知”的体验——比如冰箱在制冷效率下降前主动提醒保养&#xff0c;洗衣机在电机出现异常振动时提前预警故…

作者头像 李华
网站建设 2026/3/31 1:51:20

腾讯SongGeneration:3分钟学会AI音乐创作的全新体验

腾讯SongGeneration&#xff1a;3分钟学会AI音乐创作的全新体验 【免费下载链接】SongGeneration 腾讯开源SongGeneration项目&#xff0c;基于LeVo架构实现高品质AI歌曲生成。它采用混合音轨与双轨并行建模技术&#xff0c;既能融合人声与伴奏达到和谐统一&#xff0c;也可分别…

作者头像 李华