EDIT: nouvelle suggestion
HTML Renderer pour PDF en utilisant PdfSharp
(Après avoir essayé wkhtmltopdf et suggéré de l'éviter)
HtmlRenderer.PdfSharp est un code 100% entièrement géré en C # , facile à utiliser, sûr pour les threads et surtout GRATUIT ( nouvelle licence BSD ) .
Usage
- Téléchargez le package de nuget HtmlRenderer.PdfSharp.
Utilisez un exemple de méthode.
public static Byte[] PdfSharpConvert(String html)
{
Byte[] res = null;
using (MemoryStream ms = new MemoryStream())
{
var pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.GeneratePdf(html, PdfSharp.PageSize.A4);
pdf.Save(ms);
res = ms.ToArray();
}
return res;
}
Une très bonne alternative est une version gratuite d' iTextSharp
Jusqu'à la version 4.1.6 iTextSharp était sous licence LGPL et les versions jusqu'à 4.16 (ou il peut y avoir aussi des fourches) sont disponibles sous forme de packages et peuvent être utilisées librement. Bien sûr, quelqu'un peut utiliser la version payante continue 5+ .
J'ai essayé d'intégrer des solutions wkhtmltopdf sur mon projet et j'ai eu un tas d'obstacles.
Personnellement, j'éviterais d' utiliser des solutions basées sur wkhtmltopdf sur les applications Hosted Enterprise pour les raisons suivantes.
- Tout d'abord, wkhtmltopdf est implémenté en C ++ et non en C #, et vous rencontrerez divers problèmes pour l'intégrer dans votre code C #, en particulier lors du basculement entre les versions 32 bits et 64 bits de votre projet. J'ai dû essayer plusieurs solutions de contournement, y compris la construction de projet conditionnelle, etc., etc., juste pour éviter les "exceptions de format invalides" sur différentes machines.
- Si vous gérez votre propre machine virtuelle, c'est ok. Mais si votre projet s'exécute dans un environnement contraint comme ( Azure
(en fait, c'est impossible avec azure comme mentionné par l'auteur du mardi ),
Elastic Beanstalk, etc.), c'est un cauchemar de configurer cet environnement uniquement pour que wkhtmltopdf fonctionne.
- wkhtmltopdf crée des fichiers sur votre serveur, vous devez donc gérer les autorisations des utilisateurs et accorder un accès en "écriture" à l'endroit où wkhtmltopdf s'exécute.
- Wkhtmltopdf s'exécute en tant qu'application autonome, il n'est donc pas géré par votre pool d'applications IIS . Vous devez donc soit l'héberger en tant que service sur une autre machine, soit subir des pics de traitement et une consommation de mémoire au sein de votre serveur de production.
- Il utilise des fichiers temporaires pour générer le pdf, et dans des cas comme AWS EC2 qui a des E / S de disque vraiment lentes, c'est un gros problème de performances.
- L'erreur "Impossible de charger la DLL 'wkhtmltox.dll'" la plus détestée a été signalée par de nombreux utilisateurs.
--- Section PRE Edit ---
Pour tous ceux qui veulent générer du pdf à partir de html dans des applications / environnements plus simples, je laisse mon ancien message comme suggestion.
MardiPechkin
https://www.nuget.org/packages/TuesPechkin/
ou spécialement pour les applications Web
MVC (mais je pense que vous pouvez l'utiliser dans n'importe quelle application .net)
Rotativa
https://www.nuget.org/packages/Rotativa/
Ils utilisent tous les deux le
binaire wkhtmtopdf pour convertir le html en pdf. Qui utilise le moteur webkit pour le rendu des pages afin qu'il puisse également analyser les feuilles de style CSS .
Ils offrent une intégration transparente facile à utiliser avec C #.
Rotativa peut également générer directement des PDF à partir de n'importe quelle vue Razor .
De plus, pour les applications Web réelles, ils gèrent également la sécurité des threads, etc.