Java开发之富文本编辑器TinyMCE

一、题外话

最近负责了一个cms网站的运维,里面存在很多和编辑器有关的问题,比如编辑一些新闻博客,论文模块。系统采用的是FCKEditor,自我感觉不是很好,如下图

特别是在用户想插入一个图片的话,就很麻烦,所有用户共享一个文件目录,这样就不好了,于是便想到了TinyMCE编辑器,博客园默认的也是这个编辑器,接下

来,我们开始吧

二、TinyMCE编辑器集成步骤

2.1:下载相关文件

(1)下载TinyMCE插件包

下载地址:   https://www.tinymce.com/download/,如下图所示,下载开发版

(2)下载其他功能包

包括中文语言包zh_CN.js,图片上传操作需要的plugin.min.js和jquery.form.js

或者可以从本人的网盘下载:      链接:http://pan.baidu.com/s/1skJ6uRV 密码:xn0r   这一点很重要,很重要,很重要哦

下载完成后如下图所示

2.2:操作步骤

(1):复制TinyMCE到项目中

解压下载到的tinymce_4.6.4_dev.zip,解压后会有一个tinymce文件夹,将整个文件夹放到WebContent目录下,目录结构如下图所示

(2):页面集成TinyMCE

在页面的JS标签中初始化TinyMCE编辑器,代码如下所示

<script type="text/javascript">
tinymce.init({
            selector: "textarea",
            upload_image_url: ‘./upload‘, //配置的上传图片的路由
            height: 400,
            language:‘zh_CN‘,
            plugins: [
                ‘advlist autolink lists link  charmap print preview hr anchor pagebreak‘,
                ‘searchreplace wordcount visualblocks visualchars code fullscreen‘,
                ‘insertdatetime media nonbreaking save table contextmenu directionality‘,
                ‘emoticons template paste textcolor colorpicker textpattern imagetools codesample toc help‘
              ],
              toolbar1: ‘undo redo | insert | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image‘,
              toolbar2: ‘print preview media | forecolor backcolor emoticons | codesample help‘,
              image_advtab: true,
              templates: [
                { title: ‘Test template 1‘, content: ‘Test 1‘ },
                { title: ‘Test template 2‘, content: ‘Test 2‘ }
              ],
            menubar: false
        });
</script>

运行如下图所示,基本的集成已经完毕

三、TinyMCE编辑器本地上传图片功能

注:默认的TinyMCE是没有上传本地图片到服务器的功能的,所以这里我们需要自己实现,下面我们就说一说具体的实现步骤

3.1:集成uploadimage插件

在./tinymce/js/tinymce/plugins目录下新建一个uploadimage目录,放入下载的plugin.min.js,目录结构如下图所示

3.2:在TinyMCE初始化中添加上传图片按钮

代码如下图所示,需要注意的是在plugins中和toobar2中都需要加入uploadimage,toolbar1代表第一行菜单,toolbar2代表第二行菜单,次初始化代码是来自https://www.tinymce.com/docs/demo/full-featured/  官网一个完整的例子,功能按钮大家可以试着去除或者添加

tinymce.init({
            selector: "textarea",
            upload_image_url: ‘./upload‘, //配置的上传图片的路由
            height: 400,
            language:‘zh_CN‘,
            plugins: [
                ‘advlist autolink lists link  charmap print preview hr anchor pagebreak‘,
                ‘searchreplace wordcount visualblocks visualchars code fullscreen‘,
                ‘insertdatetime media nonbreaking save table contextmenu directionality‘,
                ‘emoticons template paste textcolor colorpicker textpattern imagetools codesample toc help uploadimage‘
              ],
              toolbar1: ‘undo redo | insert | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image‘,
              toolbar2: ‘print preview media | forecolor backcolor emoticons | codesample help uploadimage‘,
              image_advtab: true,
              templates: [
                { title: ‘Test template 1‘, content: ‘Test 1‘ },
                { title: ‘Test template 2‘, content: ‘Test 2‘ }
              ],
            menubar: false
        });

再次运行,发现在编辑器的菜单栏多了一个图片的按钮就是上传图片了(TinyMCE默认有一个image,可以去掉,因为那个image只可以给网络图片的URL),总这里plugins里面

