让编辑器支持word的复制黏贴,支持截屏的黏贴

   chrome有很多人性化的API,比如拖拽, 比如图片可以转化为base64等;

   比如知乎上面的回复中可以直接黏贴图片,  就不需要手动点击图片上传按钮, 选择图片, 确认上传等等; 知乎参考地址:打开

  让编辑器支持word的复制黏贴, 其中图片会转化为base64编码, 如果是通过远程打开这个静态页, 黏贴word文档的时候, 图片不会黏贴进来, 因为远程地址无法访问本地磁盘的绝对路径, 如果把下面代码保存成静态界面打开, 那么word中的图片都可以看见, 而且都会被转化为base64编码;

   编辑器支持截屏的黏贴

   让编辑器支持图片直接拖拽, 直接拖拽即可添加图片, 功能更加强大, 而且图片也是base64编码;

  使用的话这new Edit(), 参数为一个可编辑的元素, 比如有contenteditable属性的div或者iframe元素等:

<html>
    <head></head>
    <body>
    <script src="http://cdn.bootcss.com/jquery/1.9.0/jquery.js"></script>

        <div id="edit" contenteditable="true" style="width:400px;height:400px;border:1px solid #f00">

        </div>

    <script>
        function Edit( editEl ) {
            editEl = $(editEl);

            $(editEl).bind("paste", clipFn);

            function clipFn(ev) {

                //把剪贴板中的img通过canvas中专为base64字符串;
                var canvas = document.createElement("canvas");
                var context = canvas.getContext("2d");

                //从word拷贝时候会得到text/html数据;
                var html = $(ev.originalEvent.clipboardData.getData("text/html"));
                html.find("img").each(function () {

                    var img = document.createElement("img");
                    var src = $(this).attr("src"); //.replace(/\\/gi,"\/");
                    var _this = this;
                    img.src = src;

                    img.onload = function () {
                        canvas.width = img.width;
                        canvas.height = img.height;
                        context.drawImage(img, 0, 0, img.width, img.height);
                        var dataBase64 = canvas.toDataURL("image/png").replace("image/png", "image/octet-stream");
                        $("img").each(function (index, el) {
                            //匹配图片;
                            if ($(this).attr("src").replace(/[\/\\]/g,"") ===  src.replace(/[\/\\]/g,"")) {
                                el.src = dataBase64;
                            };
                        });

                        img.onerror = function() {
                            console.log("图片加载失败");
                        };

                        img.onload = null;
                    };

                });

                //如果通过截图或者复制图片的方式会得到  type为"imgage"的图片;
                var ele = ev.originalEvent.clipboardData.items;
                for (var i = 0; i < ele.length; ++i) {
                    if ( ele[i].kind == ‘file‘ && ele[i].type.indexOf(‘image/‘) !== -1 ) {

                        var blob = ele[i].getAsFile();
                        readBlobAsDataURL(blob, function( base64 ) {

                            var img= document.createElement(‘img‘);
                            img.setAttribute(‘src‘, base64);

                            editEl.append(img);;
                        });
                        //阻止默认事件, 避免重复添加;
                        ev.originalEvent.preventDefault();
                    };
                };
            };

            //绑定拖拽事件
            //要给个响应
            editEl.bind("dragover", function() {
                return false;
            });

            //触发事件的响应
            editEl.bind("drop", function(ev) {
                loadImage( ev.originalEvent.dataTransfer.files[0] , function( result ) {
                    editEl.append( "<img src="+result+" />" );
                });
                return false;
            });

            // 加载 图像文件(url路径)
            function loadImage(src, callback){
                // 过滤掉 非 image 类型的文件
                if(!src.type.match(/image.*/)){
                    if(window.console){
                        console.log("选择的文件类型不是图片: ", src.type);
                    } else {
                        window.confirm("只能选择图片文件");
                    }
                    return;
                }

                // 创建 FileReader 对象 并调用 render 函数来完成渲染.
                var reader = new FileReader();
                // 绑定load事件自动回调函数
                reader.onload = function(e){
                    // 调用前面的 render 函数
                    callback(e.target.result);
                };
                // 读取文件内容
                reader.readAsDataURL(src);
            };

            function readBlobAsDataURL(blob, callback) {
                var a = new FileReader();
                a.onload = function(e) {callback(e.target.result);};
                a.readAsDataURL(blob);
            };
        };
    </script>

    <script>
        new Edit("#edit");
    </script>
    </body>
</html>

  很多网上的编辑器里 对图片的支持单一, 都会考虑IE6, IE7,  ff, chrome, 各种兼容问题;

   这个解决方案适合基于chrome内核的浏览器, FF的兼容没有处理, 因为所有的图片数据都是基于base64, 图片就没有上传这一说法了,图片都变成了字符串, 不过这个有个劣势就是每一次提交的数据都会比较大;

DataURL与File,Blob,canvas对象之间的互相转换的Javascript

通过Canvas及File API缩放并上传图片

时间: 2024-12-14 14:04:37

让编辑器支持word的复制黏贴,支持截屏的黏贴的相关文章

WPF中嵌入Office编辑器(支持Word、Excel、PPT、Visio等)

