2017-07-20 157 views
0

我有一个名为 var = pictureModelHtml;转换HTML字符串PDF使用jsPDF

一个变量我有一个for循环,创建画布,并绘制每个画布上的图片。

for (i = 0; i < 10; i++) { 
    pictureModelHtml += '<div class="canvas" id="'+id+'"></div>; 
    pictureModelHtml += '<canvas id="'+uniqueId+'">picutre</canvas>'; 
} 

$('.canvas').each(function(i) { 
    //do something that draws a picture on a canvas corresponds to the canvas id. 
} 

我坚持将所有图片绘制为PDF。我正在使用jsPDF库来生成PDF。我有:

var pdf = new jsPDF(); 
pdf.fromHTML(pictureModelHtml); 
pdf.save("myfile.pdf"); 

pdf文件不显示任何picutre。它是空的。我错过了什么??任何人有一个想法如何做到这一点?请帮忙!!

+0

任何错误控制台(F12)?说,安全错误?如果没有,那么jsPDF可能不支持画布内容。我不知道为什么你不插入图像本身,而不是通过画布?即。 'pictureModelHtml + ='';'(图片通常被缓存,因此重用网址不应该提供任何明显的延迟)。 – K3N

回答

1

我认为这段代码对你有帮助。 您可以检查工作小提琴here

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    <script src="https://code.jquery.com/jquery-1.12.4.js"></script> 
    <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.3.4/jspdf.debug.js"></script> 
    <script type="text/javascript"> 
     var pictureModelHtml = ''; 
     $().ready(function() { 
      var imgData; 
      html2canvas($("#scream"), { 
       useCORS: true, 
       logging: true, 
       onrendered: function (canvas) { 
        imgData = canvas.toDataURL('image/png'); 
        imgData.crossOrigin = "Anonymous"; 
        var doc = new jsPDF('p', 'pt', 'a4'); 
        doc.addImage(imgData, 'PNG', 10, 10); 
        $('#scream1').attr('src', imgData); 

        for (i = 0; i < 10; i++) { 
         pictureModelHtml += '<canvas id="canvas-' + i + '">picutre</canvas>'; 
         $('#someHtml').html(pictureModelHtml); 
        } 

        setTimeout(function() { 
         $('canvas').each(function (i, canvas) { 
          var c = $(canvas)[0]; 
          var ctx = c.getContext("2d"); 
          var img = document.getElementById("scream1"); 
          ctx.drawImage(img, 10, 10); 
         }); 
        }, 1000); 
       } 
      }); 



     }); 

     var testDivElement = document.getElementById('someHtml'); 

     function savePDF(canvas) { 
      var imgData; 
      html2canvas($("#someHtml"), { 
       useCORS: true, 
       logging: true, 
       onrendered: function (canvas) { 
        imgData = canvas.toDataURL('image/png'); 
        var doc = new jsPDF('p', 'pt', 'a4'); 
        doc.addImage(imgData, 'PNG', 10, 10); 
        //doc.save('sample-file.pdf'); 
        setTimeout(function() { window.open(imgData) }, 1000); 
       } 
      }); 
     } 


    </script> 
</head> 
<body> 
    <img id="scream" width="220" height="277" src="http://e-cdn-images.deezer.com/images/artist/01eb92fc47bb8fb09adea9f763bb1c50/500x500.jpg" /> 
    <img id="scream1" style="display:none;" /> 
    <div id="someHtml"></div> 
    <br /> 
    <button id="savePDFbutton" onclick="savePDF()"> 
     save pdf 
    </button> 
</body> 
</html>