我想通过将HTML内容传递给函数来生成PDF.我已经为此使用了iTextSharp,但是当它遇到表格并且布局变得混乱时它表现不佳.
有没有更好的办法?
试试wkhtmtopdf.这是迄今为止我发现的最好的工具.
对于.NET,您可以使用此小型库轻松调用wkhtmtopdf命令行实用程序.
编辑: 使用PdfSharp的PDF的新建议HTML渲染器
(在尝试wkhtmltopdf并建议避免它之后)
HtmlRenderer.PdfSharp是一个100%完全C#托管代码,易于使用,线程安全,最重要的是免费 (新BSD许可证)解决方案.
用法
下载HtmlRenderer.PdfSharp nuget包.
使用示例方法.
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; }
一个很好的替代是一个免费版本的iTextSharp的
在版本4.1.6之前,iTextSharp根据LGPL许可证获得许可,版本直到4.16(或者也可能有叉子)作为包提供,可以自由使用.当然有人可以使用续5+ 付费版本.
我试图在我的项目中集成wkhtmltopdf解决方案,并遇到了一些障碍.
我个人会避免在托管企业应用程序上使用基于wkhtmltopdf的解决方案,原因如下.
首先,wkhtmltopdf是C++实现的而不是C#,您将遇到在C#代码中嵌入它的各种问题,尤其是在项目的32位和64位版本之间切换时.不得不尝试几种解决方法,包括条件项目构建等,以避免在不同的机器上"无效格式异常".
如果您管理自己的虚拟机,那就可以.但是,如果你的项目就像是一个约束的环境中运行(天青 (实际上是由TuesPenchin笔者提到不可能withing蔚蓝), 弹性魔豆等),它来配置环境只为wkhtmltopdf工作的噩梦.
wkhtmltopdf正在服务器中创建文件,因此您必须管理用户权限并授予对运行wkhtmltopdf的位置的"写入"访问权限.
Wkhtmltopdf作为独立应用程序运行,因此它不受IIS应用程序池的管理.因此,您必须将其作为服务托管在另一台计算机上,否则您将在生产服务器上遇到巨大的处理高峰和内存消耗.
它使用临时文件生成pdf,而在像AWS EC2这样的情况下,磁盘i/o非常慢,这是一个很大的性能问题.
许多用户报告的最讨厌的"无法加载DLL'wkhtmltox.dll'"错误.
--- PRE编辑部分---
对于想要在更简单的应用程序/环境中从html生成pdf的任何人,我将旧帖子作为建议.
TuesPechkin
https://www.nuget.org/packages/TuesPechkin/
或者特别是对于MVC Web应用程序 (但我认为您可以在任何.net应用程序中使用它)
Rotativa
https://www.nuget.org/packages/Rotativa/
他们都利用 wkhtmtopdf二进制文件将html转换为pdf.它使用webkit引擎来呈现页面,因此它也可以解析css样式表.
它们提供易于使用的与C#的无缝集成.
Rotativa还可以从任何Razor View 直接生成PDF .
此外,对于真实的Web应用程序,他们还管理线程安全等...
大多数HTML到PDF转换器依赖于IE来进行HTML解析和渲染.当用户更新他们的IE时,这可能会中断.这是一个不依赖IE的.
代码是这样的:
EO.Pdf.HtmlToPdf.ConvertHtml(htmlText, pdfFileName);
与许多其他转换器一样,您可以传递文本,文件名或Url.结果可以保存到文件或流中.
我最近执行了关于HTML到PDF转换的PoC,并希望分享我的结果.
我最喜欢的是OpenHtmlToPdf
该工具的优点:
非常好的HTML兼容性(例如,它是我的示例中唯一一个工具,当一个表跨越多个页面时正确重复的表头)
流畅的API
免费和OpenSource(知识共享署名3.0许可证)
可通过NuGet获得
其他测试工具:
ExpertPDF(http://www.html-to-pdf.net/)
IronPDF(http://ironpdf.com/)
iTextSharp(https://sourceforge.net/projects/itextsharp/)
适用于.NET的NReco PDF Creator(http://www.nrecosite.com/pdf_generator_net.aspx)
PDF Sharp的HTML渲染器(https://www.nuget.org/packages/HtmlRenderer.PdfSharp/)
SelectPDF社区版(http://selectpdf.com/community-edition/)
我非常推荐NReco.它有免费和付费版本,非常值得.它在后台使用wkhtmtopdf,但你只需要一个程序集.太棒了.
使用示例:
通过NuGet安装.
var htmlContent = String.Format("Hello world: {0}", DateTime.Now); var pdfBytes = (new NReco.PdfGenerator.HtmlToPdfConverter()).GeneratePdf(htmlContent);
免责声明:我不是开发人员,只是该项目的粉丝:)
Winnovative提供支持HTML输入的.Net PDF库.他们提供无限制的免费试用.根据您希望部署项目的方式,这可能就足够了.
基本PDF可用于将HTML转换为PDF:C#sample.链接到此处的示例是基于ASP.NET的,但可以从Windows窗体,WPF,ASP.NET Webforms和ASP.NET MVC使用该库.该库提供了使用不同HTML呈现引擎的选项:Internet Explorer(默认)和WebKit(最佳输出).
如果您符合条件,则可通过社区许可计划免费获得整套控件(商业应用程序).社区许可证是完整的产品,没有任何限制或水印.
注意:我为Syncfusion工作.
我使用了ExpertPDF Html To Pdf Converter.做得体.不幸的是,这不是免费的.
还有一个新的基于Web的文档生成应用程序 - DocRaptor.com.看似易于使用,并且有免费选项.
有关HTML-to-PDF要求的好消息.正如这个答案所示,W3C标准css-break-3将解决这个问题 ......这是一个候选推荐标准,计划在经过测试后于2017年或2018年转为最终推荐标准.
由于没有那么标准,因此有一些解决方案,带有C#插件,如print-css.rocks所示.
如果您真的不需要真正的.Net PDF库,那么有许多免费的HTML到PDF工具,其中许多可以从命令行运行.
一种解决方案是选择其中一种,然后在C#中编写一个薄包装器.例如,正如本教程中所做的那样.
上次更新时间:2019年9月
这是我汇总的.NET中HTML到PDF转换的选项列表(有些是免费的,有些是付费的)
HtmlRenderer.PdfSharp
https://www.nuget.org/packages/HtmlRenderer.PdfSharp/1.5.1-beta1
BSD-UNSPECIFIED许可证
木偶夏普
https://www.puppeteersharp.com/examples/index.html
麻省理工学院执照
https://github.com/kblok/puppeteer-sharp
环氧乙烷
https://www.nuget.org/packages/EO.Pdf/
$ 749 https://www.essentialobjects.com/Purchase.aspx?f=3
WnvHtmlToPdf_x64
https://www.nuget.org/packages/WnvHtmlToPdf_x64/
1200美元-http: //www.winnovative-software.com/Buy.aspx
演示-http: //www.winnovative-software.com/demo/default.aspx
铁Pdf
https://www.nuget.org/packages/IronPdf/
$ 399-$ 1599- https://ironpdf.com/licensing/
https://ironpdf.com/examples/using-html-to-create-a-pdf/
尖顶PDF
https://www.nuget.org/packages/Spire.PDF/
599美元https://www.e-iceblue.com/Buy/Spire.PDF.html
https://www.e-iceblue.com/Tutorials/Spire.PDF/Spire.PDF-Program-Guide/Convert-HTML-to-PDF-Customize-HTML-to-PDF-Conversion-by-Yourself.html
Aspose.Html
https://www.nuget.org/packages/Aspose.Html/
599美元-https: //purchase.aspose.com/pricing
https://docs.aspose.com/display/htmlnet/HTML+to+PDF+转换
EvoPDF
https://www.nuget.org/packages/EvoPDF/
450美元-1200美元-http: //www.evopdf.com/buy.aspx
ExpertPdfHtmlToPdf
https://www.nuget.org/packages/ExpertPdfHtmlToPdf/
$ 550-$ 1200- https://www.html-to-pdf.net/Pricing.aspx
邮编
https://zetpdf.com
249美元-https: //zetpdf.com/pricing/
是不是众所周知的或受支持的库-ZetPDF-有人知道该产品的背景吗?
PDFtron
https://www.pdftron.com/documentation/samples/cs/HTML2PDFTes
$ 4000 /年
WkHtmlToXSharp
https://github.com/pruiz/WkHtmlToXSharp
自由
并发转换被实现为处理队列
选择PDF
https://selectpdf.com/pdf-library-for-net/
免费(最多5页)
$ 499-1个开发人员,1个部署计算机https://selectpdf.com/pricing/
https://www.nuget.org/packages/Select.HtmlToPdf/
如果以上选项均无济于事,您可以随时搜索NuGet软件包 https://www.nuget.org/packages?q=html+pdf