web-dev-qa-db-fra.com

Convertir HTML en PDF en .NET

Je souhaite générer un PDF en transmettant le contenu HTML à une fonction. Je me suis servi de iTextSharp pour cela, mais il ne fonctionne pas bien lorsqu'il rencontre des tables et la présentation devient désordonnée.

Y a-t-il un meilleur moyen?

393
SandHurst

Mise à jour: Je recommanderais maintenant PupeteerSharp via wkhtmltopdf.

Essayez wkhtmtopdf . C'est le meilleur outil que j'ai trouvé jusqu'à présent.

Pour .NET, vous pouvez utiliser cette petite bibliothèque pour appeler facilement l’utilitaire de ligne de commande wkhtmtopdf.

184
Marko

EDIT: nouvelle suggestion rendu HTML pour PDF à l'aide de PdfSharp

(Après avoir essayé wkhtmltopdf et suggéré de l'éviter)

HtmlRenderer.PdfSharp est un code géré 100% entièrement C # , facile à utiliser, thread safe et surtout LIBRE ( nouvelle licence BSD ) Solution.

Usage

  1. Télécharger le package nuget HtmlRenderer.PdfSharp .
  2. Utilisez la méthode exemple.

    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;
    }
    

Un très bon remplaçant est un Version gratuite sur iTextSharp

Jusqu’à la version 4.1.6, iTextSharp était sous licence LGPL et les versions jusqu’à la version 4.16 (ou éventuellement des forks) sont disponibles sous forme de packages et peuvent être utilisés librement. Bien sûr, quelqu'un peut utiliser la suite 5+ version payante .

J'ai essayé d'intégrer des solutions wkhtmltopdf à mon projet et j'ai rencontré de nombreux obstacles.

Personnellement, j’éviterais d’utiliser des solutions basées sur wkhtmltopdf sur des applications hébergées pour les raisons suivantes.

  1. 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, y compris la construction de projet conditionnelle, etc., simplement pour éviter les "exceptions de format non valide" sur différentes machines.
  2. Si vous gérez votre propre machine virtuelle, c'est ok. Mais si votre projet est exécuté dans un environnement contraint comme ( Azure (En fait, c'est impossible avec Azure comme mentionné par l'auteur de mardi mardi ), Elastic Beanstalk etc.) C'est un cauchemar de configurer cet environnement uniquement pour wkhtmltopdf pour travailler.
  3. wkhtmltopdf crée des fichiers sur votre serveur. Vous devez donc gérer les autorisations des utilisateurs et octroyer un accès en écriture à l'emplacement où wkhtmltopdf est exécuté.
  4. Wkhtmltopdf s'exécute en tant qu'application autonome. Son 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 importante sur votre serveur de production.
  5. Il utilise des fichiers temporaires pour générer le fichier PDF, et dans des cas similaires à AWS EC2 , qui présente un disque très lent, c’est un gros problème de performances.
  6. L'erreur "Impossible de charger DLL 'wkhtmltox.dll'" la plus détestée signalée par de nombreux utilisateurs.

--- PRE Section d'édition ---

Pour ceux qui veulent générer du pdf à partir de HTML dans des applications/environnements plus simples, je laisse mon ancien message en guise de suggestion.

mardi Pechkin

https://www.nuget.org/packages/TuesPechkin/

