jsPDF est capable d'utiliser des plugins. Afin de lui permettre d'imprimer du HTML, vous devez inclure certains plugins et devez donc faire ce qui suit:
- Accédez à https://github.com/MrRio/jsPDF et téléchargez la dernière version.
- Incluez les scripts suivants dans votre projet:
- jspdf.js
- jspdf.plugin.from_html.js
- jspdf.plugin.split_text_to_size.js
- jspdf.plugin.standard_fonts_metrics.js
Si vous souhaitez ignorer certains éléments, vous devez les marquer avec un ID, que vous pouvez ensuite ignorer dans un gestionnaire d'élément spécial de jsPDF. Par conséquent, votre code HTML devrait ressembler à ceci:
<!DOCTYPE html>
<html>
<body>
<p id="ignorePDF">don't print this to pdf</p>
<div>
<p><font size="3" color="red">print this to pdf</font></p>
</div>
</body>
</html>
Ensuite, vous utilisez le code JavaScript suivant pour ouvrir le PDF créé dans un PopUp:
var doc = new jsPDF();
var elementHandler = {
'#ignorePDF': function (element, renderer) {
return true;
}
};
var source = window.document.getElementsByTagName("body")[0];
doc.fromHTML(
source,
15,
15,
{
'width': 180,'elementHandlers': elementHandler
});
doc.output("dataurlnewwindow");
Pour moi, cela a créé un PDF agréable et bien rangé qui ne comprenait que la ligne «imprimer ceci en pdf».
Veuillez noter que les gestionnaires d'éléments spéciaux ne traitent que les ID dans la version actuelle, ce qui est également indiqué dans un problème GitHub . Il est dit:
Parce que l'appariement est fait contre chaque élément de l'arborescence des nœuds, mon désir était de le faire le plus rapidement possible. Dans ce cas, cela signifie "Seuls les ID d'élément sont mis en correspondance" Les ID d'élément sont toujours définis dans le style jQuery "#id", mais cela ne signifie pas que tous les sélecteurs jQuery sont pris en charge.
Par conséquent, le remplacement de «#ignorePDF» par des sélecteurs de classe comme «.ignorePDF» n'a pas fonctionné pour moi. Au lieu de cela, vous devrez ajouter le même gestionnaire pour chaque élément, que vous souhaitez ignorer comme:
var elementHandler = {
'#ignoreElement': function (element, renderer) {
return true;
},
'#anotherIdToBeIgnored': function (element, renderer) {
return true;
}
};
À partir des exemples, il est également indiqué qu'il est possible de sélectionner des balises comme «a» ou «li». Cela pourrait être un peu restrictif pour la plupart des cas d'utilisation:
Nous prenons en charge les gestionnaires d'éléments spéciaux. Enregistrez-les avec le sélecteur d'ID de style jQuery pour l'ID ou le nom du nœud. ("#iAmID", "div", "span" etc.) Il n'y a aucun support pour aucun autre type de sélecteurs (classe, de composé) pour le moment.
Une chose très importante à ajouter est que vous perdez toutes vos informations de style (CSS). Heureusement, jsPDF est capable de formater joliment h1, h2, h3 etc., ce qui était suffisant pour mes besoins. De plus, il imprimera uniquement le texte dans les nœuds de texte, ce qui signifie qu'il n'imprimera pas les valeurs des zones de texte et similaires. Exemple:
<body>
<ul>
<!-- This is printed as the element contains a textnode -->
<li>Print me!</li>
</ul>
<div>
<!-- This is not printed because jsPDF doesn't deal with the value attribute -->
<input type="textarea" value="Please print me, too!">
</div>
</body>