基于Metronic的Bootstrap开发框架经验总结(17)– 使用 summernote插件实现HTML文档的编撰和图表插入操作

语言 1

1、Summernote的简单利用

行使办法:

1)、加载JS和CSS

<!-- include libraries(jQuery, bootstrap) -->
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.css" rel="stylesheet">
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.js"></script> 
<script src="http://netdna.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.js"></script> 

<!-- include summernote css/js-->
<link href="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.7/summernote.css" rel="stylesheet">
<script src="http://cdnjs.cloudflare.com/ajax/libs/summernote/0.8.7/summernote.js"></script>

因MVC的Asp.net应用程序中,我们一般在BundleConfig.cs里面初始化我们的引入JS文件,如下所示。

            //添加对bootstrap-summernote的支持
            css_metronic.Include("~/Content/metronic/assets/global/plugins/bootstrap-summernote/summernote.css");
            js_metronic.Include("~/Content/metronic/assets/global/plugins/bootstrap-summernote/summernote.min.js");
            js_metronic.Include("~/Content/metronic/assets/global/plugins/bootstrap-summernote/lang/summernote-zh-CN.min.js");

            bundles.Add(css_metronic);
            bundles.Add(js_metronic);

 

2)、编写HTML内容

每当HTML页面代码增加下面的标志。

<div id="summernote">Hello Summernote</div>

 

3)、初始化调用

简简单单的初始化代码如下所示。

$(document).ready(function() {
  $('#summernote').summernote();
});

苟增加控件高度的定义,则如下所示。

$('#summernote').summernote({
  height: 300,   
  focus: true    
});

一旦详尽的初始化界面,一般还包语言国际化、图片上传等处理代码,如下所示

function initEditor() {
    $('#Note').summernote({
        lang: 'zh-CN',       // default: 'en-US'
        height: 600,         // set editor height                
        minHeight: null,    // set minimum height of editor
        maxHeight: null,    // set maximum height of editor
        focus: true,         // set focus to editable area after initializing summe
        callbacks: {
            onImageUpload: function (files) { //the onImageUpload API  
                img = sendFile(files[0]);
            }
        }
    });
}

4)、获取内容

var markupStr = $('#summernote').summernote('code');

 

5)、设置情节

设置情节以及收获内容相近,在code后面加内需写入的HTML内容即可。

var markupStr = 'hello world';
$('#summernote').summernote('code', markupStr);

 

假定推行过程遭到给break啦,就未会见执行else的语

以博场合,我们需要在线编HTML内容,然后在页面上还是其他终端上(如小程序、APP应用等)显示,编辑HTML内容之插件有多,本篇介绍因Bootstrap的 summernote插件实现HTML文档的编制和图插入操作,这个控件的施用大便于,并且用户群也不行老。

 语言 2

2、 summernote插件在实质上项目蒙之用

地方介绍了健康 summernote插件的下过程,一般情况下,我们运用它除了编辑HTML内容外,还欲针对图片上传进行处理,以确保我们好直接拿文件及传来后台文件系统里面去,而不是拿它们转换为Base64的编码在页面内。

貌似的初始化代码如下所示。

        function initEditor() {
            $('#Note').summernote({
                lang: 'zh-CN',       // default: 'en-US'
                height: 600,         // set editor height                
                minHeight: null,    // set minimum height of editor
                maxHeight: null,    // set maximum height of editor
                focus: true,         // set focus to editable area after initializing summe
                callbacks: {
                    onImageUpload: function (files) { //the onImageUpload API  
                        img = sendFile(files[0]);
                    }
                }
            });
        }

内部的sendFile的函数如下所示,主要是调整用附件管理模块进行文件之蕴藏。

        //提交文件到服务器处理
        function sendFile(file) {
            data = new FormData();
            data.append("file", file);
            //增加额外的参数
            data.append("folder", '商品信息');
            data.append("guid", $("#ID").val());

            $.ajax({
                data: data,
                type: "POST",
                url: "/FileUpload/Upload",
                cache: false,
                contentType: false,
                processData: false,
                success: function (json) {
                    var data = $.parseJSON(json);
                    var url = data.urls[0];
                    $("#Note").summernote('insertImage', url, 'image name'); // the insertImage API  
                }
            });
        }