ou spécialement pour MVC Applications Web (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 fournissent une intégration transparente facile à utiliser avec C #.

Rotativa peut également générer directement des fichiers 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.

178
Anestis Kivranoglou

La plupart des convertisseurs HTML en PDF reposent sur IE pour l'analyse et le rendu HTML. Cela peut casser lorsque l'utilisateur met à jour son IE. Ici est celui qui ne repose pas sur IE.

Le code ressemble à ceci:

EO.Pdf.HtmlToPdf.ConvertHtml(htmlText, pdfFileName);

Comme beaucoup d'autres convertisseurs, vous pouvez passer du texte, un nom de fichier ou une URL. Le résultat peut être enregistré dans un fichier ou un flux.

29
Jason

J'ai récemment effectué une PoC concernant la conversion HTML en PDF et je souhaitais partager mes résultats.

Mon préféré est de loin OpenHtmlToPdf

Avantages de cet outil:

  • Très bonne compatibilité HTML (par exemple, c'était le seul outil de mon exemple qui répète correctement les en-têtes de tableau lorsqu'un tableau s'étend sur plusieurs pages)
  • API Fluent
  • Free et OpenSource ( licence Creative Commons Attribution 3. )
  • Disponible via NuGet

Autres outils testés:

27
Markus

Je recommande fortement NReco , sérieusement. Il a la version gratuite et payante, et vaut vraiment la peine. Il utilise wkhtmtopdf en arrière-plan, mais vous n'avez besoin que d'un assemblage. Fantastique.

Exemple d'utilisation:

Installer via NuGet .

var htmlContent = String.Format("<body>Hello world: {0}</body>", DateTime.Now);
var pdfBytes = (new NReco.PdfGenerator.HtmlToPdfConverter()).GeneratePdf(htmlContent);

Disclaimer: Je ne suis pas le développeur, juste un fan du projet :)

22
Kim Tranjan

Winnovative propose une bibliothèque .Net PDF prenant en charge la saisie HTML. Ils offrent un nombre illimité essai gratuit . Selon la manière dont vous souhaitez déployer votre projet, cela peut être suffisant.

13
Stewart

Essential PDF peut être utilisé pour convertir HTML en PDF : exemple C # . L'exemple lié à ici est basé sur ASP.NET, mais la bibliothèque peut être utilisée à partir de Windows Forms, WPF, Web Forms ASP.NET et ASP.NET MVC. La bibliothèque offre la possibilité d’utiliser différents moteurs de rendu HTML: Internet Explorer (par défaut) et WebKit (meilleure sortie).

Toute la suite de contrôles est disponible gratuitement (applications commerciales également) via le programme licence communautaire si vous êtes qualifié. La licence communautaire est le produit complet sans limitations ni filigranes.

Remarque: je travaille pour Syncfusion.

8
Davis Jebaraj

J'ai utilisé ExpertPDF Html ​​To Pdf Converter . Fait un travail décent. Malheureusement, ce n'est pas gratuit.

7
charpdevel0p3r

Il existe également une nouvelle application Web de génération de documents - DocRaptor.com . Semble facile à utiliser, et il y a une option gratuite.

7
Paul

Si vous n'avez pas vraiment besoin d'une vraie bibliothèque .Net PDF, il existe de nombreux outils HTML gratuits à PDF outils , la plupart d'entre eux peuvent être exécutés à partir d'une commande -ligne.

Une solution consisterait à en sélectionner un, puis à écrire un fin wrapper autour de cela en C #. Par exemple, comme cela a été fait dans ce tutoriel .

6
Stewart

Mise à jour 2018, et Utilisons l'équation standard HTML + CSS = PDF!

Il y a de bonnes nouvelles pour les demandes HTML-to-PDF. Comme cette réponse a montré , le standard W3C css-break- va résoudre le problème . .. Il s'agit d'une recommandation candidate avec le projet de devenir une recommandation définitive en 2017 ou 2018, après les tests.

Comme il n’est pas standard, il existe des solutions, avec des plugins pour C #, comme le montre print-css.rocks .

6
Peter Krauss

Vous trouverez ci-dessous un exemple de conversion de html + css en PDF à l'aide de iTextSharp (iTextSharp + itextsharp.xmlworker).

using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;


byte[] pdf; // result will be here

var cssText = File.ReadAllText(MapPath("~/css/test.css"));
var html = File.ReadAllText(MapPath("~/css/test.html"));

using (var memoryStream = new MemoryStream())
{
        var document = new Document(PageSize.A4, 50, 50, 60, 60);
        var writer = PdfWriter.GetInstance(document, memoryStream);
        document.Open();

        using (var cssMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(cssText)))
        {
            using (var htmlMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)))
            {
                XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, htmlMemoryStream, cssMemoryStream);
            }
        }

        document.Close();

        pdf = memoryStream.ToArray();
}
4
Sergey Malyutin

