遵照Metronic的Bootstrap开发框架经验总计(9)–实现Web页面内容的打印预览和封存操作

3、页面内容的保留操作

奇迹,为了有利于业务处理,大家一般也足以提供给用户一个导出打印内容的操作,如下所示代码就是把打印的情节导出到Word里面给用户加工等用途。

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

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

此地后台我们根本利用Apose.Word控件来展开模板化的文档生成,具体可以参考一下自我面前介绍过的运用方法作品《接纳Aspose.Word控件实现Word文档的操作》、《应用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出》。

里面大家得以在书签里面定义或者查看一些书签的音信,如下图所示。

图片 1

这么大家在代码里面,就足以获取音讯并点名这一个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);

也可以行使书签Book马克模式查询替换,如下代码所示。

            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预览界面如下所示。

图片 2

 

假使有趣味,可以延续参照多重小说:

基于Metronic的Bootstrap开发框架经验总计(1)-框架总览及菜单模块的处理

依照Metronic的Bootstrap开发框架经验总计(2)–列表分页处理和插件JSTree的利用

依照Metronic的Bootstrap开发框架经验统计(3)–下拉列表Select2插件的行使

据悉Metronic的Bootstrap开发框架经验总计(4)–Bootstrap图标的领到和使用 

基于Metronic的Bootstrap开发框架经验总结(5)–Bootstrap文件上传插件File
Input的采取

依照Metronic的Bootstrap开发框架经验统计(6)–对话框及指示框的处理和优化

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

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

基于Metronic的Bootstrap开发框架经验总计(9)–实现Web页面内容的打印预览和封存操作

 

在前头介绍了过多篇相关的《Bootstrap开发框架》的层层作品,这个内容基本上覆盖到了自家这么些Bootstrap框架的各种首要方面的内容,总体来说基本达到了一个安居乐业的景观,随着时间的延迟可以会引入一些更好更新的内容举行完美,本篇继续这多少个系列,首要介绍怎么着实现Web页面内容的打印预览和保留操作。

2、PrintThis打印插件的选择

有了下边的问题,大家引入一个新的打印形式,也就是JQuery插件来落实大家所需要页面内容的打印操作。

本条插件的拔取非凡简单方便,首先需要在页面里面引入对应的JS文件,如下所示。

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

我们再在页面顶部扩张多少个按钮,如打印和导出操作,代码如下所示

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

图片 3

接下来大家还索要注解一个DIV用来放置突显的Web页面内容,这样也便宜对它调用举办打印操作。

图片 4

俺们打印的处理代码也很简单,就是直接对层举办打印处理就可以了,能够观望下面的运用代码相当简单。

        //打印预览
        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都会弹出一个打印预览对话框,确认是否开展打印的操作。

图片 5

 

1、Web页面打印的问题

此前,我一般选取相比好用的LODOP来实施打印的操作,这多少个在本人事先有众多稿子都有涉及,这些控件是一个ActiveX的控件,需要下载安装后就可以在页面是开展打印的排版设计,预览,打印等操作,依旧很便利的一个控件,因而都很吻合普通内容的打印,证件的套打等操作。

而是随着浏览器技术的立异,这个插件在Chrome或者Fire福克斯(Fox)(Fox)上看似不受帮助了,基本上丢弃了这种插件的处理格局了。例如如果自己在页面上需要打印对话框里面的始末,如下所示。

图片 6

假如按常规使用LODOP的法门来进展处理的话,那么会得到Chrome浏览器的提示,并且这些不管您重新下载安装、更新LODOP控件,都会继续这几个错误指示的。

图片 7

以此在一篇《Lodop页面总提示”未安装”或”请升级”的或是原因》,以及《Lodop用户应对Google浏览器停用Plugin技术的处理情势》都有证实,由此我们需要另辟蹊径来拍卖那多少个页面打印等的处理了。

对此代表形式,这里就是本篇内容介绍的要旨了,我一直珍视检索一些相比较好的办法的办法来实现协调索要的效率,于是找到了PrintThis的这几个插件(https://github.com/jasonday/printThis)以及jquery-print-preview-plugin(https://github.com/etimbo/jquery-print-preview-plugin),相比较两者我相比欣赏第一个的简练方便的应用。

相关文章