已经把默认的image去掉了,如下图

3.3:实现上传本地图片到服务器的功能

前提:需要先用java实现一个upload工具类,此工具类可以完成本地图片上传到服务器,并返回图片的URL给ajax,ajax在success的方法中接收URL并向TinyMCE中插入一个image标签

JS核心代码如下,已包含在plugin.min.js文件中,这里注意TinyMCE的版本不用命令可能会有差异

 success: function (data) {
                    //alert(‘2222‘);
                    //alert(data);
                    if (data!=null) {
                        //alert(‘4444‘);
                        editor.focus();
                        //tinyMCE 4.X版本的插入对象
                        tinyMCE.activeEditor.insertContent(‘<img src="‘+data+‘"></img>‘);
//                        editor.selection.setContent(dom.createHTML(‘img‘, {src: src}));
//                        data.file_path.forEach(function (src) {
//                            editor.selection.setContent(dom.createHTML(‘img‘, {src: src}));
//                        })
                    }

ajax提交form表单的操作中还用到了form.ajaxSubmit,所以需要在编辑器的页面引入jquery.form.js 包,整体如下所示

<script type="text/javascript" src="./tinymce/js/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="./tinymce/js/tinymce/tinymce.min.js"></script>
<script type="text/javascript" src="./tinymce/js/tinymce/jquery.tinymce.min.js"></script>
<script type="text/javascript" src="./tinymce/js/jquery.form.js"></script>

实现效果,点击图片上传可以从本地选择图片文件,确定后ajax异步上传,并且返回图片的URL,让TinyMCE执行插入img标签的操作

4:演示一个编辑器发布网页内容的例子

4.1:添加发布按钮

在编辑器页面下面添加一个发布文章的按钮,定义onclick事件为GetTinyMceContent()

function GetTinyMceContent()
{
// <!--
// http request方式b_content的参数不能太长,太长会截断,这里只是做演示编辑器,真实情况是获取到内容到数据库然后
// 展示的时候在页面遍历数据库字段content的内容
// -->
//alert(‘11‘);
window.location.href="blog.jsp?b_content="+tinyMCE.activeEditor.getContent();
}

4.2:添加文章显示页面

如下图所示

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文章内容-HTML</title>
</head>
<body>
<h2 align="center">我的第一篇博文</h2>
<%= request.getParameter("b_content") %>
</body>
</html>

4.3:运行效果

在编辑器输入一些内容,并上传一个图片,如下图示

点击发布文章的按钮,如下图所示,发布成功可以在网页查看文章的输出格式,大功已经告成!

4.4:总结

在真实的环境中TinyMCE的内容不会通过在Request请求的后面以?参数名=参数值,然后在页面<%= request.getParameter("b_content") %>的形式处理,这里只是做一个流程的演示就没涉及数据库内容。真实的场景是编辑完后,把带有HTML标签的TinyMCE的内容存到数据库的一个text大文本字段里面,然后前端取出字符串对象插入到HTML元素中

时间: 2024-10-27 06:51:08

Java开发之富文本编辑器TinyMCE的相关文章

django后台集成富文本编辑器Tinymce的使用

富文本编辑器Tinymce是使用步骤: 1.首先去python的模块包的网站下载一个django-tinymce的包 2.下载上图的安装包,然后解压,进入文件夹,执行: (pychrm直接运行命令pip install django_tinymce直接下载安装) 安装完成之后,就可以在C:\python3.6\Lib\site-packages这个文件夹. 点击进入文件夹,copy"tinymce"这个文件到你的项目的根目录下. 3.配置tinycmce到你的项目中,配置到admin数

富文本编辑器TinyMCE的使用(React Vue)

富文本编辑器TinyMCE的使用(React Vue) 一,需求与介绍 1.1,需求 编辑新闻等富有个性化的文本 1.2,介绍 TinyMCE是一款易用.且功能强大的所见即所得的富文本编辑器. TinyMCE的优势: 开源可商用,基于LGPL2.1 插件丰富,自带插件基本涵盖日常所需功能 接口丰富,可扩展性强,有能力可以无限拓展功能 界面好看,符合现代审美 提供经典.内联.沉浸无干扰三种模式 对标准支持优秀(自v5开始) 多语言支持,官网可下载几十种语言. 二,配置集成并组件化 2.1,通用配置

react引入富文本编辑器TinyMCE

这周做了一个PC端的service后台需求,要求有富文本编辑器,插入图片.表格,字体字号背景色等等, 最后引入了富文本编辑器TinyMCE 对于TinyMCE的简介: TinyMCE是一款易用.且功能强大的所见即所得的富文本编辑器.同类程序有:UEditor.Kindeditor.Simditor.CKEditor.wangEditor.Suneditor.froala等等. TinyMCE的优势: 开源可商用,基于LGPL2.1 插件丰富,自带插件基本涵盖日常所需功能 接口丰富,可扩展性强,有

tinymce 富文本编辑器 编写资料

tinymce官方文档: 粘贴图片插件 博客搬运地址 使用Blob获取图片并二进制显示实例页面 tinymce自动调整插件 是时候掌握一个富文本编辑器了——TinyMCE(1) XMLHttpRequest 2.0的家臣们 URL.createObjectURL和URL.revokeObjectURL 如何使用 blob:http:// 隐藏一个mp3文件的真实地址? https://www.z-u-i-d-a-i-m-a.com/question/3913274460982272.htm 使用

在vue中使用tinymce富文本编辑器,解决tinymce在dialog对话框中层级太低的问题

1.安装 npm install tinymce -S 2.把node_modules\tinymce里面的文件 包括tinymce文件夹 全部复制到static文件夹下面,如下图 3.tinymce默认是英文界面,还需要下载一个中文语言包zh_CN.js https://www.tiny.cloud/get-tiny/language-packages/ 在tinymce文件夹下新建langs文件夹,将下载好的语言包放到langs文件夹下面如图  4.在main.js中引入tinymce  5

[开发总结]富文本前端框架对比分析

[排序不分先后,只是标记数量] 1. 如果你想直接引入,完全不定制,扔进项目就直接用 CKEditor TinyMCE Froala Quill Summernote(框架不太友善) Trix 2. 想有非常高度的定制 可以看看 Slate.js,它基于 React.js. 用了 Slate.js 的知名产品有 Taskade,Taskade 的编辑器非常漂亮而且格式很多. 如果想开发和 Taskade 一样的编辑器,我觉得用如上里任何一个现成编辑器都是很难开发出来的(甚至不可能,因为要改动那么

Java-Swing中实现富文本编辑器

问题介绍 使用Java-swing技术实现邮件发送功能.(为什么使用Java,因为我们组没学过C#) 邮件编辑使用富文本编辑器,用户可以自定义邮件格式. 支持上传图片. 支持附件发送. 内容支持名字的替换,显得像是单独给某个人发的一样. 功能图片展示 解决过程 开始看到这个需求,也没有什么想法感觉还好,于是百度.谷歌了一堆东西.首先百度Java swing的富文本编辑器组件,虽然确实找到了几个组件但是都是很老的版本,而且是一个独立的弹窗,样式也有点难看.问了一下学长的意见,说:“接受不了独立弹窗

各大富文本编辑器对比

各大WYSIWYG编辑器的简单比较 TinyMCE强大的富文本编辑器,支持拖拽.粘贴上传图片,支持拖拽表格.博客园用的就是这个编辑器. 参考博客:1.   https://segmentfault.com/a/1190000012791569#articleHeader8   vue项目移植tinymce踩坑 2. https://blog.csdn.net/haoxiaoyong1014/article/details/82683428   Vue 自定义富文本编辑器 tinymce 支持导入

在 Vue 项目中引入 tinymce 富文本编辑器

项目中原本使用的富文本编辑器是 wangEditor,这是一个很轻量.简洁编辑器 但是公司的业务升级,想要一个功能更全面的编辑器,我找了好久,目前常见的编辑器有这些: UEditor:百度前端的开源项目,功能强大,基于 jQuery,但已经没有再维护,而且限定了后端代码,修改起来比较费劲 bootstrap-wysiwyg:微型,易用,小而美,只是 Bootstrap + jQuery... kindEditor:功能强大,代码简洁,需要配置后台,而且好久没见更新了 wangEditor:轻量.