jspdf将html转换为多页的pdf

时间:2017-02-16 13:47:11

标签: javascript jspdf html2pdf

我正在使用jsPdf和html2pdf将html转换为pdf文件。

我可以转换html并下载文件,但是如果html太大而无法放到单个页面上,它就不会创建其他页面,我该怎么做?

代码是:

 var pdf = new jsPDF('l', 'pt', 'a4');
 pdf.canvas.height = 72 * 11;
 pdf.canvas.width = 72 * 8.5;
 html2pdf(document.getElementById(id), pdf, function(pdf){
     pdf.save('file.pdf');
 });

2 个答案:

答案 0 :(得分:2)

另一种解决方案。

var pdf = new jsPDF('p', 'pt', 'a4');
var options = {
     pagesplit: true
};

pdf.addHTML($(".pdf-wrapper"), options, function()
{
pdf.save("test.pdf");
});

来源:jsPDF multi page PDF with HTML renderrer

另一个答案:jsPDF multi page PDF with HTML renderrer

答案 1 :(得分:1)

如果以上答案无法解决,我就这样做了:

下载并按顺序包含:

  1. Jquery的
  2. html2canvas
  3. jspdf
  4. 谷歌他们很容易找到他们。然后将您的可打印代码放在div包装器报告中。并使用打印按钮调用该功能。 例如(在jsfiddle代码中不起作用,因为它不允许来自非cdn站点的外部代码,但它可以在服务器上工作)

    $(document).ready(function() {
       var form = $('#report');
       var cache_width = form.width();
       var a4 = [595.28, 841.89];
    
    
       $('#create_pdf').on('click', function() {
         $('body').scrollTop(0);
         createPDF();
       });
    
       //create pdf
       function createPDF() {
         getCanvas().then(function(canvas) {
           var imgWidth = 200;
           var pageHeight = 290;
           var imgHeight = canvas.height * imgWidth / canvas.width;
           var heightLeft = imgHeight;
           var doc = new jsPDF('p', 'mm');
           var position = 0;
    
           var img = canvas.toDataURL("image/jpeg");
    
    
    
    
     doc.addImage(img, 'JPEG', 0, position, imgWidth, imgHeight);
       heightLeft -= pageHeight;
    
    
    
       while (heightLeft >= 0) {
         position = heightLeft - imgHeight;
         doc.addPage();
         doc.addImage(img, 'JPEG', 0, position, imgWidth, imgHeight);
         heightLeft -= pageHeight;
       }
    
    
       doc.save('Report.pdf');
       form.width(cache_width);
      });
     }
    
    
     // create canvas object
       function getCanvas() {
         form.width((a4[0] * 1.33333) - 80).css('max-width', 'none');
         return html2canvas(form, {
           imageTimeout: 2000,
           removeContainer: false
         });
       }
    
    });
    

    https://jsfiddle.net/vnfts73o/1