2017-12-04 32 views
0

jsPDF 및 HTML2Canvas를 사용하여 PDF를 만들려고합니다. PDF로 삽입 할 DIV가 여러 개 있습니다. 모든 DIV를 컨테이너에 넣고 한 번 렌더링하면 첫 페이지 높이가 PDF에만 놓입니다. 여러 div를 렌더링하고 동일한 PDF에 붙여서 페이지별로 계속 이동하는 방법을 알아낼 수 없습니다.여러 div를 만드는 HTML2Canvas

JAVASCRIPT

<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

는 별도로 각 이미지를 추가

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.
html2canvas 렌더링이 완료되고 pdf에 추가 될 때까지 기다렸다가 최종 PDF를 저장해야합니다.

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

감사합니다하지만 당신은 내 경험 부족을 용서해야합니다 : JQuery와 및 약속의 배열을 사용하여이를 달성하기

한 가지 방법, 실제 코드는 다음과 같을 것이다. 나는 아주 새로운 코더입니다. 그래서 양식 요소를 잡고 div에 추가하고 있습니다. 그러면 numberOfInnerDivs를 어떻게 알 수 있습니까? – Timo

+1

이 언어 교사를위한 교육 도구입니다 내가 좋아하는 요소를 가지고 : '

' '
' 등 ... 코드에서 이미 나는 그들이있어 어떤 문법 요소에 따라 이들로 된 div를 추가 해요 와 관련된. 얼마나 많은 요소를 함수에 전달하기 위해 얼마나 많은 요소가 삽입되었는지 계산할 수 있습니까? – Timo

+0

반복 할 div 수를 계산하려면 JQuery .length 속성 을 사용합니다. var numberOfInnerDivs = $ ('. divEl'). length; –