KindEditor网页编辑器如何支持从Word复制公式并粘贴到内容区?

震惊!程序员接单竟发现致富新大陆?!

大家好,我是北京某不知名.NET程序员小王。最近接了个CMS企业官网项目,客户说要加个Word一键粘贴功能,要求还挺多:

  • 要支持Office全家桶导入
  • 公式转换要高级(LaTeX→MathML)
  • 还得兼容高龄用户(老板的爸爸要用)
  • 预算680块(老板说这是友情价)

技术选型血泪史

本来想直接用KindEditor的,结果发现:

  1. 公式支持:emz/wmz格式直接GG
  2. 样式保留:复制粘贴后直接变抽象画
  3. 微信公众号内容:粘贴后图片全变404

我试了市面上所有开源方案:

  • CKEditor:公式插件收费
  • TinyMCE:导入功能像抽奖
  • WangEditor:对高龄用户太不友好

终极解决方案

最后我决定自己撸一个插件!下面是核心代码:

前端部分 (Vue3)

// Word粘贴魔法插件
const wordPastePlugin = {
  install(editor) {
    editor.addButton('word_paste', {
      title: 'Word一键粘贴',
      icon: 'word',
      click: async function() {
        const clipboardItems = await navigator.clipboard.read();
        for (const clipboardItem of clipboardItems) {
          for (const type of clipboardItem.types) {
            if (type === 'text/html') {
              const blob = await clipboardItem.getType(type);
              let html = await blob.text();
              
              // 魔法转换开始
              html = await transformOfficeContent(html);
              
              // 插入编辑器
              editor.insertHtml(html);
            }
          }
        }
      }
    });
  }
}

// 注册插件
KindEditor.use(wordPastePlugin);

后端部分 (C#)

// Office文档转换器
public class OfficeConverter
{
    public async Task ConvertWordToHtml(IFormFile file)
    {
        // 用Aspose.Words搞事情(虽然买不起正版)
        var doc = new Document(file.OpenReadStream());
        
        // 处理数学公式
        foreach (Shape shape in doc.GetChildNodes(NodeType.Shape, true))
        {
            if (shape.OleFormat != null && shape.OleFormat.ProgId == "Equation.3")
            {
                var latex = ExtractLatexFromOle(shape);
                var mathML = LatexToMathML(latex);
                shape.Remove();
                // 插入MathML到文档...
            }
        }
        
        // 保存为HTML
        using var stream = new MemoryStream();
        doc.Save(stream, SaveFormat.Html);
        return Encoding.UTF8.GetString(stream.ToArray());
    }
    
    // 其他格式转换方法类似...
}

致富秘籍大公开

说到这个QQ群223813913,我必须得说:

  • 新人红包:1-99元随机(我抢到过2毛)
  • 会员升级:从青铜到王者(跟打游戏似的)
  • 提成比例:20%起跳(最高50%!)

数学题时间:

1单1万 × 50% = 5000元
10单 = 5万元
年入百万不是梦!

(注意:以上收入数据未经考证,可能包含夸张成分)

真实项目建议

正经的说,要实现这个需求:

  1. 商业方案:推荐购买Aspose.Total(预算可能要加个0)
  2. 开源方案:PDF用PDF.js,公式用MathJax
  3. 混合方案:Word用mammoth.js,公式单独处理

最终我给客户的报价是:

  • 基础功能:680元(只能复制文字)
  • 完整功能:6800元(含公式转换)
  • VIP尊享:68000元(送程序员上门服务)

客户选了…第一个选项😂


想一起讨论(或者一起做梦赚钱)的欢迎加群:223813913
(群里真有红包,虽然不大,但比老板给的预算大方)

上传工具栏插件文件夹

插件目录

上传插件文件夹

WordPaster目录

控件初始化

在head中引入组件文件
注意,不要重复引入jquery,如果您的页面已经引入了jquery这里就不要再引入jquery 1.4了。


    
    WordPaster For KindEditor-4.x
    
    
    
    
    
    
    
    
    

 
# 初始化组件
    
    
    
        WordPaster.getInstance({
            ui:{render:"wdpst"}//目标容器,一般为div
        });
    

设置快捷键

将插件添加到工具栏,并挂载KindEditor的Ctrl+V快捷键事件
初始化和设置快捷键

	    var editor;
	    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);
			    var self = this;
			    //自定义 Ctrl + V 事件。
			    KindEditor.ctrl(self.edit.doc, 'V', function () { WordPaster.getInstance().Paste(); });
			}
			});
	    });

注意

1.如果接口字段名称不是file,请配置FileFieldName。

文件字段名称
点击查看教程

2.如果接口返回JSON,请配置ImageMatch

图片匹配规则
点击查看教程

3.如果接口返回的图片地址没有域名,请配置ImageUrl

图片域名
点击查看教程

整合效果

整合效果

效果

编辑器界面

image

导入Word文档,支持doc,docx

粘贴Word和图片

导入Excel文档,支持xls,xlsx

粘贴Word和图片

粘贴Word

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

Word转图片

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

导入PDF

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

导入PPT

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

上传网络图片

自动上传网络图片

示例下载

下载完整示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值