CKEditor4.12使用详解

关于Ckeditor编辑器(四) ckeditor编辑器处理复制word文档带图片 只有研发想不到,没有产品需求做不到,竟然还有ckeditor编辑器的坑 直接从word文档里面复制过来的文本,含有大量的图片,客户懒得一张张图片上传…… word文档里面的图片路径都是这样的,浏览器不能解析 file:///C:/Users/SUPERS~1.Z/AppData/Local/Temp/msohtmlclip1/01/clip_i... 阅读详情

    公司有个文本编辑器用的是summernote。一开始没有上传图片及附件功能,以为是编辑器的问题,所以找到了CKEditor进行替换,后面才知道这是前人留下的坑(前人没有整合bootstrap+summernote,所以上传功能没有实现)

    讲几个重要的点:

        1、因为编辑器是嵌入在一个弹框中,所以需频繁初始化和销毁CKEditor(bootstrap弹框关闭开启、新增修改不同弹框情况)      

// bootstrap 弹框关闭事件,销毁CKEditor实例
$('#formCategoryView').on('hide.bs.modal', function () {
    CKEDITOR.instances.content.destroy();
});

formCategoryView 是弹框ID

var ckeditor = CKEDITOR.replace('content',{ toolbar: 'Basic' });

新增和修改文章都是弹框而出,所以都需初始化。content是文本域的ID。

        2、因编辑文章的弹框有选择时间的子弹框,使用起来会冒泡到父弹框,从而造成编辑器的混乱。

// 防止子元素展示关闭事件冒泡到父元素
$('.form-control').on('show', function(event) {
    event.stopPropagation();
});
$('.form-control').on('hide', function(event) {
    event.stopPropagation();
});

完美解决,form-control是时间控件的className。

        3、图片上传的实现。需要在CKEditor的config.js添加以下代码

config.image_previewText=' ';
config.filebrowserImageUploadUrl = 'requestMappingPath';

requestMappingPath就是你后台上传文件的接口。如果在path后加个?。那么编辑器可支持复制图片上传功能。

后台接口需返回定制格式

resultMap.put("uploaded", 1);
resultMap.put("fileName", fileName);
resultMap.put("url",imageContextPath);

url就是你把图片上传到服务器后的网络地址。

        4、其实以上功能基本可以满足产品了,但产品人员提了一个可一键复制word文档的精彩绝伦(shangxinbingkuang)的需求。

踩过很多坑,想了几个方案:

               4.1--监听复制事件,将文本传入后台,后台对img标签进行处理,后返回

               4.2--制作CKEditor插件,增加导入word文档功能,传后台处理。

               4.3--关闭图像上传功能,这样word复制到编辑器的图片会自动处理成base64数据

         4.2需要学习制作CKEditor插件,官方全是英文文档。。。而且之前下过一个插件,没有配成功,所以放弃了。

         4.3base64数据太长,直接存入数据库性能不好,而且用户端打开文章时间较长

     排除了两个那就选第一个。可是中间又碰到一个大问题,引文word文档中的图片大部分是以file:///格式打头的,chrome因安全机制,不能直接加载本地文件(IE浏览器这回争了一口气)。这就形成了一个冲突,要么关闭图片上传功能,以base64数据传入后台,要么放弃新需求。产品人员暂时选择可以一键复制word。关键代码如下

        

// ckeditor监听复制后事件,获取文本内容,提交至后台,根据后台返回的处理过的内容,重新插入编辑器
ckeditor.on('instanceReady', function(e) {
    this.on('afterPaste', function(event) {
        var content = ckeditor.getData();
        var param ={
            content: content,
        };

        $.ajax({
            url: '',
            type: "POST",
            dataType: "json",
            cache: false,
            headers: {
                "Content-type": "application/json; charset=utf-8",
            },
            data: JSON.stringify(param),
            success: function (result) {
                if (result.state == "success") {
                    var newContent = result.data;
                    var flag = ckeditor.setData(newContent);
                }
            }
        });
    });
});