ABCpdf.NET (http://www.websupergoo.com/abcpdf-5.htm)

Nous utilisons et recommandons.

Très bon composant, non seulement il convertit une page Web en PDF comme une image, mais il convertit vraiment le texte, les images, le formatage, etc.

Ce n'est pas gratuit mais c'est pas cher.

Cela dépend de vos autres besoins.

Une solution très simple mais pas facilement déployable consiste à utiliser un contrôle WebBrowser pour charger le code HTML, puis à utiliser la méthode Print pour imprimer sur une imprimante PDF installée localement. Plusieurs imprimantes PDF gratuites sont disponibles et le contrôle WebBrowser fait partie du framework .Net.

EDIT: Si votre HTML est XHtml, vous pouvez utiliser PDFizer pour faire le travail.

3
Rune Grimstad

J'ai trouvé la bibliothèque suivante plus efficace pour convertir HTML en PDF.
nuget : https://www.nuget.org/packages/Select.HtmlToPdf/

3

PDF Vision c'est bien. Cependant, vous devez avoir une confiance totale pour l'utiliser. J'ai déjà envoyé un e-mail et demandé pourquoi mon code HTML n'était pas converti sur le serveur, mais cela fonctionnait correctement sur localhost.

3
Mike

Vous devez utiliser une bibliothèque commerciale si vous avez besoin d’un rendu HTML parfait en pdf.

ExpertPdf Html To Pdf Converter est très facile à utiliser et prend en charge les dernières versions html5/css3. Vous pouvez soit convertir une URL entière en pdf:

using ExpertPdf.HtmlToPdf; 
byte[] pdfBytes = new PdfConverter().GetPdfBytesFromUrl(url);

ou une chaîne html:

using ExpertPdf.HtmlToPdf; 
byte[] pdfBytes = new PdfConverter().GetPdfBytesFromHtmlString(html, baseUrl);

Vous avez également la possibilité de sauvegarder directement le document pdf généré dans un flux de fichier sur le disque.

2
charpdevel0p3r

Je suis l'auteur du paquet Rotativa. Il permet de créer des fichiers PDF directement à partir de vues rasantes:

https://www.nuget.org/packages/Rotativa/

Facile à utiliser et vous avez un contrôle total sur la mise en page puisque vous pouvez utiliser des vues rasoirs avec les données de vos conteneurs Model et ViewBag.

J'ai développé une version SaaS sur Azure. Il est encore plus facile de l’utiliser à partir de WebApi ou de n’importe quelle application, service, site Web Azure, site Web Azure ou autre .Net.

http://www.rotativahq.com/

Comptes gratuits disponibles.

2
Giorgio Bozio

Je cherchais aussi cela il y a quelque temps. J'ai rencontré HTMLDOC http://www.easysw.com/htmldoc/ , une application en ligne de commande open source gratuite prenant un fichier HTML comme argument et générant un PDF. _ à partir de cela. Cela a assez bien fonctionné pour moi pour mon projet parallèle, mais tout dépend de ce dont vous avez réellement besoin.

La société qui le fabrique vend les fichiers binaires compilés, mais vous êtes libre de télécharger et de compiler à partir des sources et de les utiliser gratuitement. J'ai réussi à compiler une révision assez récente (pour la version 1.9) et j'ai l'intention de publier un installateur binaire dans quelques jours. Si vous êtes intéressé, je peux vous fournir un lien dès que je le publie.

Edit (25/02/2014): On dirait que les documents et le site ont été déplacés vers http://www.msweet.org/projects.php?Z1

2
enriquein

Voici n wrapper pour wkhtmltopdf.dll par pruiz

Et n wrapper pour wkhtmltopdf.exe par Codaxy
- aussi sur le nuget .

1
Garfield

Ceci est une bibliothèque libre et fonctionne très facilement: OpenHtmlToPdf

string timeStampForPdfName = DateTime.Now.ToString("yyMMddHHmmssff");

string serverPath = System.Web.Hosting.HostingEnvironment.MapPath("~/FolderName");
string pdfSavePath = Path.Combine(@serverPath, "FileName" + timeStampForPdfName + ".FileExtension");


//OpenHtmlToPdf Library used for Performing PDF Conversion
var pdf = Pdf.From(HTML_String).Content();

//FOr writing to file from a ByteArray
 File.WriteAllBytes(pdfSavePath, pdf.ToArray()); // Requires System.Linq
1

En tant que représentant du logiciel HiQPdf, je pense que la meilleure solution est convertisseur HiQPdf HTML en PDF pour .NET . Il contient le moteur de rendu HTML5, CSS3, SVG et JavaScript le plus avancé du marché. Il existe également une version gratuite du HTML vers PDF bibliothèque que vous pouvez utiliser pour créer gratuitement jusqu'à 3 PDF pages. Le code C # minimal pour produire un PDF sous forme d'octet [] à partir d'une page HTML est:

HtmlToPdf htmlToPdfConverter = new HtmlToPdf();

// set PDF page size, orientation and margins
htmlToPdfConverter.Document.PageSize = PdfPageSize.A4;
htmlToPdfConverter.Document.PageOrientation = PdfPageOrientation.Portrait;
htmlToPdfConverter.Document.Margins = new PdfMargins(0);

// convert HTML to PDF 
byte[] pdfBuffer = htmlToPdfConverter.ConvertUrlToMemory(url);

Vous trouverez des exemples plus détaillés à la fois pour ASP.NET et MVC dans HiQPdf HTML vers PDF référentiel d'exemples de convertisseurs .

1
HiQPdf

Le meilleur outil que j'ai trouvé et utilisé pour générer PDF de javascript et de styles, ainsi que des vues ou pages HTML rendues, est phantomJS.

Téléchargez le fichier .exe avec la fonction rasterize.js qui se trouve dans la racine du fichier exe du dossier exemple et placez-le dans la solution.

Il vous permet même de télécharger le fichier dans n’importe quel code sans ouvrir ce fichier. Il vous permet également de télécharger le fichier lorsque les styles et spécialement jquery sont appliqués.

Le code suivant génère PDF Fichier:

public ActionResult DownloadHighChartHtml()
{
    string serverPath = Server.MapPath("~/phantomjs/");
    string filename = DateTime.Now.ToString("ddMMyyyy_hhmmss") + ".pdf";
    string Url = "http://wwwabc.com";

    new Thread(new ParameterizedThreadStart(x =>
    {
        ExecuteCommand(string.Format("cd {0} & E: & phantomjs rasterize.js {1} {2} \"A4\"", serverPath, Url, filename));
                           //E: is the drive for server.mappath
    })).Start();

    var filePath = Path.Combine(Server.MapPath("~/phantomjs/"), filename);

    var stream = new MemoryStream();
    byte[] bytes = DoWhile(filePath);

    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition", "attachment;filename=Image.pdf");
    Response.OutputStream.Write(bytes, 0, bytes.Length);
    Response.End();
    return RedirectToAction("HighChart");
}



private void ExecuteCommand(string Command)
{
    try
    {
        ProcessStartInfo ProcessInfo;
        Process Process;

        ProcessInfo = new ProcessStartInfo("cmd.exe", "/K " + Command);

        ProcessInfo.CreateNoWindow = true;
        ProcessInfo.UseShellExecute = false;

        Process = Process.Start(ProcessInfo);
    }
    catch { }
}


private byte[] DoWhile(string filePath)
{
    byte[] bytes = new byte[0];
    bool fail = true;

    while (fail)
    {
        try
        {
            using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
            {
                bytes = new byte[file.Length];
                file.Read(bytes, 0, (int)file.Length);
            }

            fail = false;
        }
        catch
        {
            Thread.Sleep(1000);
        }
    }

    System.IO.File.Delete(filePath);
    return bytes;
}
1
Shan Khan

PDFmyURL a récemment publié un composant .NET pour la conversion de page Web/HTML en PDF. Cela a une interface très conviviale, par exemple:

PDFmyURL pdf = new PDFmyURL("yourlicensekey");
pdf.ConvertURL("http://www.example.com", Application.StartupPath + @"\example.pdf");

Documentation: documentation du composant PDFmyURL .NET

Disclaimer: Je travaille pour la société propriétaire de PDFmyURL

0
user1914292

Déjà si vous utilisez dll itextsharp, pas besoin d'ajouter des dll tierces (plugin), je pense que vous utilisez htmlworker au lieu d'utiliser xmlworker, vous pouvez facilement convertir votre html en pdf.

Certains css ne fonctionneront pas ils sont CSS supportées
Full Explain avec l'exemple de référence Cliquez ici


        MemoryStream memStream = new MemoryStream();
        TextReader xmlString = new StringReader(outXml);
        using (Document document = new Document())
        {
            PdfWriter writer = PdfWriter.GetInstance(document, memStream);
            //document.SetPageSize(iTextSharp.text.PageSize.A4);
            document.Open();
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(outXml);
            MemoryStream ms = new MemoryStream(byteArray);
            XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, ms, System.Text.Encoding.UTF8);
            document.Close();
        }

        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.BinaryWrite(memStream.ToArray());
        Response.End();
        Response.Flush();
