9

This maybe sounds "easy" but I haven't found a real solution. I need to create Pdf files from Html strings from an API on .Net Core. The library must be free (Not payments or anything related). I found that PDFSharp was a good option, but now I check out that PDFSharp is not available for .Net Core and It doesn't allow to inject a Html string.

So, PDFSharp is a good option for this case? Or what other library would you recommend me?

Thanks a lot.

Lukas
  • 1,699
  • 1
  • 16
  • 49
Roger Ospina
  • 435
  • 1
  • 3
  • 14

5 Answers5

25

I recently ran into the exact same issue myself. There is currently extremely limited ways in dealing with PDFs in general in .NET Core. To go through them...

  • PDF Sharp - Does not support .NET Core/Standard.
  • SelectPDF - Does have a "free" community version hidden in their website footer. Should be useable in most cases. https://selectpdf.com/community-edition/
  • IronPDF - "Enterprise" pricing. Starts at $1.5k
  • WKHTMLTOPDF - This is actually just an executable that someone has written a C# wrapper over the top to run the exe. Not a great solution.
  • iTextSharp - Has "hidden" pricing but apparently this is the only one that specifically will run on Linux under .NET Core (If that's important to you).

IMO the only free one that will do what you need is SelectPDF. And that's saying something because I don't rate the library or the API. But it's free and it works.

More info : https://dotnetcoretutorials.com/2019/07/02/creating-a-pdf-in-net-core/

MindingData
  • 11,924
  • 6
  • 49
  • 68
  • Hi @MindingData, I really appreciate your answer and your time. At the end I decided to use the Google Chrome print-to-pdf feature. This until the manager approve me to use a paid library. Thanks again, have a good day – Roger Ospina Feb 27 '20 at 19:40
  • 1
    IronPDF's pricing is now much cheaper and more flexible starting at $399 for a single project license. – NickG Mar 13 '20 at 11:04
  • 1
    I ended up going for iText7 (iTextSharp). It does have 'hidden' pricing for its paid version but it also has a free and open source version with AGPL licence. – Desmond Jun 18 '20 at 10:12
  • Just to add one to the list, I've used PrinceXML in the past. It's another one that isn't .net, but has a .net wrapper. It's free for non-commercial use. Works well. – kman Sep 16 '22 at 06:24
14

if anyone needs an option with this, here is the final solution that I decided to use.

    var url = "https://stackoverflow.com/questions/564650/convert-html-to-pdf-in-net";
var chromePath = @"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe";
var output = Path.Combine(Environment.CurrentDirectory, "printout.pdf");
using (var p = new Process())
    {
        p.StartInfo.FileName = chromePath;
        p.StartInfo.Arguments = $"--headless --disable-gpu --print-to-pdf={output} {url}";
        p.Start();
        p.WaitForExit();
    }

https://stackoverflow.com/a/59943987/3877537

Thanks @leonard-AB

Roger Ospina
  • 435
  • 1
  • 3
  • 14
6

Install NuGet package - Polybioz.HtmlRenderer.PdfSharp.Core https://www.nuget.org/packages/Polybioz.HtmlRenderer.PdfSharp.Core/1.0.0?_src=template

using PdfSharpCore;
using PdfSharpCore.Pdf;
using TheArtOfDev.HtmlRenderer.PdfSharp;

 var document = new PdfDocument();
var html = "<html><body style='color:black'>PMKJ</body></html>";
 PdfGenerator.AddPdfPages(document, html , PageSize.A4);

 Byte[] res = null;
                using (MemoryStream ms = new MemoryStream())
                {
                    document.Save(ms);
                    res = ms.ToArray();
                }
Anirban Bhadra
  • 221
  • 3
  • 5
0

I run through this problem last few hours and found solution that work for me in .net6 C#.

install 3 library by Nugget:

here is my function:

            [HttpPost]
            public IActionResult PrintPDF([FromBody] string htmlString)
            {
                using (var ms = new MemoryStream())
                {
                    // Parse the HTML
                    PdfDocument pdfx = PdfGenerator.GeneratePdf(htmlString, PageSize.A4);
                    pdfx.Save(ms);
                  
                    //return File(ms, "application/pdf", "file.pdf");
                    var result = new FileContentResult(ms.ToArray(), "application/pdf");
                    result.FileDownloadName = "file.pdf";
                    return result;
                }
            }
 
  • Hi. Have you found a way to use CSS properly with the HtmlRenderer.Core? I try to use flexbox with no luck and there no documentation online. I would appreciate any help. Thanks! – Tony Jan 26 '23 at 06:55
  • Hi @Tony , I put all the styles inside the HTML string and the CSS work properly. hope it helps. – micha redler Jan 27 '23 at 08:13
-2

I know this is an old question, but there are free .Net Core options, there are a few PDFSharp ports to Core, the one I use is

https://github.com/ststeiger/PdfSharpCore

It's being actively developed, at the point of writing this answer the update was 2 weeks ago.

It works well, only point to note is one of the libraries used does not have a very permissive licence,

https://github.com/ststeiger/PdfSharpCore/issues/285

But if you can work within the bounds of the licence then this is a good way to go with .Net Core, I am running a few projects on .Net7 with this package successfully.