用JS实现HTML转PDF

遇到这个需求,现把实现代码整理出来,方便大家参考

<!-- html转PDF -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/1.0.272/jspdf.debug.js"></script>

/*

  代码无需改动,直接拿去套用即可

  particulars-container 为页面最外围盒子ID,可以从内容区开始,也可以从body范围开始,可以根据具体情况变动

  在本地HTML转PDF时页面中的图片是无法正常显示的,需要起服务,把项目放进去

*/

html2canvas(document.getElementById('particulars-container'), {
      onrendered:function(canvas) {
               var contentWidth = canvas.width;
               var contentHeight = canvas.height;

               //一页pdf显示html页面生成的canvas高度;
               var pageHeight = contentWidth / 592.28 * 841.89;
                   //未生成pdf的html页面高度
              var leftHeight = contentHeight;
                   //页面偏移
              var position = 0;
              //a4纸的尺寸[595.28,841.89],html页面生成的canvas在pdf中图片的宽高
              var imgWidth = 595.28;
              var imgHeight = 592.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', 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('content.pdf');
    }
})

 

 

参考文章:https://github.com/linwalker/render-html-to-pdf

posted @ 2017-10-12 11:23  *小七儿*  阅读(7138)  评论(0编辑  收藏  举报