2017-12-04 3 views
0

Ich versuche, ein PDF mit JsPDF und HTML2Canvas zu erstellen. Ich habe mehrere DIVs in das PDF einfügen. Wenn ich versuche, alle DIVs in einen Container zu legen und einmal zu rendern, wird nur die erste Seitenhöhe in das PDF eingefügt. Ich kann nicht herausfinden, wie man mehrere Divs rendert und sie in dieselbe PDF-Datei einfügt, so dass sie Seite für Seite weiterläuft.HTML2Canvas erstellen mehrere divs

JAVASCRIPT

function genPDF() {   
    html2canvas(document.getElementById("container"), { 

     onrendered: function (canvas) { 

      var img = canvas.toDataURL(); 

      var doc = new jsPDF(); 
      doc.addImage(img, 'PNG'); 
      doc.addPage(); 

      doc.save('test.pdf'); 
     } 
    }); 
} 

HTML

<div id="container"> 
    <div class="divEl" id="div1">Hi <img src="img1.JPG"> </div> 
    <div class="divEl" id="div2">Why <img src="img2.PNG"> </div> 
</div> 

<button onClick="genPDF()"> Click Me </button> 

Antwort

0

separat jedes Ihrer Bilder hinzufügen.
Sie müssen warten, bis alle html2canvas Renderings fertig sind und zu pdf hinzugefügt und speichern Sie dann Ihre endgültige pdf.

Eine Möglichkeit, dies zu erreichen, indem er mit JQuery und Anordnung von Versprechungen, würde tatsächliche Code wie folgt aussehen:

function genPDF() { 
    var deferreds = []; 
    var doc = new jsPDF(); 
    for (let i = 0; i < numberOfInnerDivs; i++) { 
     var deferred = $.Deferred(); 
     deferreds.push(deferred.promise()); 
     generateCanvas(i, doc, deferred); 
    } 

    $.when.apply($, deferreds).then(function() { // executes after adding all images 
     doc.save('test.pdf'); 
    }); 
} 

function generateCanvas(i, doc, deferred){ 

    html2canvas(document.getElementById("div" + i), { 

     onrendered: function (canvas) { 

      var img = canvas.toDataURL(); 
      doc.addImage(img, 'PNG'); 
      doc.addPage(); 

      deferred.resolve(); 
     } 
    }); 
} 
+1

Danke, aber Sie werden meine Unerfahrenheit entschuldigen. Ich bin ein sehr neuer Programmierer. Also, greife ich Formelemente und füge sie in divs. Wie kann ich die NummerOfInnerDivs wissen? – Timo

+1

Dies ist ein Lehrmittel für Sprachlehrer Ich habe Elemente wie: ''

''
etc ... sind bereits im Code und ich hinzufüge divs in diese basierend auf welchem ​​Grammatikelement sie sind verknüpft mit. Wie kann ich zählen, wie viele eingefügt werden, um das in die Funktion zu übergeben? – Timo

+0

Um die Anzahl der zu wiederholenden divs zu zählen, können Sie die Eigenschaft JQuery .length verwenden var numberOfInnerDivs = $ ('. DivEl'). Length; –