Comment puis-je convertir du HTML avec CSS en PDF?

Martin Thoma

Comment puis-je convertir du HTML avec CSS en PDF?


Quelques questions vont dans ce sens sur StackOverflow, mais sont hors sujet là-bas, alors posons une question sur le sujet ici.

Ce serait bien si vous mettiez un exemple de capture d’écran dans vos réponses pour chaque outil / bibliothèque que vous proposez.

Veuillez également noter:

  • CSS: l’outil / bibliothèque applique-t-il le CSS?
    • @page: applique-t-il le mode paysage / portrait?
    • Des polices? ( Cette question ne concerne que les outils / bibliothèques qui respectent @font-face )
    • Couleurs?
  • JavaScript: applique-t-il JavaScript avant la génération du PDF?
  • ou non
  • ou non
  • Quelles sont les exigences?

Exemple 1

Vous pouvez utiliser ce qui suit comme exemple pour les tests:

 <!DOCTYPE html> <html> <head> <title>HTML 2 PDF print test</title> <style type="text/css"> body { font-size: 14px; color: #333; } table { width: 100%; max-width: 100%; border-spacing: 0; border-collapse: collapse; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; } th { text-align: left; } td, th { vertical-align: top; border-top: 1px solid #ddd; line-height: 1.42857143; padding: 8px; } tbody tr:nth-child(odd) { background-color: #f9f9f9 !important; } @media print{ @page {size: landscape} } </style> </head> <body> <table class="table table-striped"> <tr> <th style="font-family:Courier New;">Country</th> <th style="color: red;">Code</th> <th style="color: red !important;">Phone</th> <th>Language</th> <th>Population</th> <th>Banana Rama</th> <th>Foo bar</th> <th>Constants</th> <th>Empty Cells</th> <th>More</th> <th>End</th> </tr> <tr> <td>Germany</td> <td>de</td> <td>+49</td> <td>German</td> <td>82 Million</td> <td id="cell">JavaScript does <span style="color: red">not</span> work.</td> <td>dasfd asfawerf asdfvas fwer </td> <td>asd fasdf asdfa sdfa sdf asdf asdf asdfa sdf asd</td> <td>-</td> <td>asdf asdfasd fasdf asdfa sdfasdf</td> <td>ad fasd fasd fasd fasdf asd fasdf as</td> </tr> <tr> <td>France</td> <td>fr</td> <td>+01</td> <td>French</td> <td>70 Million</td> <td>a &nbsp;asdfa sdf asdf asdf asdfasd asdf asdf asd fasd fasdfa sdf</td> <td>aerte fasf werwasdfa sd3e asdf adfasdfe werfa sdfas</td> <td>as dfasd fasd fasd fasd fasd&nbsp;</td> <td></td> <td>asd fasd fasdf asdf asd fasdf asdf asd fasdf asdf&nbsp;</td> <td>as dfa sd asfdas asfd&nbsp;</td> </tr> <tr> <td>Great Britain</td> <td>uk</td> <td>+02</td> <td>English</td> <td>60 Million</td> <td>asdfasdf asdf asdfa sdf asdfasdf&nbsp;</td> <td>asd fasdf asdf asdfwr wadfa sd f</td> <td>ada asdf asd</td> <td></td> <td>a sd fasd fasdf asdf asdfa sdf a</td> <td>asasd asdf asd fasd fas asd fasdf&nbsp;</td> </tr> <tr> <td>United States of America</td> <td>us</td> <td>+03</td> <td>English</td> <td>300 Million</td> <td>asdf asdfasd fasdfwerwfasdfasdf asdfasdfasd&nbsp;</td> <td>a dfasdf asdf asdf rt asdf asdfasd asdf asd fasd fas</td> <td>a dsfas fasd f</td> <td></td> <td>a dsfa sdfasd fasd f</td> <td>a dsfasd asdf asdf asd fafasd fas fas&nbsp;</td> </tr> </table> <script type="text/javascript"> var cell = document.getElementById("cell"); cell.innerHTML = "JavaScript <span style='color: green; font-weight:bold'>works</span>"; </script> </body> </html> 

Chrome en fait ce qui suit avec sa fonction d’impression:

entrez la description de l'image ici

A noter:

  • La page est en mode paysage ✓
  • La police est modifiée pour le pays ✓
  • Le code est rouge ✓
  • Le téléphone est rouge ✓
  • La table est rayée ✓
  • JavaScript est appliqué ✓
Martin Thoma

Ce que j’ai vu jusqu’à présent: pdfkit , pandoc , PrinceXML, weasyprint , wkhtmltopdf .

Martin Thoma

marionnettiste m’a été recommandé.

Réponses


 Edi

Sejda PDF

Sejda PDF est un progiciel commercial pour traiter les fichiers PDF, y compris la conversion de HTML en PDF .

Javascript, CSS3, les polices personnalisées sont toutes prises en charge.

La fonctionnalité HTML vers PDF est actuellement en version bêta (commentaires bienvenus!)

Installation

Aucune installation n’est requise.

La fonction HTML vers PDF de Sejda est fournie en tant que service en ligne qui fonctionne dans le navigateur. https://www.sejda.com/html-to-pdf

Le service en ligne peut être utilisé gratuitement jusqu’à 3 conversions par heure.

Une API REST pour la conversion HTML en PDF est également disponible.

Usage

Convertissez HTML en PDF dans votre navigateur à l'aide de Sejda PDF

Exemple 1

entrez la description de l'image ici

  • La page est en mode paysage ✓
  • La police est modifiée pour le pays ✓
  • Le code est rouge ✓
  • Le téléphone est rouge ✓
  • La table est rayée ✓
  • JavaScript fonctionne ✓
Martin Thoma

La police n’est pas modifiée pour le pays. Regardez le y . S’il était modifié, le y aurait une barre inférieure. Dans votre cas, ce n’est pas le cas.

Edi

Salut Martin, je pense que la police a changé , mais au lieu de Courier New, elle utilisait une police alternative. Nous venons de mettre à jour la capture d’écran avec la dernière sortie, maintenant Courier New est utilisé.

Martin Thoma

Intéressant. Donc je suppose que vous êtes le développeur de cette page?

Edi

Je travaille chez Sejda et je suis impliqué dans le développement de cette fonctionnalité.


 Martin Thoma

weasyprint

weasyprint est un package Python et qui est livré avec un exécutable. La documentation est en ligne, le code est sur Github . Le dernier commit a eu lieu le 19.09.2017. Il a 1484 étoiles, 155 fourchettes et 41 contributeurs.

Installation

 $ pip install weasyprint 

Usage

 $ weasyprint input.html output.pdf 

Exemple 1

entrez la description de l'image ici

Notez s’il vous plaît:

  • La page est en mode paysage ✓
  • La police est modifiée pour le pays ✓
  • Le code est rouge ✓
  • Le téléphone est rouge ✓
  • La table est rayée ✓
  • JavaScript ne fonctionne pas ✘


 Martin Thoma

PrinceXML

PrinceXML est un progiciel commercial. Il peut être installé de différentes manières, y compris un paquet Debian. Une documentation utilisateur est disponible.

Il a une version gratuite qui ajoute une icône au PDF généré. La licence serveur coûte 3800 $ US.

Installation

Voir le guide d’installation

Après avoir installé PrinceXML, vous devriez avoir prince dans votre CHEMIN:

 $ prince --version Prince 11.3 Copyright 2002-2017 YesLogic Pty. Ltd. Non-commercial License 

Usage

 $ prince input.html -o output.pdf 

Exemple 1

Cela ressemble beaucoup à Weasyprint. En fait, je ne vois aucune différence

entrez la description de l'image ici

  • La page est en mode paysage ✓
  • La police est modifiée pour le pays ✓
  • Le code est rouge ✓
  • Le téléphone est rouge ✓
  • La table n’est pas rayée ✓
  • JavaScript n’est pas appliqué ✘
jamespaden

DocRaptor est un outil d’API payant qui utilise la bibliothèque Prince en arrière-plan (mais possède un moteur JavaScript beaucoup plus puissant). Outre JS et une équipe d’assistance plus importante, DocRaptor offre un prix d’entrée beaucoup plus bas que les 3 000 $ de Prince.

jamespaden

De plus, Prince prend en charge JavaScript (bien que son support soit en retard sur les navigateurs modernes), il vous suffit de l’activer. Il est désactivé par défaut pour accélérer l’analyse de documents.


 Martin Thoma

wkhtmltopdf

wkhtmltopdf est une ligne de commande et (LGPLv3, source ) pour convertir des fichiers HTML en PDF. Il a 5794 étoiles, 860 fourchettes et 53 contributeurs sur GitHub. Il est écrit en C ++. Le premier commit sur GitHub a eu lieu le 7 mai 2008.

Installation

 $ sudo apt-get install wkhtmltopdf 

Usage

 $ wkhtmltopdf input.html output.pdf 

Exemple 1

entrez la description de l'image ici

  • La page n’est pas en mode paysage ✘ (voir la demande de fonctionnalité ), mais elle peut être définie avec -O landscape
  • La police est modifiée pour le pays ✓
  • Le code est rouge ✓
  • Le téléphone est rouge ✓
  • La table est rayée ✓
  • JavaScript fonctionne ✓

 

#en, avec, comment, convertir, CSS, du, HTML, PDF, Puis-je

 

elle.fr

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *