支持复制粘贴word公式的CKEditor编辑器

摘要:
由于工作需要必须将word文档内容粘贴到编辑器中使用今年年底flash将不再被浏览器支持但发现word中的图片粘贴后变成了file:///xxxx.jpg这种内容,如果上传到服务器后其他人也访问不了,网上找了很多编辑器发现没有一个能直接解决这个问题考虑到自己除了工作其他时间基本上不使用windows,因此打算使用nodejs来解决这一问题发现不管什么编辑器只要将图片转换成base64后就可以直接使

由于工作需要必须将word文档内容粘贴到编辑器中使用

今年年底flash将不再被浏览器支持

但发现word中的图片粘贴后变成了file:///xxxx.jpg这种内容,如果上传到服务器后其他人也访问不了,网上找了很多编辑器发现没有一个能直接解决这个问题

考虑到自己除了工作其他时间基本上不使用windows,因此打算使用nodejs来解决这一问题

发现不管什么编辑器只要将图片转换成base64后就可以直接使用(IE8及一下可能不支持),由于编辑器中添加word文档功能也只是自己用,因此可以忽略这种浏览器了

找了很久,试用了很多编辑器,发现只有ckeditor的功能还算符合我的需求(支持自定义HTML属性)

然后我写了一个监听粘贴事件的操作,用来获取粘贴之后的file:///xxxx.jpg这种路径

<script>

varservice = {

http: require('http'),

url: require('url'),

querystring : require('querystring'),

fs: require('fs'),

config: {

timeout : 60000,

charset :'utf8',

port: 10101,

host:'127.0.0.1'

},

router : {

index :function(res, query){

res.end('Server is running!');

},

check :function(res, query){

varresult = {status: 1, info:'success'};

result = JSON.stringify(result);

if(typeofquery.callback =='string'){

result = query.callback +'('+ result +')';

}

res.end(result);

},

word :function(res, query){

var_this = service;

varresult = {status: 0, info:'error'};

if(typeofquery.file =='string'){

varimg = query.file.match(/file://+(localhost)?(S+.(png|jpg|jpeg|gif|bmp))/i);

console.log(img);

if(img){

varbase64 = _this.base64_encode(img[2]);

result.status = 1;

result.info ='data:image/'+ img[3] +';base64,'+ base64;

}

}

result = JSON.stringify(result);

if(typeofquery.callback =='string'){

result = query.callback +'('+ result +')';

}

res.end(result);

}

},

start :function(){

var_this=this;

varServer = _this.http.createServer(function(req, res) {

varURL = _this.url.parse(req.url);

varreceive = [];

varrouter =null;

switch(URL.pathname){

case'/word':

router = _this.router.word;

break;

case'/check':

router = _this.router.check;

break;

default:

router = _this.router.index;

}

req.setEncoding(_this.config.charset);

req.addListener('data',function(data) {

receive.push(data);

});

res.writeHead(200, {'Content-Type':'text/plain'});

res.on("close",function(){

console.log("res closed");

});

req.on("close",function(){

console.log("req closed");

});

req.addListener('end',function() {

router(res, _this.querystring.parse(URL.query));

});

});

Server.listen(_this.config.port, _this.config.host, 1024);

Server.setTimeout(_this.config.timeout,function(cli){

cli.end('timeout ');

});

console.log('Server running at http://'+ _this.config.host +':'+ _this.config.port);

},

//base64

base64_encode :function(file){

varbitmap =this.fs.readFileSync(file);

returnnewBuffer(bitmap).toString('base64');

}

};

service.start();

</script>

将以上代码保存为一个word.js文件

然后执行 node word.js就会自动创建一个http服务了

这个时候我们在编辑器中使用jsonp获取到处理完的图片数据替换原来的file:///xxxxxx.jpg路径就搞定了

处理word图片批量上传的代码

支持复制粘贴word公式的CKEditor编辑器第1张支持复制粘贴word公式的CKEditor编辑器第2张

其它的业务逻辑参数代码

支持复制粘贴word公式的CKEditor编辑器第3张支持复制粘贴word公式的CKEditor编辑器第2张

当然也可以将以上代码打包成一个本地执行文件去给不懂电脑的人使用就行了(具体方法我这里就不说了)

前台引用的代码

支持复制粘贴word公式的CKEditor编辑器第5张支持复制粘贴word公式的CKEditor编辑器第2张

下面是实现后的效果,能够自动上传Word中的所有图片,并且有进度条显示

支持复制粘贴word公式的CKEditor编辑器第7张支持复制粘贴word公式的CKEditor编辑器第2张

所有图片都能够保存在服务器中,而且支持分布式图片存储

支持复制粘贴word公式的CKEditor编辑器第9张支持复制粘贴word公式的CKEditor编辑器第2张

编辑器中的图片地址已经全部替换成了服务器的图片地址,其它的用户也能够正常访问

支持复制粘贴word公式的CKEditor编辑器第11张支持复制粘贴word公式的CKEditor编辑器第2张

开源代码,详细内容可以参考这篇文章:http://blog.ncmem.com/wordpress/2019/07/30/ckeditor%e7%b2%98%e8%b4%b4word/

讨论群:223813913

免责声明:文章转载自《支持复制粘贴word公式的CKEditor编辑器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇stl map高效遍历删除的方法 [转]VScode快捷键 windows版本下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

PhpStorm插件之Api Debugger

安装插件  File->Setting->Pluugins   搜索  Api Debugger 如何使用 安装完插件后,RESTART IDE,在编辑器右侧 即可找到最新安装的 Api Debugger 插件    看到这个界面之后就可以把抛弃 postman 啦,赶紧试一下吧  重点在这!重点在这!重点在这! 人生不如意事之十有八九是因...

C# 保存base64格式图片

#region 保存base64格式图片 public static void SavePhotoByString(string base64,stringfullPath) { byte[] buffer = Convert.FromBase64String(base64.Replace(" ",...

KindEditor参数具体解释

width 编辑器的宽度。能够设置px或%。比textarea输入框样式表宽度优先度高。 数据类型: String 默认值: textarea输入框的宽度 演示样例: K.create('#id', { width : '700px' }); height 编辑器的高度,仅仅能设置px,比textarea输入框样式表高度...

ubuntu下git更改默认编辑器

ubuntu下使用git提交代码时,git commit时默认的编辑器是nano,这个编辑器实在是太恶心了,用惯了vim,所以如果修改默认编辑器,可以这样解决: 编辑.git/config,在core这块,加入editor = vim,嗯,这下舒服多了,走路也精神了...

粒子编辑器的选择

乎是没得选,目前在windows上就发现了一款粒子编辑器,叫做cocos2d-windows-particle-editor。 这是一个开源项目,你可以从下面的网址获取。http://code.google.com/p/cocos2d-windows-particle-editor/ 编辑器属性 粒子和发射器是粒子系统不可或缺的组成部分。发射器将大...

monaco代码编辑器

首先我简单介绍下这是个代码编辑器,不过远没有VScode那么强大,不过github上面给的东西实在实在实在本人看不太懂,并且邀了好多人也不是很懂. 总结了我自己用到的几个小玩意,如果你没有用到这个,建议你不要继续往下看了,浪费时间 monacoEditor = monaco.editor.create(document.getElementById('co...