將HTML頁面轉換爲PDF文件並導出

目前,在大多數的管理系統中,都會有這樣一個功能:根據相關的條件查詢相應的數據,並生成可視化報表,而後可導出爲PDF文件。本文只展示生成可視化報表以後導出PDF文件的過程,生成可視化的報表可以使用Echarts,D3js等框架。css

1.須要引入的文件html

html2canvas.js(根據實際狀況選擇相應的版本)
jspdf.min.js(根據實際狀況選擇相應的版本)canvas

2.實現思路瀏覽器

(1)在body中將須要生成PDF的HTML複製一份,切記:若是元素中含有ID,則必須從新給定
(2)將新的元素設置爲position:absolute; 脫離文檔流,由於處於文檔流中被瀏覽器遮擋的部分不會生成PDF。
(3)利用html2canvas.js將新的元素生成圖片
(4)利用jspdf.min.js將圖片生成PDF文件並保存到本地。

3.實現代碼app

(1)HTML代碼
 
/*將要生成PDF的HTML代碼*/
<div id="pdf">
………………………………
</div> 

(2)JS代碼

/*複製元素,注意ID*/
$("body").append('<div id="pdf1">…………………………………………………………</div>');
/*設置新元素樣式*/
 $("#pdf1").css({
    "background-color": "#fff",
    "position": "absolute",
    "top": "0px",
    "z-index": "-1",
    "height": $("#pdf").height()
});
/*html2canvas生成圖片,jspdf生成PDF文件*/
html2canvas($("#pdf1"), {
    background: "#fff",
    allowTaint: true,
    taintTest: false,
    onrendered:function(canvas) {
        var contentWidth = canvas.width;
        var contentHeight = canvas.height;
        var pageHeight = contentWidth / 592.28 * 841.89;
        var leftHeight = contentHeight;
        var position = 0;
        var imgWidth = 595.28;
        var imgHeight = 592.28/contentWidth * contentHeight;
        var pageData = canvas.toDataURL('image/jpeg', 1.0);
        var img = new Image();
        img.src = pageData;
        var pdf = new jsPDF('p', 'pt', 'a4');
        img.onload = function() {
            if (leftHeight < pageHeight) {
                pdf.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight );
            } else {
                while(leftHeight > 0) {
                    pdf.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
                    leftHeight -= pageHeight;
                    position -= 841.89;
                    if(leftHeight > 0) {
                        pdf.addPage();
                    }
                }
            }
            pdf.save('report_pdf_' + new Date().getTime() + '.pdf');
            $("#pdf1").remove();
        }
    },
})

以上爲筆者在項目中的部分核心代碼,若有問題,歡迎指正。框架

相關文章
相關標籤/搜索