亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

基于Metronic的Bootstrap開發框架經驗總結(9)--實現Web頁面內容的打印預覽和保存操作

2019-11-14 14:18:27
字體:
來源:轉載
供稿:網友

在前面介紹了很多篇相關的《Bootstrap開發框架》的系列文章,這些內容基本上覆蓋到了我這個Bootstrap框架的各個主要方面的內容,總體來說基本達到了一個穩定的狀態,隨著時間的推移可以會引入一些更好更新的內容進行完善,本篇繼續這個系列,主要介紹如何實現Web頁面內容的打印預覽和保存操作。

1、Web頁面打印的問題

在此之前,我一般使用比較好用的LODOP來執行打印的操作,這個在我之前有很多文章都有涉及,這個控件是一個ActiveX的控件,需要下載安裝后就可以在頁面是進行打印的排版設計,預覽,打印等操作,還是很方便的一個控件,因此都很適合普通內容的打印,證件的套打等操作。

不過隨著瀏覽器技術的更新,這個插件在Chrome或者Firefox上好像不受支持了,基本上摒棄了這種插件的處理方式了。例如如果我在頁面上需要打印對話框里面的內容,如下所示。

如果按正常使用LODOP的方式來進行處理的話,那么會得到Chrome瀏覽器的提示,并且這個不管你重新下載安裝、更新LODOP控件,都會繼續這個錯誤提示的。

這個在一篇《Lodop頁面總提示"未安裝"或"請升級"的可能原因》,以及《Lodop用戶應對谷歌瀏覽器停用Plugin技術的處理辦法》都有說明,因此我們需要另辟蹊徑來處理這個頁面打印等的處理了。

對于替代方式,這里就是本篇內容介紹的主題了,我一直喜歡尋找一些比較好的方式的方式來實現自己需要的功能,于是找到了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>

然后我們還需要聲明一個DIV用來放置顯示的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都會彈出一個打印預覽對話框,確認是否進行打印的操作。

 

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文檔的模板化導出》。

其中我們可以在書簽里面定義或者查看一些書簽的信息,如下圖所示。

這樣我們在代碼里面,就可以獲取信息并指定這個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預覽界面如下所示。

 

如果有興趣,可以繼續參考系列文章:

