ToB企服应用市场:ToB评测及商务社交产业平台

标题: vue前端实现导出页面为word(两种方法) [打印本页]

作者: 王柳    时间: 2024-6-14 18:54
标题: vue前端实现导出页面为word(两种方法)
将vue页面导出为word文档,不消写模板,直接导出即可。

第一种方法(简单版)

第一步:安装所需依靠

  1. npm install html-docx-js -S
  2. npm install file-saver -S
复制代码
第二步:创建容器,页面使用方法


注意:在当前页面引入依靠
  1. import FileSaver from "file-saver";
  2. import htmlDocx from "html-docx-js/dist/html-docx";**
复制代码
第二种方法(必要使用jquery)

第一步:安装所需依靠

  1. npm install jquery --save
  2. npm install file-saver
复制代码
第二步:创建两个js文件,一个是jquery文件(jq.js),一个是插件js的文件(jquery.wordexport.js),我把这两个js文件都放到utils文件夹下,注意:使用的时候肯定要注意引用路径。这两个js文件代码我都放到文章最后(有一个插件没有依靠包,所以必要本身创建一个js文件(jquery.wordexport.js))

第三步:在必要导出的页面引入文件

  1. import $ from "@/utils/jq"; // 文件引入路径一定要正确,这是第二步创建的js文件(jq.js)
  2. import saveAs from "file-saver/dist/FileSaver";
  3. import "@/utils/jquery.wordexport"; // 文件引入路径一定要正确,这是第二步创建的js文件(jquery.wordexport.js)
复制代码
第三步:页面使用方法


注意:如果导出的时候出现bug,大多是因为文件路径引入有题目,再次排查路径引入
jq.js

  1. import $ from "jquery";
  2.   window.$ = $;
  3.   window.jQuery = $;
  4. export default $;
复制代码
jquery.wordexport.js

  1. if (typeof jQuery !== "undefined" && typeof saveAs !== "undefined") {
  2.   (function ($) {
  3.       $.fn.wordExport = function (fileName) {
  4.           fileName = typeof fileName !== 'undefined' ? fileName : "jQuery-Word-Export";
  5.           var static = {
  6.               mhtml: {
  7.                   top:
  8.                     "Mime-Version: 1.0\nContent-Base: " +
  9.                     location.href +
  10.                     '\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: ' +
  11.                     location.href +
  12.                     "\n\n<!DOCTYPE html>\n" +
  13.                     '<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">\n_html_</html>',
  14.                   head:
  15.                     '<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n<style>\n_styles_\n</style>\n<!--[if gte mso 9]><xml><w:WordDocument><w:View>Print</w:View><w:TrackMoves>false</w:TrackMoves><w:TrackFormatting/><w:ValidateAgainstSchemas/><w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid><w:IgnoreMixedContent>false</w:IgnoreMixedContent><w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText><w:DoNotPromoteQF/><w:LidThemeOther>EN-US</w:LidThemeOther><w:LidThemeAsian>ZH-CN</w:LidThemeAsian><w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript><w:Compatibility><w:BreakWrappedTables/><w:SnapToGridInCell/><w:WrapTextWithPunct/><w:UseAsianBreakRules/><w:DontGrowAutofit/><w:SplitPgBreakAndParaMark/><w:DontVertAlignCellWithSp/><w:DontBreakConstrainedForcedTables/><w:DontVertAlignInTxbx/><w:Word11KerningPairs/><w:CachedColBalance/><w:UseFELayout/></w:Compatibility><w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel><m:mathPr><m:mathFont m:val="Cambria Math"/><m:brkBin m:val="before"/><m:brkBinSub m:val="--"/><m:smallFrac m:val="off"/><m:dispDef/><m:lMargin m:val="0"/> <m:rMargin m:val="0"/><m:defJc m:val="centerGroup"/><m:wrapIndent m:val="1440"/><m:intLim m:val="subSup"/><m:naryLim m:val="undOvr"/></m:mathPr></w:WordDocument></xml><![endif]--></head>\n',
  16.                   body: "<body>_body_</body>",
  17.               },
  18.           };
  19.           var options = {
  20.               maxWidth: 624,//最大宽度
  21.           };
  22.           // Clone selected element before manipulating it
  23.           var markup = $(this).clone();
  24.           // Remove hidden elements from the output
  25.           markup.each(function () {
  26.               var self = $(this);
  27.               if (self.is(':hidden'))
  28.                   self.remove();
  29.           });
  30.           // Embed all images using Data URLs
  31.           var images = Array();
  32.           var img = markup.find('img');
  33.           // var img = new Image(); 用这一行的话,WPS不显示图片,用上面的——只兼容office Word。
  34.           var mhtmlBottom = "\n";
  35.           for (var i = 0; i < img.length; i++) {
  36.               // Calculate dimensions of output image
  37.               var w = Math.min(img[i].width == 0 ? options.maxWidth : img[i].width, options.maxWidth);
  38.               var h = (img[i].height == 0 ? options.defaultLength : img[i].height) * (w / (img[i].width == 0 ? options.maxWidth : img[i].width));
  39.               // Create canvas for converting image to data URL
  40.               var canvas = document.createElement("CANVAS");
  41.               canvas.width = w;
  42.               canvas.height = h;
  43.               // Draw image to canvas
  44.               var context = canvas.getContext('2d');
  45.               context.drawImage(img[i], 0, 0, w, h);
  46.               // Get data URL encoding of image
  47.               var uri = canvas.toDataURL("image/png");
  48.               // console.log(i+":"+uri);
  49.               $(img[i]).attr("src", img[i].src);
  50.               img[i].width = w;
  51.               img[i].height = h;
  52.               mhtmlBottom += "--NEXT.ITEM-BOUNDARY\n";
  53.               mhtmlBottom += "Content-Location: " + uri + "\n";
  54.               mhtmlBottom += "Content-Type: " + uri.substring(uri.indexOf(":") + 1, uri.indexOf(";")) + "\n";
  55.               mhtmlBottom += "Content-Transfer-Encoding: " + uri.substring(uri.indexOf(";") + 1, uri.indexOf(",")) + "\n\n";
  56.               mhtmlBottom += uri.substring(uri.indexOf(",") + 1) + "\n\n";
  57.           }
  58.           mhtmlBottom += "--NEXT.ITEM-BOUNDARY--";
  59.           //TODO: load css from included stylesheet
  60.           var styles = "";
  61.           // Aggregate parts of the file together
  62.           var fileContent = static.mhtml.top.replace("_html_", static.mhtml.head.replace("_styles_", styles) + static.mhtml.body.replace("_body_", markup.html())) + mhtmlBottom;
  63.           // Create a Blob with the file contents
  64.           var blob = new Blob([fileContent], {
  65.               type: "application/msword;charset=utf-8"
  66.           });
  67.           saveAs(blob, fileName + ".doc"); // 注意:不要改成docx,不然会打不开!!!
  68.          
  69.       };
  70.   })(jQuery);
  71. } else {
  72.   if (typeof jQuery === "undefined") {
  73.       console.error("jQuery Word Export: missing dependency (jQuery)");
  74.   }
  75.   if (typeof saveAs === "undefined") {
  76.       console.error("jQuery Word Export: missing dependency (FileSaver.js)");
  77.   }
  78. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4