0
Merbin Joe

Ok, en utilisant ces technologies ....

Le src peut être téléchargé depuis ici il faut nant

0
jjchiw

Si vous voulez que l'utilisateur télécharge le pdf de la page rendue dans le navigateur, la solution la plus simple au problème est

window.print(); 

côté client, il invite l'utilisateur à enregistrer le pdf de la page actuelle. Vous pouvez également personnaliser l'apparence du pdf en liant le style

<link rel="stylesheet" type="text/css" href="print.css" media="print">

print.css est appliqué au code HTML lors de l'impression.

Limitation

Vous ne pouvez pas stocker le fichier côté serveur. L'utilisateur invite à imprimer la page qu'il a dû enregistrer la page manuellement. La page doit être rendue dans un onglet.

0
Ravi Kumar Mistry

Une autre astuce consiste à utiliser le contrôle WebBrowser. Voici mon code de travail complet.

Affectation de l'URL au contrôle de la zone de texte dans mon cas

  protected void Page_Load(object sender, EventArgs e)
{

   txtweburl.Text = "https://www.google.com/";

 }

Vous trouverez ci-dessous le code permettant de générer un écran à l'aide de thread

  protected void btnscreenshot_click(object sender, EventArgs e)
  {
    //  btnscreenshot.Visible = false;
    allpanels.Visible = true;
    Thread thread = new Thread(GenerateThumbnail);
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    thread.Join();

}