下面是后台代码

/**
 * Ckeditor编辑器直接复制word功能
 *
 * @param params
 * @return
 */
@PostMapping(path = "")
public Message convertContentForCkeditor(@RequestBody JSONObject params){
    String content = params.getString("content");
    String regEx_img = "<img.*src\\s*=\\s*(.*?)[^>]*?>";
    Pattern p_image;
    Matcher m_image;
    List<String> pics = new ArrayList<String>();
    p_image = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE);
    m_image = p_image.matcher(content);
    String img = "";
    while (m_image.find()) {
        img = img + "," + m_image.group();
        // Matcher m =
        // Pattern.compile("src=\"?(.*?)(\"|>|\\s+)").matcher(img); //匹配src
        Matcher m = Pattern.compile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(img);

        while (m.find()) {
            String reuslt = m.group(1);
            if (pics.contains(reuslt)){
                continue;
            }else{
                pics.add(reuslt);
            }
        }
    }

    if (pics.size() > 0){
        for (String oldUrl : pics)
        {
            if (StringUtils.isEmpty(oldUrl))
                continue;

            String baseCode = "";
            MultipartFile multipartFile = null;
            if (oldUrl.startsWith("data:image"))
            {
                baseCode = oldUrl;
                multipartFile = this.base64ToMultipart(baseCode);
            }
            else if (oldUrl.startsWith("file:///"))
            {
                oldUrl = oldUrl.replace("file:///", "");
                //java.io.File file = new java.io.File(oldUrl);
                try {
                    baseCode = this.getImageStr(oldUrl);
                    baseCode = "data:img/jpg;base64," + baseCode;
                    multipartFile = this.base64ToMultipart(baseCode);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            else{
                try {
                    URL imgUrl = new URL(oldUrl);
                    HttpURLConnection httpUrl = (HttpURLConnection) imgUrl.openConnection();
                    httpUrl.connect();
                    BufferedInputStream bis = new BufferedInputStream(httpUrl.getInputStream());
                    multipartFile = new MockMultipartFile("httpimg","","", bis);
                }catch(Exception e){
                    e.printStackTrace();
                }
            }
            // 上传至服务器,获取url
            content = content.replace(oldUrl, newUrl);
        }
    }

    return Message.result(content);
}

暂时就这样了,后面如还有优化,我会继续更新。

CKEditor4与vue集成 最近公司ERP功能使用富文本编辑器CKEditor,在官网上看了一下发现CKEditor 5的功能不满足需要,所以选择了CKEditor 4 ,但是官网暂时没有提供CKEditor4与Vue的集成,这里记录下集成过程 CKEditor 4下载地址(.zip) https://ckeditor.com/ckeditor-4/download/ 解压后的文件放在Vue项目的static目录下 ... 阅读详情

相关推荐

富文本编辑器:ckeditor(使用ckeditor4-vue)

最近,vue项目中使用了富文本编辑器,经过反复研究,选择了ckeditor,ckeditor分为4和5,我们选的4,网上中文的相关资料比较少,总结一下使用的经验。 官方网站:https://ckeditor.com/ckeditor-4/,里面有下载,文档等,Add-ons里面还有额外的plugin。 构建vue项目 首先使用vue create ckeditor_example_1创建vue项目,因为我们的控件使用了element-ui,因此进入项目先下载一下控件npm install --save el

gao_grace的博客 8421

ckeditor实时监听编辑内容变化

亲测可用,关于script src=“/static/ckeditor/ckeditor.js”,中是否指定src,不同的情况是不一样的,各位可以自己测试。但是事先得下载ckeditor包。关于ckeditor的使用,网上有很多教程,但是django要在前端使用ckeditor实际步骤不需要那么繁琐,网上的教程大多是介绍django管理页面如何使用ckeditor的。而django前端使用仅仅只需要两步:1:下载ckeditor包,导入django目录2:直接在html页面script中使用。

weixin_45386953的博客 1374

vueckeditor是一个用于Vuejs2的Ckeditor编辑器

vue-ckeditor是一个用于Vue.js 2的Ckeditor编辑器

Ajax应用中CKEDITOR多实例问题的解决

著名的Fckeditor升级之后就改名叫了CKEDITOR,界面和功能有了很大的提升,所以我在最近的项目中应用CKEDITOR。随着项目的深入,在Ajax应用较多的一个部分使用CKEDITOR时发现了问题,描述如下: 通过单击一个链接,调入需要显示的内容,其中包括一个富文本编辑器,这里使用了CKEDITOR。第一次调入时,一切正常。噩梦从第二次开始,在Firefox3.5+中,第二次的...

aifeier1982的博客 254

SPAD 单光子雪崩二极管

SPAD,全称为,是一种高灵敏度的光电探测器件,能够在非常低的光照水平下检测单个光子。SPAD在工作时,当一个光子被探测器吸收后,能够触发一个雪崩效应,产生一个可以被检测到的电信号。

qq_42786033的博客 1万+

从JTAG到AS模式:一文搞懂EP4CE10E22C8N所有配置引脚(MSEL, nCONFIG, DATA0)的用法

本文深入解析EP4CE10E22C8N FPGA的配置引脚(MSEL, nCONFIG, DATA0)在不同模式下的使用方法,特别关注从JTAG到AS模式的切换要点。通过详细的配置模式对比、状态机分析和PCB布局建议,帮助开发者避免常见陷阱,提升FPGA配置成功率。

weixin_33713350的博客 313

富文本编辑器CKeditor基本使用。

效果图: 1.CKeditor官网下载 我用的是标准包 2.把整个包都放进JS,然后引入j。 <script src="../js/ckeditor/ckeditor.js"></script> <script src="../js/ckeditor/config.js"></script> 3.html <textarea name=...

qq_42750027的博客 1109

SFM(structure from motion 从运动恢复结构)和MVS(multi-view stereo 多视图立体视觉)

主要目的:SFM是重建稀疏点云的,MVS重建的是稠密点云。 输入的数据:SFM是没有标定的数据,而MVS输入的是标定的数据。 为什么SFM无法重建出稠密的点云,但是MVS可以? SFM中我们用来做重建的点是由特征匹配提供的!这些匹配点天生不密集!MVS则几乎对照片中的每个像素点都进行匹配,几乎重建每一个像素点的三维坐标,这样得到的点的密集程度可以较接近图像为我们展示出的清晰度。 SFM和MVS关系 SFM给MVS算好了输入视角的位姿,内参,稀疏点云以及它们的共视关系,MVS再利用这些信息以及彩色图

Vpn_zc的博客 1万+

CKEditor 4.12.1富文本编辑器的配置与使用(详细版)

由于近期项目要求做一个简易版的CMS填报工具,即在页面上实现所见即所得的功能效果。苦思之际无意中接触到了富文本编辑工具CKEditor,被其强大的功能所深深吸引,因此决定使用CK编辑器来实现CMS填报功能。希望能通过自己的实际开发经验对有类似需求的小伙伴们有所帮助。 本文CKEditor版本为4.12.1版本(目前为最新的版本),与网上大部分老版本(一般是4.8左右的版本)之间会存在一些配置上的...

Vinnie.Wu的博客 6538

基于FPGA的IIR数字滤波器设计

一种是在直接法的基础上,采用预见的算法,目的是提高系统的吞吐量(指对于网络、端口设备或者其他的设施,单位时间内成功传输数据的数量,比特、字节和分组是吞吐量常用的单位),带有预见算法编程实现的IIR数字滤波器有更多的优点,例如:数据传送速度快,效率高等等;设计模拟滤波器时,它的电路一般都很复杂,而且分析起来也很麻烦,电路的复杂性就决定了使用的器件必定很多,很复杂,就这一方面看来,数字滤波器的设计要更加简单灵活,并且模拟电路不容易改变系统的参数,它的性能还很容易受到温度环境的影响,使得噪声很大。

毕业设计区博客 2092

使用安卓的IMU数据进行 行人航位推算(PDR)推算步长 附python 代码

加速度计数据、陀螺仪数据、重力传感器数据、姿态仰角数据。数据分析与定位轨迹生成主要使用Python离线完成。示意图。

三维点云技术探索 1910

html输出元素选中状态,详解CKEditor4.12的html文本、纯文本、被选中的内容获取及赋值...

1、在页面中引入ckeditor核心文件ckeditor.js2、在使用编辑器的地方插入jsp页面控件!!注意在控件中加上class="ckeditor"。(加上这个标识是为了将textArea渲染成ckeditor编辑框,或者使用//初始换编辑器CKEDITOR.replace('content', {filebrowserImageUploadUrl :"${host}/topic/ckupl...

weixin_36459720的博客 771

CD-SSB和NCD-SSB相关内容

NR中,PSS/SSS 和PBCH总是绑定的,因此也称为SSB block。频域由下往上,第121个SC(k = 120)的中心频率,就是SSB的GSCN对应的SSREF(同步参考频率)的出处如上,同步栅格映射到SSB 的RE位置是10个PRB的位置,然后指向RE index 0,即第121个子载波的中心频率;UE获得N_offset_GSCN后,即可结合当前SSB的GSCN推算下一个SSB的GSCN =N_Reference_GSCN(当前SSB的GSCN) + N_offset_GSCN。

asd199086的博客 3413

窗口句柄 禁止调整大小 vb api_CKEditor 5 v12.4.0 发布,可调整图像大小、支持数学化学公式...

CKEditor是新一代的FCKeditor,是一个重新开发的版本。CKEditor是全球最优秀的网页在线文字编辑器之一,因其惊人的性能与可扩展性而广泛的被运用于各大网站。代码结构开发代码包含以下主要元素:主编码文件夹:core/ - CKEditor的核心API 4.单独,它什么都不做,但它提供了整个JavaScript API,使魔术发生。plugins/ - 包含CKEditor 4核心团队...

weixin_39804329的博客 324

lammps案例:堆垛层错能的计算

大家好,我是小马老师。 本文介绍如何使用lammps计算晶体的堆垛层错能。 正常晶体中的原子按照一定的规律排列,原子面按ABCABC……的顺序排列,如下图所示: 当某个原子面被抽出后会形成堆垛层错,如图中的蓝色原子层被抽出,原子面排列变为ABCBCA……: 可通过计算堆垛层错能形成前后的能量差计算堆垛层错能,计算公式为: E0为初始能量 Ef为删除一个原子面后的能量 A为界面面积 下面分享一个lammps计算堆垛层错能的in代码,本代码由Richard Glaze完成,本文稍作修改并进行了注释,以供初

lammps_jiayou的博客 5431

太美了!现代女主jk海军风穿搭四视图

哪个女孩子初高中的时候不买几套JK衣服啊,穿上完全是青春女孩。那还愣着干啥,不得也给你的漫剧女主也穿上!直接就是分享三套JK穿搭,红棕双麻花辫配经典水手服,是那种乖乖巧巧的元气学妹;粉色羊毛卷双马尾,搭配蝴蝶结和小挎包甜度直接拉满;还有灰棕色侧麻花辫,浅蓝上衣配黑色百褶裙,温柔里又带点小酷。下面把这三套角色的完整提示词分享出来,喜欢哪套就拿去参考,改改发型和配色,还能继续解锁新角色!

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 31

RedMine 3.4.12安装CKEditor富文本编辑器4.71

RedMine自带的Markdown编辑器不算太好用。 CKEditor自4.70版本开始支持word/excel文档的拷贝,这个很有用。 现在还在活跃的ckeditor插件 链接: http://www.redmine.org/plugins/redmine-ckeditor https://github.com/a-ono/redmine_ckeditor 0)git安装,第三步需要gi...

net_wolf的专栏 1844

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

CKeditor5实现图片上传

/ 2019-3-27 更新,最初发在这里只是记录一下 CKeditor5 的发布,当时的版本还是 1.0.0-alpha.1,截止今日,已经更新为 v12.0.0,之前的一些方法已经不太兼容,特更新如下,希望能帮助到大家。参考文章:http://blog.ncmem.com/wordpress/2023/11/02/ckeditor5%e5%ae%9e%e7%8e%b0%e5%9b%be%e7%89%87%e4%b8%8a%e4%bc%a0/首先安装 CKeditor5 和 axios 库(上传需要)

weixin_45525177的博客 300

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Ckeditor4上传图片(后台springboot,前后端分离)

;参考:https://www.jianshu.com/p/30912efe59ca 版本:ckeditor_4.12.1_full 1.下载ckeditor,然后解压,复制到项目中: 2.引入 ckeditor.js文件 <script type="text/javascript" src="../../ckeditor/ckeditor.js" ><...

大海无量的博客 5433

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

ckeditor4.7配置图片上传

ckeditor作为老牌的优秀在线编辑器,一直受到开发者的青睐。 这里我们讲解下 ckeditor最新版本4.7的图片上传配置。 https://ckeditor.com/官方 进入下载https://ckeditor.com/download 我们下载完整版 默认本地上传没有开启; 找到ckeditor/plugins/im...

weixin_30293079的博客 111

vue使用CKEditor4编辑器

官网地址https://ckeditor.com/ckeditor-4/download/输入命令 安装好后在vue页面使用 如果有报错可能是你没有我的插件解决方法:下载插件包放到public中 找到public\ckeditor\samples\index.html打开文件 皮肤安装https://ckeditor.com/docs/ckeditor4/latest/guide/dev_skins.html 点击要下载的皮肤后会出现皮肤浏览;再点击下载下载好后解压到指定的文件中,publi

周家大小姐 4528

ckeditor4 使用总结

ckeditor4 定制工具栏 增加字体 配置主题皮肤 配置 默认字体大小和样式 ckeditor4 中,config.js 配置文件不生效的解决方法 ckeditor4 窗口根据内容高度,动态变化 ckeditor4 内容没有同步到 textarea 中 ckeditor4 图片上传相关的配置 删除 图片上传时的高级配置 tab 项 指定图片上传地址 、清除预览区的文字 springboot2.x 实现后台保存图片 图片上传成功和失败时的返回格式 ckeditor4 只显示内容,工具栏不显示,隐藏

猎人在吃肉 8658

提交含有CKEditor的表单

在提交事件中加入这一句 for ( instance in CKEDITOR.instances )   CKEDITOR.instances[instance].updateElement();

shaochengand的专栏 688

vue+ckeditor4整合,ckeditor4上传文件,遇到的问题记录及解决

项目中要求更换富文本编辑器,原来用的是wangEditor,方便简洁,与vue结合较好,但是用户觉得功能太少,于是进行漫长的编辑器更换之路。百度的UEditor满足要求,但是与vue结合的案例几乎没有 ...

dingchaochao_9110的博客 4146

vue2中下载CKEditor 4包使用富文本

CKEditor 4富文本官方说已经不维护了,相当于报废的产品,但是基本的功能还是可以用的,用在vue里面基本没有什么问题网上很多的安装CKEditor 4步骤,但是亲身试用没用直接下载包好用。

qq_60654563的博客 2446

CKEDITOR可以如何直接复制WORD的图文内容到编辑器中?

昨天晚上一个网友给我发私信想一起探讨一下这块的技术问题,因为时间也很晚了,所以也没有交流很长时间,本来计划是今天早上再继续交流的,但是发现网友不在线,所以就先把这块的一点思路发上来和大家分享一下。最近发现网上有很多网友都提了这个需求,看来这个需求也成了行业的痛点,不过话说回来,这个功能确实是非常的实用,对于用户来讲是非常的...

weixin_40855702的博客 150
上一篇: 基于 VLC、vlcj的页面视频播放
bleachj88
博客等级 码龄9年 3粉丝 3原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值