基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作


Posted in Javascript onMay 12, 2016

本篇文章主要介绍如何实现Web页面内容的打印预览和保存操作的相关知识,一起学习吧!

1、Web页面打印的问题

在此之前,我一般使用比较好用的LODOP来执行打印的操作,这个在我之前有很多文章都有涉及,这个控件是一个ActiveX的控件,需要下载安装后就可以在页面是进行打印的排版设计,预览,打印等操作,还是很方便的一个控件,因此都很适合普通内容的打印,证件的套打等操作。

不过随着浏览器技术的更新,这个插件在Chrome或者FireFox上好像不受支持了,基本上摒弃了这种插件的处理方式了。例如如果我在页面上需要打印对话框里面的内容,如下所示。

基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作

如果按正常使用LODOP的方式来进行处理的话,那么会得到Chrome浏览器的提示,并且这个不管你重新下载安装、更新LODOP控件,都会继续这个错误提示的。

基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作

对于替代方式,这里就是本篇内容介绍的主题了,我一直喜欢寻找一些比较好的方式的方式来实现自己需要的功能,于是找到了PrintThis的这个插件(https://github.com/jasonday/printThis)以及jquery-print-preview-plugin(https://github.com/etimbo/jquery-print-preview-plugin),对比两者我比较喜欢第一个的简洁方便的使用。

2、PrintThis打印插件的使用

有了上面的问题,我们引入一个新的打印方式,也就是JQuery插件来实现我们所需要页面内容的打印操作。

这个插件的使用非常简洁方便,首先需要在页面里面引入对应的JS文件,如下所示。

<script src="~/Content/JQueryTools/printThis/printThis.js"></script>

我们再在页面顶部增加两个按钮,如打印和导出操作,代码如下所示

<div class="toolbar">
 <a href="#" onclick="javascript:Preview();"><img alt="打印预览" src="~/Content/images/print.gif" /><br />打印预览</a>
 <a href="#" onclick="javascript:SaveAs();"><img alt="另存为" src="~/Content/images/saveas.gif" /><br />另存为</a>     
</div>

基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作

然后我们还需要声明一个DIV用来放置显示的Web页面内容,这样也方便对它调用进行打印操作。

基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作

我们打印的处理代码也很简单,就是直接对层进行打印处理就可以了,可以看到下面的使用代码非常简单。

//打印预览
    function Preview() {
      $("#printContent").printThis({
        debug: false,
        importCSS: true,
        importStyle: true,
        printContainer: true,
        loadCSS: "/Content/Themes/Default/style.css",
        pageTitle: "通知公告",
        removeInline: false,
        printDelay: 333,
        header: null,
        formValues: true
      });
    };

打印执行后,IE和Chrome都会弹出一个打印预览对话框,确认是否进行打印的操作。

基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作

3、页面内容的保存操作

有时候,为了方便业务处理,我们一般也可以提供给用户一个导出打印内容的操作,如下所示代码就是把打印的内容导出到Word里面给用户加工等用途。

function SaveAs() {
      var id = $('#ID2').val();
      window.open('/Information/ExportWordById?id=' + id );
    }

上面的操作,主要就是调用了MVC的控制器方法进行处理,传入一个id就可以把内容提取出来,然后把它生成所需的Word内容即可。

这里后台我们主要利用Apose.Word控件来进行模板化的文档生成。

其中我们可以在书签里面定义或者查看一些书签的信息,如下图所示。

基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作

这样我们在代码里面,就可以获取信息并指定这个Word模板了。

InformationInfo info = BLLFactory<Information>.Instance.FindByID(id);
      if (info != null)
      {
        string template = "~/Content/Template/政策法规模板.doc";
        string templateFile = Server.MapPath(template);
        Aspose.Words.Document doc = new Aspose.Words.Document(templateFile);

WORD模板的内容,可以使用文本替换方式,如下所示。

SetBookmark(ref doc, "Content", info.Content);

也可以使用书签BookMark方式查询替换,如下代码所示。

Aspose.Words.Bookmark bookmark = doc.Range.Bookmarks[title];
      if (bookmark != null)
      {
        bookmark.Text = value;
      }

对于主体的HTML内容,这需要特殊对待,一般需要使用插入HTML的专用方式进行写入内容,否则就显示HTML代码了,使用专用HTML方法写入的内容,和我们在网页上看到的基本没有什么差异了。如下代码所示。

DocumentBuilder builder = new DocumentBuilder(doc);
        Aspose.Words.Bookmark bookmark = doc.Range.Bookmarks["Content"];
        if (bookmark != null)
        {
          builder.MoveToBookmark(bookmark.Name);
          builder.InsertHtml(info.Content);
        }

整个导入WORD文档的方法就是利用这些内容的整合,实现一个标准文档的生成,这种业务文档是固定模板的,因此很适合在实际业务中使用,比起使用其他方式自动生成的HTML文件或者文档,有更好的可塑性和美观性。

整个代码如下所示。

public FileStreamResult ExportWordById(string id)
    {
      if (string.IsNullOrEmpty(id)) return null;
      InformationInfo info = BLLFactory<Information>.Instance.FindByID(id);
      if (info != null)
      {
        string template = "~/Content/Template/政策法规模板.doc";
        string templateFile = Server.MapPath(template);
        Aspose.Words.Document doc = new Aspose.Words.Document(templateFile);
        #region 使用文本方式替换
        //Dictionary<string, string> dictSource = new Dictionary<string, string>();
        //dictSource.Add("Title", info.Title);
        //dictSource.Add("Content", info.Content);
        //dictSource.Add("Editor", info.Editor);
        //dictSource.Add("EditTime", info.EditTime.ToString());
        //dictSource.Add("SubType", info.SubType); 
        //foreach (string name in dictSource.Keys)
        //{
        //  doc.Range.Replace(name, dictSource[name], true, true);
        //} 
        #endregion
        //使用书签方式替换
        SetBookmark(ref doc, "Title", info.Title);
        SetBookmark(ref doc, "Editor", info.Editor);
        SetBookmark(ref doc, "EditTime", info.EditTime.ToString());
        SetBookmark(ref doc, "SubType", info.SubType);
        //SetBookmark(ref doc, "Content", info.Content);
        //对于HTML内容,需要通过InsertHtml方式进行写入
        DocumentBuilder builder = new DocumentBuilder(doc);
        Aspose.Words.Bookmark bookmark = doc.Range.Bookmarks["Content"];
        if (bookmark != null)
        {
          builder.MoveToBookmark(bookmark.Name);
          builder.InsertHtml(info.Content);
        }        
        doc.Save(System.Web.HttpContext.Current.Response, info.Title, Aspose.Words.ContentDisposition.Attachment,
          Aspose.Words.Saving.SaveOptions.CreateSaveOptions(Aspose.Words.SaveFormat.Doc));
        HttpResponseBase response = ControllerContext.HttpContext.Response;
        response.Flush();
        response.End();
        return new FileStreamResult(Response.OutputStream, "application/ms-word");
      }
      return null;
    }
    private void SetBookmark(ref Aspose.Words.Document doc, string title, string value)
    {
      Aspose.Words.Bookmark bookmark = doc.Range.Bookmarks[title];
      if (bookmark != null)
      {
        bookmark.Text = value;
      }
    }

最后导出的WORD文档就是模板化的具体文档内容了,WORD预览界面如下所示。

基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作

以上所述是小编给大家介绍的基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作 的相关内容,希望对大家有所帮助,如果大家想了解更多资讯敬请关注三水点靠木网站!

Javascript 相关文章推荐
JS事件Event元素(兼容IE,Firefox,Chorme)
Nov 01 Javascript
ExtJS4给Combobox设置列表中的默认值示例
May 02 Javascript
drag-and-drop实现图片浏览器预览
Aug 06 Javascript
jQuery表格行上移下移和置顶的实现方法
Oct 08 Javascript
基于AngularJs + Bootstrap + AngularStrap相结合实现省市区联动代码
May 30 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
Oct 08 Javascript
你可能不知道的JSON.stringify()详解
Aug 17 Javascript
js实现复制功能(多种方法集合)
Jan 06 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
Apr 10 Javascript
原生js实现淘宝放大镜效果
Oct 28 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
Nov 26 jQuery
jquery插件懒加载的示例
Oct 24 jQuery
基于BootStrap Metronic开发框架经验小结【八】框架功能总体界面介绍
May 12 #Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
May 12 #Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
May 12 #Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
May 12 #Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
May 12 #Javascript
使用bootstrap3开发响应式网站
May 12 #Javascript
基于BootStrap Metronic开发框架经验小结【三】下拉列表Select2插件的使用
May 12 #Javascript
You might like
PHP中创建并处理图象
2006/10/09 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
WordPress中is_singular()函数简介
2015/02/05 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
PHP面向对象程序设计之类与反射API详解
2016/12/02 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
JavaScript模拟实现继承的方法
2015/03/30 Javascript
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
angular使用bootstrap方法手动启动的实例代码
2017/07/18 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
vue 运用mock数据的示例代码
2017/11/07 Javascript
jQuery中内容过滤器简单用法示例
2018/03/31 jQuery
json解析大全 双引号、键值对不在一起的情况
2019/12/06 Javascript
Echarts实现多条折线可拖拽效果
2019/12/19 Javascript
python字典的常用操作方法小结
2016/05/16 Python
python操作 hbase 数据的方法
2016/12/18 Python
python导出hive数据表的schema实例代码
2018/01/22 Python
python3实现名片管理系统
2020/11/29 Python
Python实现根据日期获取当天凌晨时间戳的方法示例
2019/04/09 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
Django Form and ModelForm的区别与使用
2019/12/06 Python
django框架auth模块用法实例详解
2019/12/10 Python
python小程序之4名牌手洗牌发牌问题解析
2020/05/15 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
写一个函数,要求输入一个字符串和一个字符长度,对该字符串进行分隔
2015/07/30 面试题
文科生自我鉴定
2014/02/15 职场文书
安全生产目标责任书
2014/04/14 职场文书
班训口号大全
2014/06/18 职场文书
党员群众路线剖析材料
2014/10/08 职场文书
博士导师推荐信
2015/03/25 职场文书
小学班主任工作经验交流材料
2015/11/02 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js