private void GenerateThumbnail()
{
    //  btnscreenshot.Visible = false;
    WebBrowser webrowse = new WebBrowser();
    webrowse.ScrollBarsEnabled = false;
    webrowse.AllowNavigation = true;
    string url = txtweburl.Text.Trim();
    webrowse.Navigate(url);
    webrowse.Width = 1400;
    webrowse.Height = 50000;

    webrowse.DocumentCompleted += webbrowse_DocumentCompleted;
    while (webrowse.ReadyState != WebBrowserReadyState.Complete)
    {
        System.Windows.Forms.Application.DoEvents();
    }
}

Dans le code ci-dessous, je sauvegarde le fichier pdf après le téléchargement.

        private void webbrowse_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // btnscreenshot.Visible = false;
    string folderPath = Server.MapPath("~/ImageFiles/");

    WebBrowser webrowse = sender as WebBrowser;
    //Bitmap bitmap = new Bitmap(webrowse.Width, webrowse.Height);

    Bitmap bitmap = new Bitmap(webrowse.Width, webrowse.Height, PixelFormat.Format16bppRgb565);

    webrowse.DrawToBitmap(bitmap, webrowse.Bounds);


    string Systemimagedownloadpath = System.Configuration.ConfigurationManager.AppSettings["Systemimagedownloadpath"].ToString();
    string fullOutputPath = Systemimagedownloadpath + Request.QueryString["VisitedId"].ToString() + ".png";
    MemoryStream stream = new MemoryStream();
    bitmap.Save(fullOutputPath, System.Drawing.Imaging.ImageFormat.Jpeg);



    //generating pdf code 
     Document pdfDoc = new Document(new iTextSharp.text.Rectangle(1100f, 20000.25f));
     PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
     pdfDoc.Open();
     iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(fullOutputPath);   
     img.ScaleAbsoluteHeight(20000);
     img.ScaleAbsoluteWidth(1024);     
     pdfDoc.Add(img);
     pdfDoc.Close();
     //Download the PDF file.
     Response.ContentType = "application/pdf";
     Response.AddHeader("content-disposition", "attachment;filename=ImageExport.pdf");
     Response.Cache.SetCacheability(HttpCacheability.NoCache);
     Response.Write(pdfDoc);
     Response.End();


}