貌似的话,我们的文本为当多个以内共享处理,一般建议为FTP方式开展处理,这上头可以参考随笔《当附件管理模块中多对FTP
上污染与预览的支持》,FTP上污染文书可以以FluentFTP这个组件(GitHub地址:https://github.com/hgupta9/FluentFTP ),这个是一个运用很广泛,功能异常强大的FTP组件。

上传附件到服务器上的后台控制器代码如下所示,主要是构建文件信息,上传后返回对应之URL,然后就可在 summernote插件上显示图片了。

        /// <summary>
        /// 上传附件到服务器上
        /// </summary>
        /// <param name="fileData">附件信息</param>
        /// <param name="guid">附件组GUID</param>
        /// <param name="folder">指定的上传目录</param>
        /// <returns></returns>
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Upload(string guid, string folder)
        {
            //如果需要修改字段显示,则参考下面代码处理
            dynamic obj = new ExpandoObject();
            List<string> urls = new List<string>();
            var result = new CommonResult();

            HttpFileCollectionBase files = HttpContext.Request.Files;
            if (files != null)
            {
                foreach (string key in files.Keys)
                {
                    try
                    {
                        #region MyRegion
                        HttpPostedFileBase fileData = files[key];
                        if (fileData != null)
                        {
                            HttpContext.Request.ContentEncoding = Encoding.GetEncoding("UTF-8");
                            HttpContext.Response.ContentEncoding = Encoding.GetEncoding("UTF-8");
                            HttpContext.Response.Charset = "UTF-8";

                            string fileName = Path.GetFileName(fileData.FileName);      //原始文件名称
                            string fileExtension = Path.GetExtension(fileName);         //文件扩展名

                            FileUploadInfo info = new FileUploadInfo();
                            info.FileData = ReadFileBytes(fileData);
                            if (info.FileData != null)
                            {
                                info.FileSize = info.FileData.Length;
                            }
                            info.Category = folder;
                            info.FileName = fileName;
                            info.FileExtend = fileExtension;
                            info.AttachmentGUID = guid;

                            info.AddTime = DateTime.Now;
                            info.Editor = CurrentUser.Name;//登录人
                            //info.Owner_ID = OwerId;//所属主表记录ID

                            result = BLLFactory<FileUpload>.Instance.Upload(info);
                            if (!result.Success)
                            {
                                LogTextHelper.Error("上传文件失败:" + result.ErrorMessage);
                            }
                            else
                            {
                                //返回具体路径地址
                                string serverRealPath = info.BasePath.UriCombine(info.SavePath);
                                if (!Path.IsPathRooted(info.BasePath) &&
                                    !info.BasePath.StartsWith("http://") &&
                                    !info.BasePath.StartsWith("https://"))
                                {
                                    //如果是相对目录,加上当前程序的目录才能定位文件地址
                                    var url = HttpContext.Request.Url;
                                    var baseurl = url.AbsoluteUri.Replace(url.PathAndQuery, "");
                                    serverRealPath = baseurl.UriCombine(serverRealPath).Replace('\\', '/');
                                }
                                urls.Add(serverRealPath);
                            }
                        }
                        #endregion
                    }
                    catch (Exception ex)
                    {
                        result.ErrorMessage = ex.Message;
                        LogTextHelper.Error(ex);
                    }
                }
                obj.urls = urls;
            }
            else
            {
                result.ErrorMessage = "fileData对象为空";
            }

            var newResult = new { Success = result.Success, ErrorMessage = result.ErrorMessage, urls = urls };
            return ToJsonContent(newResult);
        }

界面效果使己以随笔介绍的同样《微信小序成后台数据管理落实商品数的动态展示、维护》。

案例对货的详细信息的富文本进行编制,来进行图片文字的编制处理,如下界面所示。

语言 3

当我们插入图片的时候,弹出一个对话框界面,选择文件上传后返回URL显示在SummerNote插件上。

 语言 4

上传文件成功后,通过下的代码插入一个图纸,如下代码。

    $.ajax({
        data: data,
        type: "POST",
        url: "/FileUpload/Upload",
        cache: false,
        contentType: false,
        processData: false,
        success: function (json) {
            var data = $.parseJSON(json);
            var url = data.urls[0];
            $("#Note").summernote('insertImage', url, 'image name'); // the insertImage API  
        }
    });

 以上就是我当骨子里的Bootstrap框架项目遭到利用
summernote插件实现HTML文档的修和图片插入操作,整体性还是于便于上手的,经验供大家借鉴。

 其他连锁随笔可以参考阅读下:

《重组bootstrap
fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程》

《据悉Metronic的Bootstrap开发框架经验总结(16)–
使用插件bootstrap-table实现表格记录的查询、分页、排序等处理》

冲Metronic的Bootstrap开发框架经验总结(15)– 更新使用Metronic
4.75版本

自开发框架提高开支效率说由 

因Metronic的Bootstrap开发框架经验总结(14)–条码和二维码的变动与打印处理

依据Metronic的Bootstrap开发框架经验总结(13)–页面链接收藏夹功能的落实2

冲Metronic的Bootstrap开发框架经验总结(12)–页面链接收藏夹功能的落实

基于Metronic的Bootstrap开发框架经验总结(11)–页面菜单的几乎种表现方式 

据悉Metronic的Bootstrap开发框架经验总结(10)–优化Bootstrap图标管理 

在MVC控制器里面用dynamic和ExpandoObject,实现多少转义的出口

根据Metronic的Bootstrap开发框架经验总结(9)–实现Web页面内容的打印预览和保留操作

冲Metronic的Bootstrap开发框架经验总结(8)–框架功能一体化界面介绍

依据Metronic的Bootstrap开发框架经验总结(7)–数据的导入、导出及附件的查阅处理 

根据Metronic的Bootstrap开发框架经验总结(6)–对话框及提示框的拍卖及优化

冲Metronic的Bootstrap开发框架经验总结(5)–Bootstrap文件及传插件File
Input的利用

依据Metronic的Bootstrap开发框架经验总结(4)–Bootstrap图标的提和动

据悉Metronic的Bootstrap开发框架经验总结(3)–下拉列表Select2插件的以 

基于Metronic的Bootstrap开发框架经验总结(2)–列表分页处理与插件JSTree的采取

根据Metronic的Bootstrap开发框架经验总结(1)-框架总览及菜单模块的处理 

输出:

该插件是开源之,官网地址:http://summernote.org/,GitHub地址:https://github.com/summernote/summernote/、安装调整还挺有益。

count = 0
while count <= 5 :
    count += 1
    if count == 3:break
    print("Loop",count)

else:
    print("循环正常执行完啦")
print("-----out of while loop ------")

Summernote
是一个略利落,所呈现就所得(WYSIWYG)的编辑器,Summernote是一个轻量级、灵活基于Bootstrap和jQuery的HTML文本编辑器,拥有强大的API配置效益,多国语言支持支持Bootstrap2.x和3.0,支持视频及图纸上传以及代码的高亮显示,多种
后台语言版示例以及多主体支持,在浏览器兼容方面,支持IE9+以及现代之浏览器Chrome,Firefox,Safari等,在动端应该发不易的见,还是颇不利的,值得以。

#x or y x 为非零(True),则返回x
print (1 or 2) #1
print (0 or 2 )#2
#x and y x 为非零(True),则返回y
print(1 and 2)#1
print (0 and 2)#0 3<2
思考题
print(1>2 and 3 or 4 and )

#数字与布尔值的转换
#ps:int------->bool 非零转换成bool 为true 0转换成bool值为false。
print (bool(2)) true
print (bool(2-)) true
print (bool(0)) false
#bool------> int
print (int(True)) #1
print (int(False))#0

 

2、while else
跟另外语言else 一般才同if 搭配不同,在Python 中尚出只while …else 语词

 

语言 5

相思只要以格式化输出中仅仅的输出%,加%%。
%占位符,s,字符串,d digit数字
%%止是独的来得百分号%。

name = input('请输入姓名')
age = input('请输入年龄身高')
height = input('请输入身高')
msg="我叫%s,今年%s,升高%s,我的学习进度为3%%" %(name,age,height)

1,F or F False
2,T or F True
3,T or F True
4,F or F or F False
5,f or f or f False
6,f or f or f False

 

while 后面的else 作用是凭借,当while 循环正常执行了,中间没有受break
中止的语,就见面执行else后面的言语

3、初始编码
(1)最早的密码本-ASCII码,最早是七个,涵盖了英文字母,大小写,特殊字符,数字。
雁过拔毛1位,以备拓展,所以ASCII是8各类。
(2)ASCII 只能表示256栽或,太少,创办为万国码。Unicode。
Unicode开始为此16位代表一个字符,不行。升级为32各类代表一个字符。
唯独Unicode表示一个字符太丰富,升级为utf-8、utf-16、utf-32
8位 =1字节bytes
utf-8
一个字符最少用八各类来表示,英文用八各项,欧洲之仿用16各来代表,中文用24员来表示
utf-16 一个字符最少用16号来代表。
(3)GBK 中国总人口好发明的。一个字节用少独字节 16员去表示。
1bit(位)
8 bit=1bytes
1 byte 1024byte=1KB
1kb 1024kb =1MB
1MB 1024MB= 1GB
1GB 1024GB =1TB

name = input("请输入你的名字:")
age =input("请输入你的年龄:")
job =input("请输入你的工作:")
hobbie =input("请输入你的爱好:")
msg ='''--------------info of %s--------------
name : %s
age : %d
job : %s
hobbie : %s
--------------end--------------''' %(name,name,int(age),job,hobbie)
print(msg)
#优先级,()>nor>and>or
print(2>1 and 1<4)true
print (2>1and 1<4 or 2<3 and 9>6 or 2>4)
1,3>4 or 4<3 and 1==1
2,1 < 2 and 3 < 4 or 1>2 
3,2 > 1 and 3 < 4 or 4 > 5 and 2 < 1
4,1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8
5,1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
6,not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6
'''

 

逻辑运算

”’

 

#格式化输出1:
name = input('请输入姓名')
age = input('请输入年龄身高')
height = input('请输入身高')
msg="我叫%s,今年%s,升高%s,"%(name,age,height)

语言 6

语言 7

 

1、格式化输出

语言 8

 

 

count = 0
while count <= 5 :
    count += 1
    print("Loop",count)

else:
    print("循环正常执行完啦")
print("-----out of while loop ------")

 

(1)

4、基本运算符

语言 9#and or
not

语言 10

 

语言 11

 

输出:

 

语言 12

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图