基于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頁面內容的打印預覽和保存操作

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕久热精品视频在线| 国产美女直播视频一区| 96国产粉嫩美女| 亚洲第一网站男人都懂| 在线成人激情视频| 亚洲成人网久久久| 久久精品电影网| 91高清视频在线免费观看| 国产成人aa精品一区在线播放| 日韩av男人的天堂| 日韩福利视频在线观看| 大荫蒂欧美视频另类xxxx| 亚洲视频日韩精品| 欧美xxxx18性欧美| 97欧美精品一区二区三区| 在线观看日韩av| 亚洲娇小xxxx欧美娇小| 久久久之久亚州精品露出| 亚洲一区二区福利| 亚洲第一视频网| 久久精品免费电影| 色综合久久精品亚洲国产| 欧美激情性做爰免费视频| 精品久久久久久亚洲精品| 日韩av网址在线观看| 久久影视免费观看| 日本精品视频网站| 91精品国产高清久久久久久久久| 亚洲一区二区少妇| 成人国产精品久久久| 日韩av在线精品| 搡老女人一区二区三区视频tv| 国产精品网站入口| 中文字幕亚洲欧美日韩在线不卡| 欧美精品videosex性欧美| 国产日本欧美一区二区三区在线| 亚洲精品v天堂中文字幕| 中文字幕在线国产精品| 亚洲日本欧美日韩高观看| 欧美国产日韩一区二区| 亚洲在线免费观看| 国产精品黄色影片导航在线观看| 亚洲a级在线观看| 色综合久久88| 97在线视频观看| 亚洲欧洲午夜一线一品| 欧美激情视频播放| 亚洲电影免费观看高清完整版在线| 亚洲美女av网站| 亚洲国产日韩欧美在线动漫| 欧美精品18videos性欧美| 亚洲色图色老头| 久久久久久久国产精品| 久久精品国产91精品亚洲| 亚洲电影中文字幕| 亚洲精品99999| 欧美激情乱人伦| 久久久国产一区二区| 亚洲国产成人久久综合| 久久69精品久久久久久国产越南| 久久久91精品国产一区不卡| 夜夜嗨av色一区二区不卡| 国产精品视频区| 欧美片一区二区三区| 国产在线视频91| 精品自在线视频| 黄网动漫久久久| 成人444kkkk在线观看| 久热精品视频在线| 尤物yw午夜国产精品视频明星| 国产精品大片wwwwww| 国产日韩精品电影| 国产成人97精品免费看片| 日韩在线观看免费网站| 久久久极品av| 亚洲精品mp4| 久久精品国产亚洲精品2020| 7m第一福利500精品视频| 在线观看国产精品日韩av| 亚洲字幕在线观看| 亚洲第一免费播放区| 成人亚洲综合色就1024| 国产精品久久久久久久久久尿| 亚洲国产精品久久久久秋霞不卡| 亚洲成人亚洲激情| 国产福利精品av综合导导航| 欧美精品videosex牲欧美| 久久精品国产综合| 色噜噜国产精品视频一区二区| 日韩中文字幕精品视频| 欧美日韩亚洲一区二区| 久久久久久午夜| 欧美激情国产高清| 热re99久久精品国产66热| 青草青草久热精品视频在线观看| 日韩av日韩在线观看| 韩国v欧美v日本v亚洲| 精品国产欧美一区二区三区成人| 欧美日韩国产一区在线| 亚洲国产美女久久久久| 亚洲天堂av电影| 国产精品va在线播放我和闺蜜| 色综合伊人色综合网| 亚洲黄色www| 久久久久国产精品www| 日本国产一区二区三区| 久久成人人人人精品欧| 欧美综合第一页| 最近中文字幕日韩精品| 国语自产在线不卡| 亚洲精品福利资源站| 伊人久久久久久久久久久久久| 日韩福利伦理影院免费| 97视频在线观看免费高清完整版在线观看| 亚洲精品久久久一区二区三区| 亚洲福利视频久久| 97精品视频在线播放| 乱亲女秽乱长久久久| 欧美理论电影网| 26uuu久久噜噜噜噜| 欧美激情2020午夜免费观看| 久久国产精品久久久| 久久久久久久91| 国产日韩欧美黄色| 欧美黑人xxxⅹ高潮交| 亚洲国产精品电影在线观看| 庆余年2免费日韩剧观看大牛| 国产亚洲精品一区二区| 精品成人乱色一区二区| 98精品国产高清在线xxxx天堂| 亚洲欧美国产精品专区久久| 国产有码在线一区二区视频| 国产成人精品免费久久久久| 国产丝袜一区视频在线观看| 欧美视频不卡中文| 秋霞av国产精品一区| 日韩国产高清污视频在线观看| 亚洲国产成人精品久久| 日韩大陆毛片av| 92版电视剧仙鹤神针在线观看| 欧美激情中文字幕乱码免费| 久久久久久久久久久亚洲| 国产伦精品一区二区三区精品视频| 日韩成人在线电影网| 韩剧1988在线观看免费完整版| 国产精品爱久久久久久久| 日本精品一区二区三区在线播放视频| 亚洲国产日韩欧美在线图片| 亚洲第一色在线| 性欧美xxxx| 51视频国产精品一区二区| 欧日韩不卡在线视频| 亚洲成人精品视频在线观看| 国产精品视频久| 欧美日韩色婷婷| 国内精品模特av私拍在线观看| 亚洲电影在线观看| 亚洲精品色婷婷福利天堂| 亚洲女人天堂网| 日韩欧美国产黄色| 国产剧情日韩欧美| 菠萝蜜影院一区二区免费| 国产女精品视频网站免费| 欧美性猛交xxxx黑人|