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

首頁 > 編程 > JavaScript > 正文

使用jspdf生成pdf報表

2019-11-20 12:06:35
字體:
來源:轉載
供稿:網友

由于前臺html已經動態生成報表,而且,前臺有一個功能,一個date range組件,當你拖動的時候,報表會在不提交到后臺的情況下動態變化。
因此需要用到js生成生報表:

用到的組件:

jquery.jsjspdf.jscanvg.jshtml2canvas.jsjspdf.plugin.autotable.js

前臺動態生成的chart現在一般是用的html5的canvas或者是svg,很不幸運,我遇到的是svg, 如果是flash沒研究過。

由于報表還需要保持原html頁面的外觀,但是又不是整個html,真正需要轉換成pdf報表的是:html+svg

前提:jsPDF 支持html,但支持不是很好,當你用一個html直接生成pdf的時候,其實他只保留了html里面文本,樣式,結構都丟失了。
比如:table就丟失了。
jsPDF不支持svg導入。

思路:將svg轉換成canvas,再將html+canvas轉換成canvas,再使用html2canvas將canvas轉換成圖片,最后將圖片寫入pdf.
table的話就使用:jspdf.plugin.autotable.js

firefox:   html2canvas不能直接將svg+html轉換成canvas  --> 先將svg元素轉換成canvas --> html+canvas轉換成canvas
chrome:  html2canvas可以直接將svg+html轉換成canvas

//將指定節點下面的所有svg轉換成canvas//這里需要:canvg.jsfunction svg2canvas (targetElem) {  var nodesToRecover = [];  var nodesToRemove = [];  var svgElem = targetElem.find('svg');  svgElem.each(function(index, node) {    var parentNode = node.parentNode;        var svg = node.outerHTML;    var canvas = document.createElement('canvas');        canvg(canvas, svg);        nodesToRecover.push({      parent: parentNode,      child: node    });    parentNode.removeChild(node);        nodesToRemove.push({      parent: parentNode,      child: canvas    });        parentNode.appendChild(canvas);  });  }
//這里是將html(文本)在一個iframe里面打開//主要是排除其它元素的干擾導致不成功,之前是一直輸出不成功,所示才使用iframe//這段代碼是官網摳下來的。//還有個問題就是:如果將頁面的chart轉換成canvas了,那web頁面報表動態變化的功能將丟失。function openWithIframe(html){      var iframe = document.createElement('iframe');  iframe.setAttribute("id", "myFrmame");    var $iframe = $(iframe);  $iframe.css({   'visibility': 'hidden', 'position':'static', 'z-index':'4'  }).width($(window).width()).height($(window).height());  $('body').append(iframe);      var ifDoc = iframe.contentWindow.document;    //這里做是將報表使用到的css重新寫入到iframe中,根據自身的需要  var style = "<link href='/javax.faces.resource/css/auth.css.jsf' rel='stylesheet' type='text/css'>";  style+="<link href='/javax.faces.resource/css/common.css.jsf' rel='stylesheet' type='text/css'>";  style+="<link href='/javax.faces.resource/css/dc.css.jsf' rel='stylesheet' type='text/css'>";    html = "<!DOCTYPE html><html><head>"+style+"</head><body>"+html+"</body></html>"    ifDoc.open();      ifDoc.write(html);      ifDoc.close();    /*  //這里做一些微調,根據自身的需要  var fbody = $iframe.contents().find("body");    fbody.find("#chart-center").removeAttr("width");    fbody.find(".page-container").css("width", "370px");  fbody.find(".center-container").css("width", "600px");    fbody.find("#severity-chart svg").attr("width", "370");  fbody.find("#status-chart svg").attr("width", "300");  */  return fbody;}
//導出pdffunction exportAsPDF(){  //得到要導出pdf的html根節點    var chartCenter = document.getElementById("chart-center").outerHTML;    var fbody = openWithIframe(chartCenter);  svg2canvas(fbody);    //html2canvas官網的標準方法  html2canvas(fbody, {    onrendered: function(canvas) {      //var myImage = canvas.toDataURL("image/png");      //alert(myImage);      //window.open(myImage);            /*      canvas.toBlob(function(blob) {        saveAs(blob, "report.png");      }, "image/png");      */            //將圖片轉換成:base64編碼的jpg圖片。      var imgData = canvas.toDataURL('image/jpeg');      //alert(imgData);                  //l:橫向, p:縱向      var doc = new jsPDF('l', 'pt', 'a3');      //var doc = new jsPDF('p', 'mm', [290, 210]);      //var doc = new jsPDF();//默認是A4,由于我的報表比較大,所以專門設置了尺寸。      doc.setFontSize(22);      doc.setFontType("bolditalic");      doc.text(500, 30, "Ticket Report"); //x:500, y:30            doc.addImage(imgData, 'jpeg', 10, 60); //寫入位置:x:10, y:60            doc.addPage();  //新建一頁            //這里就是把將table寫入到pdf里面。      var res = doc.autoTableHtmlToJson(document.getElementById("tickets-summary-table"), true);      doc.autoTable(res.columns, res.data);            doc.save('ticket.report_'+new Date().getTime()+'.pdf');      $('#myFrmame').remove(); //最后將iframe刪除    },    background:"#fff", //這里給生成的圖片默認背景,不然的話,如果你的html根節點沒有設置背景的話,會用黑色填充。    allowTaint: true  //避免一些不識別的圖片干擾,默認為false,遇到不識別的圖片干擾則會停止處理html2canvas  });  };

