国产信创环境下CKEditor导入Excel数据会丢失样式吗?

【西安码农の暴富日记】
嘿,各位十三朝古都的技术大拿们!我是老张,西安回民街边撸肉夹馍边撸代码的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转换成图片上传到服务器中。

上传网络图片

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

下载示例

点击下载完整示例

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

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

相关文章

2026免费高质量立体声环境录音素材网站推荐TOP10

根据《2024-2029年全球音频素材市场深度调研及投资前景分析报告》显示&#xff0c;全球音频素材市场规模正持续扩大&#xff0c;其中立体声环境录音素材因能显著提升内容沉浸感&#xff0c;成为多媒体创作者的核心需求之一。对于视频博主、游戏开发者或短视频制作人来说&#x…

汽车制造行业网页开发,JAVA如何实现大文件的分块与续传?

军工利刃出鞘&#xff1a;破解100G涉密文件传输难题 初春的挑战 2025年3月的北京仍带着料峭寒意&#xff0c;军工研究院的会议室里却气氛灼热。大屏幕上跳动着红色警示&#xff1a;“政府单位100G涉密文件传输需求——现有系统兼容性评估&#xff1a;0%”。作为项目总工&…

恐怖电影缺音效?2026免费惊悚音效库TOP10推荐

根据《2025-2030年中国音效素材行业市场深度调研及投资策略报告》显示&#xff0c;2025年国内免费音效素材的下载量同比增长35%&#xff0c;其中惊悚类音效因影视制作、短视频创作等需求激增&#xff0c;成为增速最快的细分品类之一。对于恐怖电影创作者而言&#xff0c;找到高…

2026年无锡口碑好的铜铸件厂家推荐,扬州市雪龙铜制品值得选吗?

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆铜铸件品牌商,为企业选型提供客观依据,助力精准匹配适配的铜铸件老牌厂家,规避采购过程中的工艺不稳定、交期延误等痛点。 TOP1 推荐:扬州市雪龙铜制品…

使用 LangChain Pyodide Sandbox 在安全环境中执行 Python 代码

在现代 AI 应用开发中&#xff0c;安全地执行用户提供的代码是一个常见但极具挑战性的需求。LangChain 提供了一个基于 Deno 和 Pyodide 的轻量级沙箱工具 —— langchain-sandbox&#xff0c;它可以在隔离环境中运行 Python 代码&#xff0c;同时通过细粒度权限控制保障系统安…

聊聊河南高性价比的舞蹈艺考培训公司,CDC舞蹈艺考值得选吗?

随着舞蹈艺考竞争日益激烈,越来越多考生和家长开始寻找靠谱的舞蹈艺考培训公司比较不错的舞蹈艺考机构高性价比的舞蹈艺考培训公司,但市场上机构鱼龙混杂,如何避开陷阱、选对平台成了核心痛点。本文结合考生高频问题…

WordPress如何实现微信公众号图文中的公式一键转存?

要求&#xff1a;开源&#xff0c;免费&#xff0c;技术支持 博客&#xff1a;WordPress 开发语言&#xff1a;PHP 数据库&#xff1a;MySQL 功能&#xff1a;导入Word,导入Excel,导入PPT(PowerPoint),导入PDF,复制粘贴word,导入微信公众号内容,web截屏 平台&#xff1a;Window…

深聊深圳秀优国际会展市场口碑,看其值得推荐不?

问题1:深圳市秀优国际会展公司口碑如何?市场上的评价集中在哪些方面? 深圳市秀优国际会展有限公司(Show-U Expo)的市场口碑以高确定性全链路靠谱为核心标签,尤其在科技、电子、制造等出海参展企业中认可度极高。…

2026年专业的换热器用无缝钢管厂家Top10

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为工业客户选型提供客观依据,助力精准匹配适配的钢管供应伙伴。 TOP1 推荐:天津腾昊伟业钢管销售有限公司 推荐指数:★★★★★ | 口碑评分:国内…

计算机毕设 deadline 前 1 个月慌了?我用 “模块拆分法” 救回我的工程

计算机毕设 deadline 前 1 个月慌了?我用 “模块拆分法” 救回我的工程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: …

