2017-12-04 103 views
0

jsPDFとHTML2Canvasを使用してPDFを作成しようとしています。 私はPDFに挿入する複数のDIVを持っています。 すべてのDIVをコンテナに入れて一度レンダリングしようとすると、最初のページの高さだけがPDFに挿入されます。 複数のdivをレンダリングして同じPDFに貼り付けることができないため、1ページずつページが移動します。複数のdivを作成するHTML2Canvas

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> 

答えて

0

は別にあなたのイメージのそれぞれを追加します。
すべてのhtml2canvasレンダリングが完了し、pdfに追加されてから最終的なpdfを保存するまで待つ必要があります。

つのjQueryを使用することによって、これを達成する方法と約束の配列、実際のコードは次のようになります。

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

おかげいますが、私の経験不足を言い訳する必要があります。私は非常に新しいコーダーです。 したがって、私はフォームの要素をつかんでdivに追加しています。だから私はnumberOfInnerDivsを知ることができますか? – Timo

+1

これは私のような要素を持っている教師 のための教育ツールです... '

' '
' などをコードに既にあるし、私は彼らがしているどの文法要素に基づいて、これらの中にdivを追加していますと関連した。 これを関数に渡すために挿入されたオブジェクトの数はどのようにして計算できますか? – Timo

+0

反復するdivの数をカウントするには、JQueryの.lengthプロパティを使用します。 var numberOfInnerDivs = $( '。divEl')。 –

関連する問題