Vous pouvez également vous référer au message le plus ancien pour plus d’informations: La navigation vers la page Web a été annulée, ce qui a entraîné l’envoi d’un message sous la forme d’un formulaire Web asp.net .

0
mohd mazhar khan

Avec le convertisseur Winnovative HTML to PDF , vous pouvez convertir une chaîne HTML en une seule ligne.

byte[] outPdfBuffer = htmlToPdfConverter.ConvertHtml(htmlString, baseUrl);

L'URL de base est utilisée pour résoudre les images référencées par des URL relatives dans une chaîne HTML. Vous pouvez également utiliser des URL complètes en HTML ou incorporer des images à l’aide de src = "data: image/png" pour la balise d’image.

En réponse au commentaire de l'utilisateur 'fubaar' à propos du convertisseur Winnovative, une correction est nécessaire. Le convertisseur n'utilise pas IE comme moteur de rendu. Cela ne dépend en fait d'aucun logiciel installé et le rendu est compatible avec le moteur WebKit.

0
Winnovative

Une autre suggestion est d'essayer la solution par https://grabz.it .

Ils fournissent une belle API .NET pour capturer des captures d’écran et la manipuler dans une approche simple et flexible.

Pour l'utiliser dans votre application, vous devez d'abord obtenir clé + secret et télécharger le Kit de développement .NET (c'est gratuit).

Maintenant, un court exemple d'utilisation.

Pour utiliser l'API, vous devez d'abord créer une instance de la classe GrabzItClient, en transmettant votre clé et votre secret d'application à partir de votre compte GrabzIt au constructeur, comme illustré dans l'exemple ci-dessous:

//Create the GrabzItClient class
//Replace "APPLICATION KEY", "APPLICATION SECRET" with the values from your account!
private GrabzItClient grabzIt = GrabzItClient.Create("Sign in to view your Application Key", "Sign in to view your Application Secret");

Maintenant, pour convertir le code HTML en PDF, il vous suffit de le faire:

grabzIt.HTMLToPDF("<html><body><h1>Hello World!</h1></body></html>");

Vous pouvez également convertir en image:

grabzIt.HTMLToImage("<html><body><h1>Hello World!</h1></body></html>");     

Ensuite, vous devez enregistrer l'image. Vous pouvez utiliser l'une des deux méthodes de sauvegarde disponibles, Save si le descripteur de rappel accessible au public est disponible et SaveTo sinon. Consultez la documentation pour plus de détails.

0
Johnny

Vous pouvez également vérifier Spire , cela vous permet de créer HTML to PDF avec ce simple morceau de code

 string htmlCode = "<p>This is a p tag</p>";

//use single thread to generate the pdf from above html code
Thread thread = new Thread(() =>
{ pdf.LoadFromHTML(htmlCode, false, setting, htmlLayoutFormat); });
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();

// Save the file to PDF and preview it.
pdf.SaveToFile("output.pdf");
System.Diagnostics.Process.Start("output.pdf");

Article détaillé: Comment convertir du HTML en PDF en asp.net C #

0
Satinder singh

Au lieu d'analyser le format HTML directement au format PDF, vous pouvez créer un bitmap de votre page HTML, puis l'insérer dans votre fichier PDF, en utilisant par exemple iTextSharp .

Voici un code pour obtenir une bitmap d'une URL. Je l'ai trouvé quelque part ici sur SO, si je trouve la source, je vais le lier.

public System.Drawing.Bitmap HTMLToImage(String strHTML)
{
    System.Drawing.Bitmap myBitmap = null;

    System.Threading.Thread myThread = new System.Threading.Thread(delegate()
    {
        // create a hidden web browser, which will navigate to the page
        System.Windows.Forms.WebBrowser myWebBrowser = new System.Windows.Forms.WebBrowser();
        // we don't want scrollbars on our image
        myWebBrowser.ScrollBarsEnabled = false;
        // don't let any errors shine through
        myWebBrowser.ScriptErrorsSuppressed = true;
        // let's load up that page!    
        myWebBrowser.Navigate("about:blank");

        // wait until the page is fully loaded
        while (myWebBrowser.ReadyState != System.Windows.Forms.WebBrowserReadyState.Complete)
            System.Windows.Forms.Application.DoEvents();

        myWebBrowser.Document.Body.InnerHtml = strHTML;

        // set the size of our web browser to be the same size as the page
        int intScrollPadding = 20;
        int intDocumentWidth = myWebBrowser.Document.Body.ScrollRectangle.Width + intScrollPadding;
        int intDocumentHeight = myWebBrowser.Document.Body.ScrollRectangle.Height + intScrollPadding;
        myWebBrowser.Width = intDocumentWidth;
        myWebBrowser.Height = intDocumentHeight;
        // a bitmap that we will draw to
        myBitmap = new System.Drawing.Bitmap(intDocumentWidth - intScrollPadding, intDocumentHeight - intScrollPadding);
        // draw the web browser to the bitmap
        myWebBrowser.DrawToBitmap(myBitmap, new System.Drawing.Rectangle(0, 0, intDocumentWidth - intScrollPadding, intDocumentHeight - intScrollPadding));
    });
    myThread.SetApartmentState(System.Threading.ApartmentState.STA);
    myThread.Start();
    myThread.Join();

    return myBitmap;
}
0
Jimmy Mattsson

Essayez ceci PDF Duo .Net composant de conversion pour la conversion HTML à PDF de ASP.NET application sans en utilisant des dll supplémentaires.

Vous pouvez transmettre la chaîne ou le fichier HTML ou diffuser pour générer le fichier PDF. Utilisez le code ci-dessous (Exemple C #):

string file_html = @"K:\hdoc.html";   
string file_pdf = @"K:\new.pdf";   
try   
{   
    DuoDimension.HtmlToPdf conv = new DuoDimension.HtmlToPdf();   
    conv.OpenHTML(file_html);   
    conv.SavePDF(file_pdf);   
    textBox4.Text = "C# Example: Converting succeeded";   
}   

Vous trouverez des exemples Info + C #/VB à l'adresse suivante: http://www.duodimension.com/html_pdf_asp.net/component_html_pdf.aspx

0
Constantine