基于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 相关文章推荐
对JavaScript的eval()中使用函数的进一步讨论
Jul 26 Javascript
使用js判断控件是否获得焦点
Jan 03 Javascript
javascript简单实现图片预加载
Dec 03 Javascript
Jquery实现仿京东商城省市联动菜单
Nov 19 Javascript
JavaScript代码因逗号不规范导致IE不兼容的问题
Feb 25 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
Dec 12 Javascript
JS判断指定dom元素是否在屏幕内的方法实例
Jan 23 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
Feb 09 Javascript
MUI顶部选项卡的用法(tab-top-webview-main)详解
Oct 08 Javascript
vee-validate vue 2.0自定义表单验证的实例
Aug 28 Javascript
angularJs中ng-model-options设置数据同步的方法
Sep 30 Javascript
jQuery编写QQ简易聊天框
Aug 27 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编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
PHP 计算两个时间段之间交集的天数示例
2019/10/24 PHP
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
js身份证验证超强脚本
2008/10/26 Javascript
FF IE浏览器修改标签透明度的方法
2014/01/27 Javascript
使用JavaScript链式编程实现模拟Jquery函数
2014/12/21 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
2016/08/03 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
微信小程序 下拉列表的实现实例代码
2017/03/08 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
微信小程序页面跳转功能之从列表的item项跳转到下一个页面的方法
2017/11/27 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
微信小程序手机号码验证功能的实例代码
2018/08/28 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
python获取本机mac地址和ip地址的方法
2015/04/29 Python
详解python时间模块中的datetime模块
2016/01/13 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
Scrapy框架爬取西刺代理网免费高匿代理的实现代码
2019/02/22 Python
python发送多人邮件没有展示收件人问题的解决方法
2019/06/21 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
2020/03/06 Python
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
小松树教学反思
2014/02/11 职场文书
元宵节主持词
2014/03/25 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
写给医护人员的一封感谢信
2019/09/16 职场文书
剧场版《转生恶役只好拔除破灭旗标》公开最新视觉图 2023年上映
2022/04/02 日漫
nginx 添加http_stub_status_module模块
2022/05/25 Servers