經過前端js將頁面表格導出爲PDF(二)

  前面我說道了,將頁面的表格導出爲pdf,經過我給出的代碼無缺的實現了其需求,可是沒過幾天,又說不行了,由於個人表格是按照最多26行就進行分頁,若是表格行數一多,就要點擊下一頁再進行pdf的導出,由於是面向客戶的,因此要儘可能減小用戶的操做,所以要改爲,一鍵導出全部的表格,而後自動分頁,每頁再加上特定的圖片。我就日了@#@#@!這是。。。。,沒辦法,改唄,前先後後折騰了兩天,終於讓我給整出來了,不容易啊!真的的是有需求才有動力啊!html

  先說一下個人方式:首先仍是按照正常的進行分頁顯示,當點擊導出pdf按鈕時,跳轉到另外一個頁面,在這個頁面表格不進行分頁,而是徹底的顯示在一頁,而後渲染再pdf導出,經過cavase的錯位,使用空白的圖片,覆蓋住多餘的表格,而後依次下去,直到全部的都移動完,這樣就能夠多頁導出了。就好像下圖同樣的原理jquery

  首先仍是老樣子,引入文件canvas

<script src="add/pdf/jquery.js"></script>
<script src="add/pdf/jspdf.debug.js"></script>
<script src="add/pdf/html2canvas.min.js"></script>
<script src="add/pdf/exportpdf.js"></script>

exportpdf.jsjsp

$('#exportpdf').click(function () {
    html2canvas(document.getElementById("contents"), {
        onrendered: function(canvas) {
            // 頁面生成的canvas高
            var contentHeight = canvas.height;

            //未生成pdf的html頁面高度
            var allHeight = contentHeight;

            //pdf頁面頭偏移距離(偏移量)
            var position = 60;

            //a4紙的尺寸[595.28,841.89],html頁面生成的canvas在pdf中圖片的寬高
            var imgWidth = 595;

            var imgData = canvas.toDataURL('image/jpeg');

       var img1_base = '~';
       var img2_base = '~';
       var img3_base = '~';
       var img4_base = '~';
       var img5_base = '~';
//初始化pdf,設置相應格式 var doc = new jsPDF("p", "pt", "a4"); var p = 1, i = 1.5, z = Math.ceil(last_counts/26);        
       // 若是高度小於一頁就 if (allHeight < 1100) { // 頁面表單 doc.addImage(imgData, 0, position, imgWidth, contentHeight/i); // 一張空白圖片(將超過的覆蓋) doc.addImage(img4_base, 0, 0, 600, 110); // 公司logo doc.addImage(img1_base, 10, 5, 90, 50); doc.addImage(img2_base, 450, 5, 130, 50); // 空白圖片(將不須要的覆蓋) doc.addImage(img4_base, 0, 760, 600, 200); doc.addImage(img3_base, 450, 780, 120, 40); // 訂單總計圖片 doc.addImage(img5_base, 0, 68, 600, 25);
         // 文字(由於jspdf不支持中文,因此先將要用的中文製做成圖片使用) doc.setFontSize(
10); doc.text(8, 85, start_time); doc.text(75, 85, end_time); doc.text(160, 85, String(last_counts)); doc.text(268, 85, String(total_price)); doc.text(508, 85, String(lists[p])); doc.text(290, 820, String(p)); } else { // 若是大於一頁 if (z > 0) { // 頁面表單 doc.addImage(imgData, 0, position, imgWidth, contentHeight/i); // 空白圖片 doc.addImage(img4_base, 0, 0, 600, 110); // 公司logo doc.addImage(img1_base, 10, 5, 90, 50); doc.addImage(img2_base, 450, 5, 130, 50); // 空白圖片 doc.addImage(img4_base, 0, 760, 600, 200); doc.addImage(img3_base, 450, 780, 120, 40); // 訂單總計圖片 doc.addImage(img5_base, 0, 68, 600, 25); doc.setFontSize(10); doc.text(8, 85, start_time); doc.text(75, 85, end_time); doc.text(160, 85, String(last_counts)); doc.text(268, 85, String(total_price)); doc.text(508, 85, String(lists[p])); doc.text(290, 820, String(p));
            // 每導出一頁就進行相應的偏移 position -= 624; z -= 1; while (z > 0) { doc.addPage('a4', 'pt'); // 頁面表單 doc.addImage(imgData, 0, position, imgWidth, contentHeight/i); // 空白圖片 doc.addImage(img4_base, 0, 0, 600, 130); // 表頭 doc.addImage(img6_base, 5, 113, 586, 24); // 公司logo doc.addImage(img1_base, 10, 5, 90, 50); doc.addImage(img2_base, 450, 5, 130, 50); doc.addImage(img4_base, 0, 760, 600, 200); doc.addImage(img3_base, 450, 780, 120, 40); // 訂單總計圖片 doc.addImage(img5_base, 0, 68, 600, 25); doc.setFontSize(10); doc.text(8, 85, start_time); doc.text(75, 85, end_time); doc.text(160, 85, String(last_counts)); doc.text(268, 85, String(total_price)); p += 1; doc.text(508, 85, String(lists[p])); doc.text(300, 820, String(p)); // allHeight -= 1000; position -= 624; z -= 1; } } } doc.save('bill.pdf'); }, background: '#FFF' }) });
相關文章
相關標籤/搜索