From 0023766f0d4379858c2450eac5d0b56f5983deaa Mon Sep 17 00:00:00 2001 From: username@email.com <yzy2002yzy@163.com> Date: 星期三, 26 一月 2022 10:13:06 +0800 Subject: [PATCH] 导出word --- zhengcaioa/zhengcaioa/Views/CooperOrder/Printtousushu.cshtml | 149 ++++++++------ zhengcaioa/zhengcaioa/Views/CooperOrder/selectWenshu.cshtml | 4 zhengcaioa/zhengcaioa/wwwroot/js/jquery.wordexport.js | 84 ++++++++ zhengcaioa/zhengcaioa/Views/CooperOrder/PrintZhiyihan.cshtml | 162 +++++++++------ zhengcaioa/zhengcaioa/wwwroot/js/fileSaver.js | 188 ++++++++++++++++++ 5 files changed, 458 insertions(+), 129 deletions(-) diff --git a/zhengcaioa/zhengcaioa/Views/CooperOrder/PrintZhiyihan.cshtml b/zhengcaioa/zhengcaioa/Views/CooperOrder/PrintZhiyihan.cshtml index 9d96439..2a5a6cf 100644 --- a/zhengcaioa/zhengcaioa/Views/CooperOrder/PrintZhiyihan.cshtml +++ b/zhengcaioa/zhengcaioa/Views/CooperOrder/PrintZhiyihan.cshtml @@ -40,7 +40,7 @@ <link href="~/css/plugins/toastr/toastr.min.css" rel="stylesheet" /> <link href="~/css/plugins/webuploader/webuploader.css" rel="stylesheet" /> - + <!-- jqgrid--> @*<link href="~/css/plugins/jqgrid/ui.jqgrid.css" rel="stylesheet">*@ @@ -65,12 +65,37 @@ @*<script src="~/js/plugins/iTexbox/itextbox.js" type="text/javascript"></script>*@ @*<script src="~/js/plugins/iuploader/iuploader.js"></script>*@ <script src="~/js/TUJS.js"></script> + <script language="javascript" src="~/js/fileSaver.js" type="text/javascript"></script> + <script language="javascript" src="~/js/jquery.wordexport.js" type="text/javascript"></script> </head> <body class="gray-bg" style="overflow:auto"> <form id="formtest"> <div class="wrapper wrapper-content" id="ibox-content" style="padding:15px;"> <div class="row"> <div id="content" style="overflow-y:auto;height:100%;background: #fff;width:850px; margin: 0 auto;"> + <style type="text/css"> + table { + width: 595px; + font-size: 16pt; + font-family: 'FangSong'; + background: #fff; + line-height: 1.5; + } + + span { + font-size: 15pt; + display: inline; + border-bottom: 1px dashed #111; + } + + s22pan:after { + content: ''; + display: inline; + width: 100%; + margin-top: -5px; + border-bottom: 1px dashed #111; + } + </style> <div id="page1" style="page-break-after:always;"> <table border="0" align="center" cellpadding="3" cellspacing="0"> <tr> @@ -133,58 +158,78 @@ <tr> <td colspan="2"> 璐ㄧ枒浜嬮」锛�<span style="text-indent:10px">@challengeItemDTOs[i].QuestionName </span> - <br /> - 浜嬪疄渚濇嵁锛欯Html.Raw("<span>" + (string.IsNullOrEmpty(challengeItemDTOs[i].Evidential) ? "" : challengeItemDTOs[i].Evidential.Replace(" ", " ").Replace("\r", "<br/>")) + "</span>"); - <br /> - @for (int j = 0; j < challengeItemDTOs[i].sysCodeDtls.Count; j++) - { - if (challengeItemDTOs[i].sysCodeDtls.Count == 1) - { - @Html.Raw("娉曞緥渚濇嵁锛�<span>銆�" + challengeItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + challengeItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + challengeItemDTOs[i].sysCodeDtls[j].Contents + "</span>") - <br /> - } - else - { - @Html.Raw("娉曞緥渚濇嵁" + (j + 1) + "锛�<span>銆�" + challengeItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + challengeItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + challengeItemDTOs[i].sysCodeDtls[j].Contents + "</span>") - <br /> - - } - - - } - - </td> </tr> + <tr> + <td colspan="2"> + 浜嬪疄渚濇嵁锛欯Html.Raw("<span>" + (string.IsNullOrEmpty(challengeItemDTOs[i].Evidential) ? "" : challengeItemDTOs[i].Evidential.Replace(" ", " ").Replace("\r", "<br/>")) + "</span>"); + </td> + </tr> + + @for (int j = 0; j < challengeItemDTOs[i].sysCodeDtls.Count; j++) + { + if (challengeItemDTOs[i].sysCodeDtls.Count == 1) + { + <tr> + <td colspan="2"> + @Html.Raw("娉曞緥渚濇嵁锛�<span>銆�" + challengeItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + challengeItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + challengeItemDTOs[i].sysCodeDtls[j].Contents + "</span>") + </td> + </tr> + } + else + { + <tr> + <td colspan="2"> + @Html.Raw("娉曞緥渚濇嵁" + (j + 1) + "锛�<span>銆�" + challengeItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + challengeItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + challengeItemDTOs[i].sysCodeDtls[j].Contents + "</span>") + </td> + </tr> + + } + + + } + + + } else { <tr> <td colspan="2"> 璐ㄧ枒浜嬮」@((i + 1) + "")锛�<span style="text-indent:10px">@challengeItemDTOs[i].QuestionName </span> - <br /> - 浜嬪疄渚濇嵁@((i + 1) + "")锛� @Html.Raw("<span>" + (string.IsNullOrEmpty(challengeItemDTOs[i].Evidential) ? "" : challengeItemDTOs[i].Evidential.Replace(" ", " ").Replace("\r", "<br/>")) + "</span>"); - <br /> - @for (int j = 0; j < challengeItemDTOs[i].sysCodeDtls.Count; j++) - { - - - if (challengeItemDTOs[i].sysCodeDtls.Count == 1) - { - @Html.Raw("娉曞緥渚濇嵁锛�<span>銆�" + challengeItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + challengeItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + challengeItemDTOs[i].sysCodeDtls[j].Contents + "</span>") - <br /> - } - else - { - @Html.Raw("娉曞緥渚濇嵁" + (j + 1) + "锛�<span>銆�" + challengeItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + challengeItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + challengeItemDTOs[i].sysCodeDtls[j].Contents + "</span>") - <br /> - - } - } - - </td> </tr> + <tr> + <td colspan="2"> + 浜嬪疄渚濇嵁@((i + 1) + "")锛� @Html.Raw("<span>" + (string.IsNullOrEmpty(challengeItemDTOs[i].Evidential) ? "" : challengeItemDTOs[i].Evidential.Replace(" ", " ").Replace("\r", "<br/>")) + "</span>"); + </td> + </tr> + + @for (int j = 0; j < challengeItemDTOs[i].sysCodeDtls.Count; j++) + { + + + if (challengeItemDTOs[i].sysCodeDtls.Count == 1) + { + <tr> + <td colspan="2"> + @Html.Raw("娉曞緥渚濇嵁锛�<span>銆�" + challengeItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + challengeItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + challengeItemDTOs[i].sysCodeDtls[j].Contents + "</span>") + + </td> + </tr> + } + else + { + <tr> + <td colspan="2"> + @Html.Raw("娉曞緥渚濇嵁" + (j + 1) + "锛�<span>銆�" + challengeItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + challengeItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + challengeItemDTOs[i].sysCodeDtls[j].Contents + "</span>") + </td> + </tr> + + } + } + + } } @@ -208,31 +253,9 @@ </table> </div> - - <style type="text/css"> - table { - width: 595px; - font-size: 16pt; - font-family: 'FangSong'; - background: #fff; - line-height: 1.5; - } - span { - font-size: 15pt; - display: inline; - border-bottom: 1px dashed #111; - } - s22pan:after { - content: ''; - display: inline; - width: 100%; - margin-top: -5px; - border-bottom: 1px dashed #111; - } - </style> - </div> + </div> </div> </div> @@ -243,6 +266,9 @@ <a class="btn btn-success" href="javascript:void(0)" onclick="printWin();" style="margin-left:4px; border-radius:4px;"> <i class="glyphicon glyphicon-ok"></i> <span class="bold">鎵撳嵃</span> + </a> + <a class="btn btn-success" href="javascript:void(0)" onclick="daochuword();" style="margin-left:4px; border-radius:4px;"> + <i class="glyphicon glyphicon-ok"></i> <span class="bold">瀵煎嚭word</span> </a> </div> </div> @@ -274,7 +300,9 @@ } - + function daochuword() { + $("#content").wordExport("璐ㄧ枒鍑紷(Html.Raw(Model.GysName))"); //fileName涓哄鍑虹殑word鏂囦欢鐨勫懡鍚�,content涓鸿瀵煎嚭鐨刪tml鍐呭瀹瑰櫒 + } diff --git a/zhengcaioa/zhengcaioa/Views/CooperOrder/Printtousushu.cshtml b/zhengcaioa/zhengcaioa/Views/CooperOrder/Printtousushu.cshtml index 4666fa0..377d06c 100644 --- a/zhengcaioa/zhengcaioa/Views/CooperOrder/Printtousushu.cshtml +++ b/zhengcaioa/zhengcaioa/Views/CooperOrder/Printtousushu.cshtml @@ -69,12 +69,37 @@ @*<script src="~/js/plugins/iTexbox/itextbox.js" type="text/javascript"></script>*@ @*<script src="~/js/plugins/iuploader/iuploader.js"></script>*@ <script src="~/js/TUJS.js"></script> + <script language="javascript" src="~/js/fileSaver.js" type="text/javascript"></script> + <script language="javascript" src="~/js/jquery.wordexport.js" type="text/javascript"></script> </head> <body class="gray-bg" style="overflow:auto"> <form id="formtest"> <div class="wrapper wrapper-content" id="ibox-content" style="padding:15px;"> <div class="row"> <div id="content" style="overflow-y:auto;height:100%;background: #fff;width:850px; margin: 0 auto;"> + <style type="text/css"> + table { + width: 595px; + font-size: 16pt; + font-family: 'FangSong'; + background: #fff; + line-height: 1.5; + } + + span { + font-size: 15pt; + display: inline; + border-bottom: 1px dashed #111; + } + + s22pan:after { + content: ''; + display: inline; + width: 100%; + margin-top: -5px; + border-bottom: 1px dashed #111; + } + </style> <div id="page1" style="page-break-after:always;"> <table border="0" align="center" cellpadding="3" cellspacing="0"> <tr> @@ -240,54 +265,73 @@ <tr> <td colspan="2"> 鎶曡瘔浜嬮」锛�<span style="text-indent:10px">@complaintItemDTOs[i].QuestionName </span> - <br /> - 浜嬪疄渚濇嵁锛� @Html.Raw("<span>" + (string.IsNullOrEmpty(complaintItemDTOs[i].Evidential) ? "" : complaintItemDTOs[i].Evidential.Replace(" ", " ").Replace("\r", "<br/>")) + "</span>"); - <br /> - @for (int j = 0; j < complaintItemDTOs[i].sysCodeDtls.Count; j++) - { - - - if (complaintItemDTOs[i].sysCodeDtls.Count == 1) - { - @Html.Raw("娉曞緥渚濇嵁锛�<span>銆�" + complaintItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + complaintItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + complaintItemDTOs[i].sysCodeDtls[j].Contents + "</span>") - <br /> - } - else - { - @Html.Raw("娉曞緥渚濇嵁" + (j + 1) + "锛�<span>銆�" + complaintItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + complaintItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + complaintItemDTOs[i].sysCodeDtls[j].Contents + "</span>") - <br /> - - } - } </td> </tr> + <tr> + <td colspan="2"> + 浜嬪疄渚濇嵁锛� @Html.Raw("<span>" + (string.IsNullOrEmpty(complaintItemDTOs[i].Evidential) ? "" : complaintItemDTOs[i].Evidential.Replace(" ", " ").Replace("\r", "<br/>")) + "</span>"); + </td> + </tr> + + @for (int j = 0; j < complaintItemDTOs[i].sysCodeDtls.Count; j++) + { + + + if (complaintItemDTOs[i].sysCodeDtls.Count == 1) + { + <tr> + <td colspan="2"> + @Html.Raw("娉曞緥渚濇嵁锛�<span>銆�" + complaintItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + complaintItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + complaintItemDTOs[i].sysCodeDtls[j].Contents + "</span>") + </td> + </tr> + } + else + { + <tr> + <td colspan="2"> + @Html.Raw("娉曞緥渚濇嵁" + (j + 1) + "锛�<span>銆�" + complaintItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + complaintItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + complaintItemDTOs[i].sysCodeDtls[j].Contents + "</span>") + </td> + </tr> + + } + } + } else { <tr> <td colspan="2"> 鎶曡瘔浜嬮」@((i+1)+"")锛�<span style="text-indent:10px">@complaintItemDTOs[i].QuestionName </span> - <br /> - 浜嬪疄渚濇嵁@((i+1)+"")锛欯Html.Raw("<span>" +(string.IsNullOrEmpty(complaintItemDTOs[i].Evidential)?"": complaintItemDTOs[i].Evidential.Replace(" ", " ").Replace("\r", "<br/>")) + "</span>"); - <br /> - @for (int j = 0; j < complaintItemDTOs[i].sysCodeDtls.Count; j++) - { - - - if (complaintItemDTOs[i].sysCodeDtls.Count == 1) - { - @Html.Raw("娉曞緥渚濇嵁锛�<span>銆�" + complaintItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + complaintItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + complaintItemDTOs[i].sysCodeDtls[j].Contents + "</span>") - <br /> - } - else - { - @Html.Raw("娉曞緥渚濇嵁" + (j + 1) + "锛�<span>銆�" + complaintItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + complaintItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + complaintItemDTOs[i].sysCodeDtls[j].Contents + "</span>") - <br /> - - } - } </td> </tr> + <tr> + <td colspan="2"> + 浜嬪疄渚濇嵁@((i+1)+"")锛欯Html.Raw("<span>" + (string.IsNullOrEmpty(complaintItemDTOs[i].Evidential) ? "" : complaintItemDTOs[i].Evidential.Replace(" ", " ").Replace("\r", "<br/>")) + "</span>"); + </td> + </tr> + @for (int j = 0; j < complaintItemDTOs[i].sysCodeDtls.Count; j++) + { + + + if (complaintItemDTOs[i].sysCodeDtls.Count == 1) + { + <tr> + <td colspan="2"> + @Html.Raw("娉曞緥渚濇嵁锛�<span>銆�" + complaintItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + complaintItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + complaintItemDTOs[i].sysCodeDtls[j].Contents + "</span>") + </td> + </tr> + } + else + { + <tr> + <td colspan="2"> + @Html.Raw("娉曞緥渚濇嵁" + (j + 1) + "锛�<span>銆�" + complaintItemDTOs[i].sysCodeDtls[j].CodeSn + "銆�" + complaintItemDTOs[i].sysCodeDtls[j].Classify2 + "锛�" + complaintItemDTOs[i].sysCodeDtls[j].Contents + "</span>") + </td> + </tr> + + } + } + } } @@ -312,29 +356,7 @@ </div> - <style type="text/css"> - table { - width: 595px; - font-size: 16pt; - font-family: 'FangSong'; - background: #fff; - line-height: 1.5; - } - span { - font-size: 15pt; - display: inline; - border-bottom: 1px dashed #111; - } - - s22pan:after { - content: ''; - display: inline; - width: 100%; - margin-top: -5px; - border-bottom: 1px dashed #111; - } - </style> </div> </div> @@ -346,6 +368,10 @@ <a class="btn btn-success" href="javascript:void(0)" onclick="printWin();" style="margin-left:4px; border-radius:4px;"> <i class="glyphicon glyphicon-ok"></i> <span class="bold">鎵撳嵃</span> + </a> + + <a class="btn btn-success" href="javascript:void(0)" onclick="daochuword();" style="margin-left:4px; border-radius:4px;"> + <i class="glyphicon glyphicon-ok"></i> <span class="bold">瀵煎嚭word</span> </a> </div> </div> @@ -376,6 +402,9 @@ return false; } + function daochuword() { + $("#content").wordExport("鎶曡瘔涔(Html.Raw(Model.TsrName))"); //fileName涓哄鍑虹殑word鏂囦欢鐨勫懡鍚�,content涓鸿瀵煎嚭鐨刪tml鍐呭瀹瑰櫒 + } diff --git a/zhengcaioa/zhengcaioa/Views/CooperOrder/selectWenshu.cshtml b/zhengcaioa/zhengcaioa/Views/CooperOrder/selectWenshu.cshtml index 28a90b2..83b1b93 100644 --- a/zhengcaioa/zhengcaioa/Views/CooperOrder/selectWenshu.cshtml +++ b/zhengcaioa/zhengcaioa/Views/CooperOrder/selectWenshu.cshtml @@ -31,10 +31,10 @@ formatter: function (cellvalue, options, rowObject) { if (rowObject.OrderType1 == "浠f嫙鎶曡瘔涔�") { - return "<a onclick=\"OpenWindow('鏌ョ湅鎶曡瘔涔�','98%','100%', '/CooperOrder/Printtousushu?id=" + rowObject.Id + "')\" >鏌ョ湅鎶曡瘔涔�</a>"; + return "<a onclick=\"OpenWindow('鎵撳嵃瀵煎嚭鎶曡瘔涔�','98%','100%', '/CooperOrder/Printtousushu?id=" + rowObject.Id + "')\" >鎵撳嵃瀵煎嚭鎶曡瘔涔�</a>"; } else if (rowObject.OrderType1 == "浠f嫙璐ㄧ枒鍑�") { - return "<a onclick=\"OpenWindow('鏌ョ湅璐ㄧ枒鍑�','98%','100%', '/CooperOrder/PrintZhiyihan?id=" + rowObject.Id + "')\" >鏌ョ湅璐ㄧ枒鍑�</a>"; + return "<a onclick=\"OpenWindow('鎵撳嵃瀵煎嚭璐ㄧ枒鍑�','98%','100%', '/CooperOrder/PrintZhiyihan?id=" + rowObject.Id + "')\" >鎵撳嵃瀵煎嚭璐ㄧ枒鍑�</a>"; } } }, diff --git a/zhengcaioa/zhengcaioa/wwwroot/js/fileSaver.js b/zhengcaioa/zhengcaioa/wwwroot/js/fileSaver.js new file mode 100644 index 0000000..cc0c310 --- /dev/null +++ b/zhengcaioa/zhengcaioa/wwwroot/js/fileSaver.js @@ -0,0 +1,188 @@ +锘�/* FileSaver.js + * A saveAs() FileSaver implementation. + * 1.3.2 + * 2016-06-16 18:25:19 + * + * By Eli Grey, http://eligrey.com + * License: MIT + * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md + */ + +/*global self */ +/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */ + +/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */ + +var saveAs = saveAs || (function(view) { + "use strict"; + // IE <10 is explicitly unsupported + if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) { + return; + } + var + doc = view.document + // only get URL when necessary in case Blob.js hasn't overridden it yet + , get_URL = function() { + return view.URL || view.webkitURL || view; + } + , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a") + , can_use_save_link = "download" in save_link + , click = function(node) { + var event = new MouseEvent("click"); + node.dispatchEvent(event); + } + , is_safari = /constructor/i.test(view.HTMLElement) + , is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent) + , throw_outside = function(ex) { + (view.setImmediate || view.setTimeout)(function() { + throw ex; + }, 0); + } + , force_saveable_type = "application/octet-stream" + // the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to + , arbitrary_revoke_timeout = 1000 * 40 // in ms + , revoke = function(file) { + var revoker = function() { + if (typeof file === "string") { // file is an object URL + get_URL().revokeObjectURL(file); + } else { // file is a File + file.remove(); + } + }; + setTimeout(revoker, arbitrary_revoke_timeout); + } + , dispatch = function(filesaver, event_types, event) { + event_types = [].concat(event_types); + var i = event_types.length; + while (i--) { + var listener = filesaver["on" + event_types[i]]; + if (typeof listener === "function") { + try { + listener.call(filesaver, event || filesaver); + } catch (ex) { + throw_outside(ex); + } + } + } + } + , auto_bom = function(blob) { + // prepend BOM for UTF-8 XML and text/* types (including HTML) + // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF + if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { + return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type}); + } + return blob; + } + , FileSaver = function(blob, name, no_auto_bom) { + if (!no_auto_bom) { + blob = auto_bom(blob); + } + // First try a.download, then web filesystem, then object URLs + var + filesaver = this + , type = blob.type + , force = type === force_saveable_type + , object_url + , dispatch_all = function() { + dispatch(filesaver, "writestart progress write writeend".split(" ")); + } + // on any filesys errors revert to saving with object URLs + , fs_error = function() { + if ((is_chrome_ios || (force && is_safari)) && view.FileReader) { + // Safari doesn't allow downloading of blob urls + var reader = new FileReader(); + reader.onloadend = function() { + var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;'); + var popup = view.open(url, '_blank'); + if(!popup) view.location.href = url; + url=undefined; // release reference before dispatching + filesaver.readyState = filesaver.DONE; + dispatch_all(); + }; + reader.readAsDataURL(blob); + filesaver.readyState = filesaver.INIT; + return; + } + // don't create more object URLs than needed + if (!object_url) { + object_url = get_URL().createObjectURL(blob); + } + if (force) { + view.location.href = object_url; + } else { + var opened = view.open(object_url, "_blank"); + if (!opened) { + // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html + view.location.href = object_url; + } + } + filesaver.readyState = filesaver.DONE; + dispatch_all(); + revoke(object_url); + } + ; + filesaver.readyState = filesaver.INIT; + + if (can_use_save_link) { + object_url = get_URL().createObjectURL(blob); + setTimeout(function() { + save_link.href = object_url; + save_link.download = name; + click(save_link); + dispatch_all(); + revoke(object_url); + filesaver.readyState = filesaver.DONE; + }); + return; + } + + fs_error(); + } + , FS_proto = FileSaver.prototype + , saveAs = function(blob, name, no_auto_bom) { + return new FileSaver(blob, name || blob.name || "download", no_auto_bom); + } + ; + // IE 10+ (native saveAs) + if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) { + return function(blob, name, no_auto_bom) { + name = name || blob.name || "download"; + + if (!no_auto_bom) { + blob = auto_bom(blob); + } + return navigator.msSaveOrOpenBlob(blob, name); + }; + } + + FS_proto.abort = function(){}; + FS_proto.readyState = FS_proto.INIT = 0; + FS_proto.WRITING = 1; + FS_proto.DONE = 2; + + FS_proto.error = + FS_proto.onwritestart = + FS_proto.onprogress = + FS_proto.onwrite = + FS_proto.onabort = + FS_proto.onerror = + FS_proto.onwriteend = + null; + + return saveAs; +}( + typeof self !== "undefined" && self + || typeof window !== "undefined" && window + || this.content +)); +// `self` is undefined in Firefox for Android content script context +// while `this` is nsIContentFrameMessageManager +// with an attribute `content` that corresponds to the window + +if (typeof module !== "undefined" && module.exports) { + module.exports.saveAs = saveAs; +} else if ((typeof define !== "undefined" && define !== null) && (define.amd !== null)) { + define([], function() { + return saveAs; + }); +} \ No newline at end of file diff --git a/zhengcaioa/zhengcaioa/wwwroot/js/jquery.wordexport.js b/zhengcaioa/zhengcaioa/wwwroot/js/jquery.wordexport.js new file mode 100644 index 0000000..14ac6d5 --- /dev/null +++ b/zhengcaioa/zhengcaioa/wwwroot/js/jquery.wordexport.js @@ -0,0 +1,84 @@ +锘縤f (typeof jQuery !== "undefined" && typeof saveAs !== "undefined") { + (function($) { + $.fn.wordExport = function(fileName) { + fileName = typeof fileName !== 'undefined' ? fileName : "jQuery-Word-Export"; + var static = { + mhtml: { + top: "Mime-Version: 1.0\nContent-Base: " + location.href + "\nContent-Type: Multipart/related; boundary=\"NEXT.ITEM-BOUNDARY\";type=\"text/html\"\n\n--NEXT.ITEM-BOUNDARY\nContent-Type: text/html; charset=\"utf-8\"\nContent-Location: " + location.href + "\n\n<!DOCTYPE html>\n<html>\n_html_</html>", + head: "<head>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n<style>\n_styles_\n</style>\n</head>\n", + body: "<body>_body_</body>" + } + }; + var options = { + maxWidth: 624 + }; + // Clone selected element before manipulating it + var markup = $(this).clone(); + + // Remove hidden elements from the output + markup.each(function() { + var self = $(this); + if (self.is(':hidden')) + self.remove(); + }); + + // Embed all images using Data URLs + var images = Array(); + var img = markup.find('img'); + for (var i = 0; i < img.length; i++) { + // Calculate dimensions of output image + var w = Math.min(img[i].width, options.maxWidth); + var h = img[i].height * (w / img[i].width); + // Create canvas for converting image to data URL + var canvas = document.createElement("CANVAS"); + canvas.width = w; + canvas.height = h; + // Draw image to canvas + var context = canvas.getContext('2d'); + context.drawImage(img[i], 0, 0, w, h); + // Get data URL encoding of image + var uri = canvas.toDataURL("image/png"); + $(img[i]).attr("src", img[i].src); + img[i].width = w; + img[i].height = h; + // Save encoded image to array + images[i] = { + type: uri.substring(uri.indexOf(":") + 1, uri.indexOf(";")), + encoding: uri.substring(uri.indexOf(";") + 1, uri.indexOf(",")), + location: $(img[i]).attr("src"), + data: uri.substring(uri.indexOf(",") + 1) + }; + } + + // Prepare bottom of mhtml file with image data + var mhtmlBottom = "\n"; + for (var i = 0; i < images.length; i++) { + mhtmlBottom += "--NEXT.ITEM-BOUNDARY\n"; + mhtmlBottom += "Content-Location: " + images[i].location + "\n"; + mhtmlBottom += "Content-Type: " + images[i].type + "\n"; + mhtmlBottom += "Content-Transfer-Encoding: " + images[i].encoding + "\n\n"; + mhtmlBottom += images[i].data + "\n\n"; + } + mhtmlBottom += "--NEXT.ITEM-BOUNDARY--"; + + //TODO: load css from included stylesheet + var styles = ""; + + // Aggregate parts of the file together + var fileContent = static.mhtml.top.replace("_html_", static.mhtml.head.replace("_styles_", styles) + static.mhtml.body.replace("_body_", markup.html())) + mhtmlBottom; + + // Create a Blob with the file contents + var blob = new Blob([fileContent], { + type: "application/msword;charset=utf-8" + }); + saveAs(blob, fileName + ".doc"); + }; + })(jQuery); +} else { + if (typeof jQuery === "undefined") { + console.error("jQuery Word Export: missing dependency (jQuery)"); + } + if (typeof saveAs === "undefined") { + console.error("jQuery Word Export: missing dependency (FileSaver.js)"); + } +} \ No newline at end of file -- Gitblit v1.9.1