var pas affecté en dehors de la fonction?

J’essaye de convertir un html en pdf en utilisant jsPDF. Cependant, la variable et les choses qui se passent dans une fonction semblent être invisibles pour tout ce qui est en dehors de la fonction. Voici mon code:

$(document).ready(function() { $("#runpdf").click(function(event) { var doc = new jsPDF(); var imageData; html2canvas($("#page1"), { logging:true, profile:true, allowTaint:true, letterRendering: true, onrendered:function(canvas) { imageData= canvas.toDataURL("image/jpeg"); doc.addImage(imageData, 'JPEG', 0, 0, 200, 200); } }); doc.save('test.pdf'); }); }); 

Lors de l’exécution, une page vierge est affichée, indiquant notamment que tout ce qui se trouve dans la fonction html2canvas n’a pas réellement affecté var doc . Cependant, en mettant le doc.save('test.pdf'); bit dans la fonction (après doc.addImage() ), il s’exécute doc.addImage() avec la page en cours de rendu. Cependant, je ne peux pas le faire car je vais utiliser une boucle for-each pour exécuter la fonction html2canvas plusieurs fois sur plusieurs pages, puis à la fin, enregistrer le document. Mais cela ne fonctionnera pas car il semble que le doc.save() doit être dans la même fonction que le rest. Comment puis-je éviter ce problème?

Merci
Edit: Problème résolu en utilisant un compteur et une simple instruction if.

 var doc = new jsPDF("p", "pt", "letter"); $(document).ready(function () { $("#runpdf").click(function (event) { $(document.body).width(1903); var count=0; $("section").each(function() { $(this).children('footer').children('article').append($(document.createElement('span')).text((count+1)+".").css("float","right").css("font-weight", "900").css("font-size","150%")); count++; }); var pages = $(".page5"); var remaining = pages.length; pages.each(function () { html2canvas($(this), { logging: true, profile: true, allowTaint: true, letterRendering: true, onrendered: function (canvas) { var imageData = canvas.toDataURL("image/jpeg"); doc.addImage(imageData, 'JPEG', -425, 0, 1450, 800); remaining--; if (remaining === 0) { doc.save('test.pdf'); } doc.addPage(); } }); }); }); }); 

Merci pour l’aide, tout le monde

Vous devez mettre votre sauvegarde après avoir ajouté l’image:

  html2canvas($("#page1"), { logging:true, profile:true, allowTaint:true, letterRendering: true, onrendered:function(canvas) { imageData= canvas.toDataURL("image/jpeg"); doc.addImage(imageData, 'JPEG', 0, 0, 200, 200); doc.save('test.pdf'); } }); 

La fonction onrendered est un rappel et sera exécutée une fois l’image rendue. Dans votre code, la sauvegarde est appelée avant l’ajout de l’image.

alors vous pouvez enregistrer chez onrendered

 onrendered:function(canvas) { imageData= canvas.toDataURL("image/jpeg"); doc.addImage(imageData, 'JPEG', 0, 0, 200, 200); doc.save('test.pdf'); }