震惊!程序员接单竟发现致富新大陆?!
大家好,我是北京某不知名.NET程序员小王。最近接了个CMS企业官网项目,客户说要加个Word一键粘贴功能,要求还挺多:
- 要支持Office全家桶导入
- 公式转换要高级(LaTeX→MathML)
- 还得兼容高龄用户(老板的爸爸要用)
- 预算680块(老板说这是友情价)
技术选型血泪史
本来想直接用KindEditor的,结果发现:
- 公式支持:emz/wmz格式直接GG
- 样式保留:复制粘贴后直接变抽象画
- 微信公众号内容:粘贴后图片全变404
我试了市面上所有开源方案:
- CKEditor:公式插件收费
- TinyMCE:导入功能像抽奖
- WangEditor:对高龄用户太不友好
终极解决方案
最后我决定自己撸一个插件!下面是核心代码:
前端部分 (Vue3)
// Word粘贴魔法插件constwordPastePlugin={install(editor){editor.addButton('word_paste',{title:'Word一键粘贴',icon:'word',click:asyncfunction(){constclipboardItems=awaitnavigator.clipboard.read();for(constclipboardItemofclipboardItems){for(consttypeofclipboardItem.types){if(type==='text/html'){constblob=awaitclipboardItem.getType(type);lethtml=awaitblob.text();// 魔法转换开始html=awaittransformOfficeContent(html);// 插入编辑器editor.insertHtml(html);}}}}});}}// 注册插件KindEditor.use(wordPastePlugin);后端部分 (C#)
// Office文档转换器publicclassOfficeConverter{publicasyncTaskConvertWordToHtml(IFormFilefile){// 用Aspose.Words搞事情(虽然买不起正版)vardoc=newDocument(file.OpenReadStream());// 处理数学公式foreach(Shapeshapeindoc.GetChildNodes(NodeType.Shape,true)){if(shape.OleFormat!=null&&shape.OleFormat.ProgId=="Equation.3"){varlatex=ExtractLatexFromOle(shape);varmathML=LatexToMathML(latex);shape.Remove();// 插入MathML到文档...}}// 保存为HTMLusingvarstream=newMemoryStream();doc.Save(stream,SaveFormat.Html);returnEncoding.UTF8.GetString(stream.ToArray());}// 其他格式转换方法类似...}致富秘籍大公开
说到这个QQ群223813913,我必须得说:
- 新人红包:1-99元随机(我抢到过2毛)
- 会员升级:从青铜到王者(跟打游戏似的)
- 提成比例:20%起跳(最高50%!)
数学题时间:
1单1万 × 50% = 5000元 10单 = 5万元 年入百万不是梦!(注意:以上收入数据未经考证,可能包含夸张成分)
真实项目建议
正经的说,要实现这个需求:
- 商业方案:推荐购买Aspose.Total(预算可能要加个0)
- 开源方案:PDF用PDF.js,公式用MathJax
- 混合方案:Word用mammoth.js,公式单独处理
最终我给客户的报价是:
- 基础功能:680元(只能复制文字)
- 完整功能:6800元(含公式转换)
- VIP尊享:68000元(送程序员上门服务)
客户选了…第一个选项😂
想一起讨论(或者一起做梦赚钱)的欢迎加群:223813913
(群里真有红包,虽然不大,但比老板给的预算大方)
上传工具栏插件文件夹
上传插件文件夹
控件初始化
在head中引入组件文件
注意,不要重复引入jquery,如果您的页面已经引入了jquery这里就不要再引入jquery 1.4了。
WordPaster For KindEditor-4.x # 初始化组件 WordPaster.getInstance({ui:{render:"wdpst"}//目标容器,一般为div});设置快捷键
将插件添加到工具栏,并挂载KindEditor的Ctrl+V快捷键事件
vareditor;KindEditor.ready(function(K){editor=K.create('#content1',{items:['wordpaster','importwordtoimg','netpaster','wordimport','excelimport','pptimport','pdfimport','|','importword','exportword','importpdf','|'],afterCreate:function(){WordPaster.getInstance().SetEditor(this);varself=this;//自定义 Ctrl + V 事件。KindEditor.ctrl(self.edit.doc,'V',function(){WordPaster.getInstance().Paste();});}});});注意
1.如果接口字段名称不是file,请配置FileFieldName。
点击查看教程
2.如果接口返回JSON,请配置ImageMatch
点击查看教程
3.如果接口返回的图片地址没有域名,请配置ImageUrl
点击查看教程
整合效果
效果
编辑器界面
导入Word文档,支持doc,docx
导入Excel文档,支持xls,xlsx
粘贴Word
一键粘贴Word内容,自动上传Word中的图片,保留文字样式。
Word转图片
一键导入Word文件,并将Word文件转换成图片上传到服务器中。
导入PDF
一键导入PDF文件,并将PDF转换成图片上传到服务器中。
导入PPT
一键导入PPT文件,并将PPT转换成图片上传到服务器中。
上传网络图片
示例下载
下载完整示例