网页富文本编辑器如何保留Word文档原始排版?

一文搞定Word内容粘贴公式转换多终端适配方案 作为一名大三的海南软件工程学生&#xff0c;我这个CMS新闻管理系统升级计划确实有点"野心勃勃"啊&#xff01;不过别担心&#xff0c;我已经为你准备了一套完整方案&#xff0c;保证让你在毕业前就能做出一个惊艳的作品…

Path Traversal Vulnerability in zlib untgz ≤ 1.3.1

Title: Path Traversal Vulnerability in zlib untgz ≤ 1.3.1 BUG_Author: mifya Affected Version: zlib ≤ 1.3.1.2 Vendor: zlib Official Website Software: zlib - contrib/untgz Vulnerability Files:contrib/u…

基于CodeSys和Raspberry Pi制作简单PLC

基于CodeSys和Raspberry Pi制作简单PLC基于CodeSys和Raspberry Pi制作简单PLC发布于 2021-11-09 16:04:033.2K0举报文章被收录于专栏:剑指工控关联问题换一批CodeSys是什么?Raspberry Pi如何用于制作PLC?制作简单PL…

【2026最新】大模型学习指南:零基础入门,从概念到应用,程序员必备,建议收藏!

本文全面介绍大模型基础知识&#xff0c;包括AI核心概念与大模型特性。重点解析Prompt工程技巧&#xff0c;详细说明如何编写高质量提示词&#xff1b;深入探讨AI Agent架构&#xff0c;阐述其与大模型的协同关系&#xff1b;系统讲解RAG技术&#xff0c;解决大模型幻觉问题。文…

2022年深圳中学自招真题(答案版)

2022年深圳中学自招真题(答案版)2022年深圳中学自招真题 全卷共15题,满分70分 1、(4分) 已知\(\dfrac{a}{b}=a+2\),\(\dfrac{b}{a}=a-2\),则\(\dfrac{b^2}{(a-2)^2 }=\)____. 【答案】 \(5\) 【解答】 将两式相…

时序数据库 Apache IoTDB V2.0.6/V1.3.6 发布|新增查询写回功能,优化查询与同步性能

时序数据库 Apache IoTDB V2.0.6、V1.3.6 已经发布! V2.0.6 版本作为树表双模型正式版本,新增表模型查询写回功能,新增位操作函数(内置标量函数)以及可下推的时间函数,同时对数据库监控、性能、稳定性进行了全方…

【2026】 LLM 大模型系统学习指南 (14)

反向传播&#xff08;Backpropagation&#xff09;&#xff1a;神经网络的 “高效学习引擎” 神经网络的核心魅力在于 “自主学习”—— 通过数据调整参数&#xff0c;逐步提升预测准确率。而反向传播&#xff08;简称 BP&#xff09;正是实现这一过程的 “核心算法”&#xf…

expect脚本自动化地执行linux环境下的命令行交互任务

expect命令安装Ubuntu/Debian系统:sudo apt-get install expect Redhat/Centos系统:sudo yum install expect -y expect脚本使用 expect用于自动化地执行linux环境下的命令行交互任务,例如scp、ssh之类需要用户手动…

收藏!2026招聘市场回暖,AI岗位供需反转下程序员的破局指南

脉脉高聘人才智库发布的《2025年度人才迁徙报告》明确指出&#xff0c;自2025年6月起&#xff0c;新经济行业新发岗位量正式实现对去年同期的反超&#xff0c;沉寂许久的招聘市场迎来实质性回暖。而在这波复苏浪潮中&#xff0c;AI领域的表现堪称“顶流”&#xff0c;成为拉动岗…

2026链板提升机市场盘点:哪些企业值得信赖,密封输送机/大倾角输送机/全封闭输送机/上料提升机,提升机实力厂家联系电话

在工业生产自动化升级浪潮中,链板提升机作为垂直输送的核心设备,直接影响着生产线效率与安全。尤其在食品加工、玻璃制造等高精度行业,其稳定性、耐腐蚀性及定制化能力成为企业采购的关键考量。据国内机械行业协会发…