Convert HTML to PDF in .NET

后端 未结 30 1879
不知归路
不知归路 2020-11-22 00:28

I want to generate a PDF by passing HTML contents to a function. I have made use of iTextSharp for this but it does not perform well when it encounters tables and the layout

相关标签:
30条回答
  • 2020-11-22 00:38

    To convert HTML to PDF in C# use ABCpdf.

    ABCpdf can make use of the Gecko or Trident rendering engines, so your HTML table will look the same as it appears in FireFox and Internet Explorer.

    There's an on-line demo of ABCpdf at www.abcpdfeditor.com. You could use this to check out how your tables will render first, without needing to download and install software.

    For rendering entire web pages you'll need the AddImageUrl or AddImageHtml functions. But if all you want to do is simply add HTML styled text then you could try the AddHtml function, as below:

    Doc theDoc = new Doc();
    theDoc.FontSize = 72;
    theDoc.AddHtml("<b>Some HTML styled text</b>");
    theDoc.Save(Server.MapPath("docaddhtml.pdf"));
    theDoc.Clear();
    

    ABCpdf is a commercial software title, however the standard edition can often be obtained for free under special offer.

    0 讨论(0)
  • 2020-11-22 00:39

    EDIT: New Suggestion HTML Renderer for PDF using PdfSharp

    (After trying wkhtmltopdf and suggesting to avoid it)

    HtmlRenderer.PdfSharp is a 100% fully C# managed code, easy to use, thread safe and most importantly FREE (New BSD License) solution.

    Usage

    1. Download HtmlRenderer.PdfSharp nuget package.
    2. Use Example Method.

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

    A very Good Alternate Is a Free Version of iTextSharp

    Until version 4.1.6 iTextSharp was licensed under the LGPL licence and versions until 4.16 (or there may be also forks) are available as packages and can be freely used. Of course someone can use the continued 5+ paid version.

    I tried to integrate wkhtmltopdf solutions on my project and had a bunch of hurdles.

    I personally would avoid using wkhtmltopdf - based solutions on Hosted Enterprise applications for the following reasons.

    1. First of all wkhtmltopdf is C++ implemented not C#, and you will experience various problems embedding it within your C# code, especially while switching between 32bit and 64bit builds of your project. Had to try several workarounds including conditional project building etc. etc. just to avoid "invalid format exceptions" on different machines.
    2. If you manage your own virtual machine its ok. But if your project is running within a constrained environment like (Azure (Actually is impossible withing azure as mentioned by the TuesPenchin author) , Elastic Beanstalk etc) it's a nightmare to configure that environment only for wkhtmltopdf to work.
    3. wkhtmltopdf is creating files within your server so you have to manage user permissions and grant "write" access to where wkhtmltopdf is running.
    4. Wkhtmltopdf is running as a standalone application, so its not managed by your IIS application pool. So you have to either host it as a service on another machine or you will experience processing spikes and memory consumption within your production server.
    5. It uses temp files to generate the pdf, and in cases Like AWS EC2 which has really slow disk i/o it is a big performance problem.
    6. The most hated "Unable to load DLL 'wkhtmltox.dll'" error reported by many users.

    --- PRE Edit Section ---

    For anyone who want to generate pdf from html in simpler applications / environments I leave my old post as suggestion.

    TuesPechkin

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

    or Especially For MVC Web Applications (But I think you may use it in any .net application)

    Rotativa

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

    They both utilize the wkhtmtopdf binary for converting html to pdf. Which uses the webkit engine for rendering the pages so it can also parse css style sheets.

    They provide easy to use seamless integration with C#.

    Rotativa can also generate directly PDFs from any Razor View.

    Additionally for real world web applications they also manage thread safety etc...

    0 讨论(0)
  • 2020-11-22 00:39

    Try this PDF Duo .Net converting component for converting HTML to PDF from ASP.NET application without using additional dlls.

    You can pass the HTML string or file, or stream to generate the PDF. Use the code below (Example 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";   
    }   
    

    Info + C#/VB examples you can find at: http://www.duodimension.com/html_pdf_asp.net/component_html_pdf.aspx

    0 讨论(0)
  • 2020-11-22 00:40

    Essential PDF can be used to convert HTML to PDF: C# sample. The sample linked to here is ASP.NET based, but the library can be used from Windows Forms, WPF, ASP.NET Webforms, and ASP.NET MVC. The library offers the option of using different HTML rendering engines : Internet Explorer (default) and WebKit (best output).

    The whole suite of controls is available for free (commercial applications also) through the community license program if you qualify. The community license is the full product with no limitations or watermarks.

    Note: I work for Syncfusion.

    0 讨论(0)
  • 2020-11-22 00:40

    PDF Vision is good. However, you have to have Full Trust to use it. I already emailed and asked why my HTML wasn't being converted on the server but it worked fine on localhost.

    0 讨论(0)
  • 2020-11-22 00:40

    You can also check Spire, it allow you to create HTML to PDF with this simple piece of 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");
    

    Detailed article : How to convert HTML to PDF in asp.net C#

    0 讨论(0)
提交回复
热议问题