天天看點

怎麼用純js函數列印目前頁面,把目前頁面另存為本地pdf檔案,并且讓它自動分頁?

相信很多人在做前端的時候,有時候需要把前端頁面上的内容導出來,傳統的方法是在用背景用IO流,用IO流寫起來往往非常麻煩,這裡我提供了純前端的解決方法

首先是引入網上的兩個庫

<script src="https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.js"></script>
<script src="https://cdn.bootcss.com/jspdf/1.3.4/jspdf.debug.js"></script>
           

下面是js函數

function println(){
			  html2canvas(document.body, {
              onrendered:function(canvas) {
                  var contentWidth = canvas.width;
                  var contentHeight = canvas.height;
                  //一頁pdf顯示html頁面生成的canvas高度;
                  var pageHeight = contentWidth / 595.28 * 841.89;
                  //未生成pdf的html頁面高度
                  var leftHeight = contentHeight;
                  //pdf頁面偏移
                  var position = 0;
                  //a4紙的尺寸[595.28,841.89],html頁面生成的canvas在pdf中圖檔的寬高
                  var imgWidth = 555.28;
                  var imgHeight = 555.28/contentWidth * contentHeight;
                  var pageData = canvas.toDataURL('image/jpeg', 1.0);
                  var pdf = new jsPDF('', 'pt', 'a4');
                  //有兩個高度需要區分,一個是html頁面的實際高度,和生成pdf的頁面高度(841.89)
                  //當内容未超過pdf一頁顯示的範圍,無需分頁
                  if (leftHeight < pageHeight) {
                      pdf.addImage(pageData, 'JPEG', 20, 0, imgWidth, imgHeight );
                  } else {
                      while(leftHeight > 0) {
                          pdf.addImage(pageData, 'JPEG', 20, position, imgWidth, imgHeight)
                          leftHeight -= pageHeight;
                          position -= 841.89;
                          //避免添加空白頁
                          if(leftHeight > 0) {
                              pdf.addPage();
                          }
                      }
                  }

                  pdf.save('content.pdf');
              }
          })
          alert("正在導出,請稍後");
			  setTimeout(function(){location.reload();},2000); //延遲兩秒重新整理頁面,根據實際情況,這一句可以不要
		}
           

下面是導出的效果

怎麼用純js函數列印目前頁面,把目前頁面另存為本地pdf檔案,并且讓它自動分頁?
怎麼用純js函數列印目前頁面,把目前頁面另存為本地pdf檔案,并且讓它自動分頁?