使用 iTextSharp 将带有 CSS 的 HTML 转换为 PDF

本文关键字:HTML 转换 PDF CSS iTextSharp 使用 | 更新日期: 2023-09-27 18:37:14

我在 asp.net 与C#网站一起工作。我想转换一个HTML DIV,其中包含各种html元素,如divs,label,表格和带有css样式(背景颜色,cssClass等)的图像,我希望使用iTextSharp DLL将其整个内容转换为PDF,但在这里我遇到了一个问题,即css没有得到应用。任何人都可以通过提供任何示例或代码片段来帮助我。

使用 iTextSharp 将带有 CSS 的 HTML 转换为 PDF

安装 2 个 NuGet 包 iTextSharp 和 itextsharp.xmlworker 并使用以下代码:

using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;

byte[] pdf; // result will be here
var cssText = File.ReadAllText(MapPath("~/css/test.css"));
var html = File.ReadAllText(MapPath("~/css/test.html"));
using (var memoryStream = new MemoryStream())
{
            var document = new Document(PageSize.A4, 50, 50, 60, 60);
            var writer = PdfWriter.GetInstance(document, memoryStream);
            document.Open();
            using (var cssMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(cssText)))
            {
                using (var htmlMemoryStream = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)))
                {
                    XMLWorkerHelper.GetInstance().ParseXHtml(writer, document, htmlMemoryStream, cssMemoryStream);
                }
            }
            document.Close();
            pdf = memoryStream.ToArray();
}

查看 Pechkin,一个用于 wkhtmltopdf 的 C# 包装器。

特别是在这个时间点(考虑到挂起的拉取请求),我会检查这个解决几个错误的分支(根据我的经验在 IIS 中特别有用)。

如果您不使用 fork/遇到其他稳定性问题,您可能需要考虑拥有某种"渲染队列"(例如在数据库中)并让后台进程(例如 Windows 服务)定期在队列上运行并渲染然后将二进制内容存储在某个地方(在数据库中,或在文件系统上)。不过,这完全取决于您的用例。

或者,类似的解决方案@DaveDev有注释链接到。