以上所述就是本文的全部內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品成人av一区| 欧美午夜视频一区二区| 亚洲已满18点击进入在线看片| 久久综合伊人77777| 日本电影亚洲天堂| 综合久久五月天| 久久久久久中文| 国产成人精品一区二区三区| 国产精品视频1区| 日韩成人激情影院| 久久久精品久久久| 日韩av中文字幕在线| 久久视频在线播放| 国产精品高潮呻吟视频| 91免费观看网站| 欧美激情乱人伦| 亚洲大胆人体视频| 欧美综合激情网| 91av中文字幕| 菠萝蜜影院一区二区免费| 久久久久久久久久久久久久久久久久av| 日韩精品在线免费观看视频| 美女扒开尿口让男人操亚洲视频网站| 91爱爱小视频k| 亚洲福利视频网站| 91社影院在线观看| 亚洲日本中文字幕免费在线不卡| 精品久久香蕉国产线看观看gif| 国产精品久久久久久超碰| 欧美性资源免费| 国产精品视频色| 欧美亚洲一级片| 欧美最猛性xxxxx(亚洲精品)| 好吊成人免视频| 欧美精品日韩三级| 欧美自拍大量在线观看| 精品视频在线观看日韩| 国产精品自产拍在线观看中文| 国产日韩在线亚洲字幕中文| 一本色道久久88综合亚洲精品ⅰ| 欧洲亚洲免费视频| 亚洲国产精品久久久久| 亚洲色图国产精品| 精品中文视频在线| 在线成人免费网站| 国产亚洲视频在线观看| 久久亚洲私人国产精品va| 中文字幕欧美日韩精品| 懂色av中文一区二区三区天美| 成人福利在线视频| 伊人一区二区三区久久精品| 国产91精品在线播放| 欧美重口另类videos人妖| 伊人男人综合视频网| 亚洲成年网站在线观看| 久久视频在线视频| 亚洲中国色老太| 国产999视频| 亚洲成人aaa| 久久久99免费视频| 日韩有码在线视频| 久久偷看各类女兵18女厕嘘嘘| 国产精品美女免费视频| 亚洲精品欧美极品| 亚洲影院污污.| 亚洲精品美女视频| 欧美性jizz18性欧美| 91视频国产精品| 韩国三级电影久久久久久| 亚洲人成电影网站| 欧美日韩国产综合视频在线观看中文| 欧美日韩在线另类| 久久久久久久影院| 欧美韩国理论所午夜片917电影| 欧美大人香蕉在线| 成人福利网站在线观看11| 精品在线欧美视频| 亚洲一区美女视频在线观看免费| 欧美性猛交xxxx偷拍洗澡| 日韩精品中文字幕在线播放| 亚洲福利视频网站| 亚洲va欧美va在线观看| 欧美日韩第一视频| 欧美精品成人在线| 国产精品美女av| www.午夜精品| 成人免费在线视频网址| 国产精品免费视频久久久| 在线观看欧美www| 欧美亚洲国产日韩2020| 九九精品视频在线| 欧美一级淫片videoshd| 亚洲成人教育av| 成人有码在线播放| 美女国内精品自产拍在线播放| 久久免费国产精品1| 国产精品成人免费电影| 亚洲精品综合久久中文字幕| 久久伊人精品一区二区三区| 亚洲人成电影网站| 久久久中精品2020中文| 久久91亚洲精品中文字幕| 超碰91人人草人人干| 一区二区福利视频| 欧美一级片久久久久久久| 92裸体在线视频网站| 国产欧美精品一区二区| 国产日韩欧美在线观看| 免费91麻豆精品国产自产在线观看| 国产精品高潮呻吟久久av野狼| 91chinesevideo永久地址| 成人免费大片黄在线播放| 亚洲第一男人天堂| 亚洲综合精品一区二区| 乱亲女秽乱长久久久| 欧美三级免费观看| 在线精品91av| 欧洲中文字幕国产精品| 九九精品在线观看| 4p变态网欧美系列| 深夜精品寂寞黄网站在线观看| 欧美性黄网官网| 国产精品你懂得| 亚洲图片欧洲图片av| 久久人人爽人人爽爽久久| 欧美多人乱p欧美4p久久| 亚洲精品wwww| 在线看片第一页欧美| 久久精品国产99国产精品澳门| 欧美美女15p| 国产精品视频网站| 国产精品欧美一区二区三区奶水| 欧美成人免费大片| 国产成+人+综合+亚洲欧洲| 日韩美女视频在线观看| 韩剧1988在线观看免费完整版| 狠狠干狠狠久久| 亚洲成人精品视频在线观看| 国产91ⅴ在线精品免费观看| 国产欧美日韩丝袜精品一区| 亚洲欧美中文在线视频| www.日韩不卡电影av| 国产欧美精品一区二区三区介绍| 日韩美女在线观看一区| 久久人人爽亚洲精品天堂| 韩国福利视频一区| 色黄久久久久久| 国产精品免费福利| 亚洲激情在线观看| 色综合伊人色综合网站| 欧美日韩在线视频一区二区| 亚洲影院色无极综合| 亚洲japanese制服美女| 亚洲精品视频二区| 91精品在线播放| 欧美激情综合亚洲一二区| 国产99视频在线观看| 68精品国产免费久久久久久婷婷| 亚洲aaa激情| 国产精品久久久久免费a∨大胸| 国产成人精品电影久久久| 精品毛片三在线观看| 91精品国产色综合久久不卡98| 久久99亚洲热视|