在 .NET 中将 HTML 转换为 PDF

新手上路,请多包涵

我想通过将 HTML 内容传递给函数来生成 PDF。我已经为此使用了 iTextSharp,但当它遇到表格并且布局变得混乱时它表现不佳。

有没有更好的办法?

原文由 SandHurst 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 836
1 个回答

编辑: 使用 PdfSharp 的 PDF 新建议 HTML 渲染器

(在尝试 wkhtmltopdf 并建议避免它之后)

HtmlRenderer.PdfSharp 是一个 100% 完全由 C# 托管的代码易于 使用,线程安全,最重要的是 免费 新 BSD 许可证 解决方案。

用法

  1. 下载 HtmlRenderer.PdfSharp nuget 包。
  2. 使用示例方法。
    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 的 解决方案,原因如下。

  1. 首先,wkhtmltopdf 是 C++ 实现的而不是 C#,将它嵌入到 C# 代码中会遇到各种问题,尤其是在项目的 32 位和 64 位版本之间切换时。不得不尝试几种解决方法,包括条件项目构建等,只是为了避免不同机器上的“无效格式异常”。
  2. 如果您管理自己的虚拟机就可以了。但是,如果您的项目在受限环境中运行,例如( Azure (实际上 TuesPenchin 作者提到的 azure 是不可能的), Elastic Beanstalk 等),配置该环境仅供 wkhtmltopdf 工作是一场噩梦。
  3. wkhtmltopdf 正在您的服务器中创建文件,因此您必须管理用户权限并授予对 wkhtmltopdf 运行位置的“写入”访问权限。
  4. Wkhtmltopdf 作为独立应用程序运行,因此它 不受 IIS 应用程序池管理。因此,您必须将其作为服务托管在另一台机器上,否则您将在生产服务器中遇到处理峰值和内存消耗。
  5. 它使用临时文件生成 pdf,在像 AWS EC2 这样磁盘输入/输出速度非常慢的情况下,这是一个很大的性能问题。
  6. 许多用户报告的最讨厌的“无法加载 DLL ‘wkhtmltox.dll’”错误。

--- 预编辑部分 —

对于任何想在更简单的应用程序/环境中从 html 生成 pdf 的人,我将我的旧帖子作为建议。

星期二佩奇金

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

或特别是对于 MVC Web 应用程序 (但我认为您可以在任何 .net 应用程序中使用它)

轮状

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

他们都使用 wkhtmtopdf 二进制文件将 html 转换为 pdf。它使用 webkit 引擎呈现页面,因此它还可以解析 css 样式表

它们提供易于使用的与 C# 的无缝集成。

Rotativa 还可以从任何 Razor View 直接生成 PDF。

此外,对于真实世界的网络应用程序,他们还管理线程安全等……

原文由 Anestis Kivranoglou 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题