PDFSharp可以在Net Core中从Html字符串创建Pdf文件吗



这听起来可能很"简单",但我还没有找到真正的解决方案。我需要从.Net Core上的API的Html字符串创建Pdf文件。图书馆必须是免费的(不包括付款或任何相关费用(。我发现PDFSharp是一个不错的选择,但现在我发现PDFSharp不适用于.Net Core,而且它不允许注入Html字符串。

那么,对于这种情况,PDFSharp是一个不错的选择吗?或者你还推荐我其他什么图书馆?

非常感谢。

我最近也遇到了同样的问题。目前,在.NET Core中处理PDF的方法非常有限。要穿过它们。。。

  • PDF Sharp-不支持.NET核心/标准
  • SelectPDF-在他们的网站页脚中隐藏了一个"免费"的社区版本。在大多数情况下都应该可用。https://selectpdf.com/community-edition/
  • IronPDF-"企业"定价。起价1.5万美元
  • WKHTMLTOPDF-这实际上只是一个可执行文件,有人在上面写了一个C#包装来运行exe。不是一个好的解决方案
  • iTextSharp-有"隐藏"定价,但显然这是唯一一个专门在.NET Core下的Linux上运行的(如果这对你很重要的话(

IMO唯一能满足您需要的免费软件是SelectPDF。这说明了一些问题,因为我不评价库或API。但它是免费的,而且有效。

更多信息:https://dotnetcoretutorials.com/2019/07/02/creating-a-pdf-in-net-core/

如果有人需要此选项,这里是我决定使用的最终解决方案。

var url = "https://stackoverflow.com/questions/564650/convert-html-to-pdf-in-net";
var chromePath = @"C:Program Files (x86)GoogleChromeApplicationchrome.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

感谢@leonard AB

安装NuGet包-Polybioz.HtmlRenderer.PdfSharp.Corehttps://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();
}

我在过去的几个小时里解决了这个问题,并在.net6 C#中找到了适合我的解决方案。

通过Nugget:安装3库

  • ";PDFsharp";图像

  • "HtmlRenderer.PdfSharp";图像

  • "HtmlRenderer.Core";图像

这是我的函数:

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

我知道这是一个老问题,但有免费的.Net Core选项,有几个PDFSharp端口到Core,我使用的是

https://github.com/ststeiger/PdfSharpCore

它正在积极开发中,在编写这个答案时,更新是在两周前。

它运行良好,唯一需要注意的是,其中一个使用的图书馆没有非常宽松的许可证,

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

但如果你能在许可证的范围内工作,那么这是一个使用.Net Core的好方法,我正在使用这个包成功地在.Net 7上运行一些项目。

最新更新