原文:WPF中嵌入Office编辑器(支持Word.Excel.PPT.Visio等) 现在有一个项目,需要使用wpf做一个简单的客户端,用来生成word.excel.ppt.visio等文档,这就需要能够在wpf中嵌入office的编辑器,并对office文档进行编辑. 在网上搜索了一下,发现了一个很好的示例:通过在wpf中嵌入DSOFramer控件来完成对office的编辑功能.效果图如下: 闲话不多说,直接上传源代码(别人的源码,我在百度网盘里面共享了),下载地址:http://pan.b

支持Word文档和其他文件格式间的转换的控件Spire.Doc for .NET

Spire.Doc for .NET是e-iceblue公司推出的一款专门对Microsoft Word 文档进行操作的.NET类控件.这款控件的主要功能在于帮助开发人员轻松快捷地生成.编辑和查看Word文档.同时,开发人员还可以通过使用Spire.Doc for .NET 设置Word文档的格式,插入图片,表格,超链接等.Spire.Doc for .NET 最大的便利之处在于它不依赖于Microsoft Word以及任何其他第三方软件.只需将此款控件安装在您的电脑上,您就可以对word文档进

同时绑定onpropertychange 和 oninput 事件,实时检测 input、textarea输入改变事件,支持低版本IE,支持复制粘贴

实时检测 input.textarea输入改变事件,支持低版本IE,支持复制粘贴 检测input.textarea输入改变事件有以下几种: 1.onkeyup/onkeydown 捕获用户键盘输入事件. 缺陷:复制粘贴时无法检测 2.onchenge 缺陷:要满足触发条件:当前对象的属性改变(由键盘或鼠标触发)且对象失去焦点 3.onpropertychange 当前对象属性改变就会触发 缺陷:只支持低版本IE 4.oninput 和onpropertychange类似,当前对象属性改变就会触发

如何从word中复制内容到网站后台编辑器中

word图片转存,是指UEditor为了解决用户从word中复制了一篇图文混排的文章粘贴到编辑器之后,word文章中的图片数据无法显示在编辑器中,也无法提交到服务器上的问题而开发的一个操作简便的图片转存方案. <b>复制word图文混排内容到UEditor,图片不能正常显示,会将图片转换成一个带链接的占位图,如图 并且图片地址也是本地的路径,如果直接发布内容后,其它的用户将看不到图片(也就是不能正常访问图片,因为图片的路径不正确) 解决办法: 拷贝图片链接->点击上传图片->选择网

空间日志编辑器:word文档图文快速粘贴到web

百度ueditor可以实现word文档图文快速粘贴到web 1.4.2之后官方并没有做功能的改动,1.4.2在word复制这块没有bug,其他版本会出现手动无法转存的情况 本文使用的后台是Java.前端为Jsp(前端都一样,后台如果语言不通得自己做 Base64编码解码) 因为公司业务需要支持IE8 ,网上其实有很多富文本框,效果都很好. 例如www.wangEditor.com  但试了一圈都不支持IE8 . 所以回到Ueditor,由于官方没有维护,新的ueditor 也不知道什么时候能支持

ue/um-editor实现word图片复制

图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码 目前限chrome浏览器使用,但是项目要求需要支持所有的浏览器,包括Windows和macOS系统.没有办法在网上搜了很多资料终于找到一个产品:WordPaster. 浏览器方面能够支持ie6,ie7,ie8,ie9,ie10,chrome,firefox,edge几乎所有的浏览器. 编辑器基本上也是全部都支持,并且支持vue,整合也比较简单. 首先以um-editor的二进制流保存为例: 打开umed

开源一个VC++实现的MP3播放器(支持换肤、截屏、半透明)源码

一.说明: 这个项目是在2012年写的,大学期间比较无聊.程序是基于MFC的,当时初接触开发很多东西都做得不太好(代码规范.效率等),工作后也没再用MFC了,而且个人也不看好MFC的前途,所以就没再去维护更改了.今天把它开源出来,仅供初学者学习.主要用到的技术有:MFC控件自绘.GDI双缓冲绘图.(网上一大推资料,暂且叫技术吧).包括几大模块:主界面.歌词面板模块.截屏模块.公用函数模块. MP3播放功能使用开源库libzplay,很强大的一个音频处理库哦,支持多种格式多种语言(不能跨平台),具

apache支持中文域名绑定,apache支持中文域名绑定,教你怎样让apache支持中文域名绑定

摘要:apache支持中文域名绑定,apache支持中文域名绑定,教你怎样让apache支持中文域名绑定,根据本人实际经验,叫你如何让apache支持中文域名绑定,绝对管用的让apache支持中文域名绑定的方法.在百度搜索:中文域名在线转码然后在线转中文域名为punyco 我从事php开发网站已经有5年之久以前遇到一个同事问我怎么样才能将apache绑定中文域名,支付中文域名访问而我以在实际项目获得并总结的经验告诉他,以下是方法: 根据本人实际经验,叫你如何让apache支持中文域名绑定,绝对管

原创弹出层插件,支持各类型内容,支持回调函数

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, minimal-ui" /> <meta name="apple-mobile-web-app-