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

问题描述 投票:4回答:2

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

c# html asp.net css itextsharp
2个回答
1
投票

安装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();
}

0
投票

查看Pechkin,它是wkhtmltopdf的C#包装器。

特别是在这个时间点(考虑一个待处理的拉取请求)我会检查this fork,它解决了几个错误(根据我的经验在IIS中特别有用)。

如果您不使用fork /获得其他稳定性问题,您可能希望查看具有某种“渲染队列”(例如在数据库中)并且具有后台进程(例如Windows服务)定期在队列上运行渲染然后将二进制内容存储在某处(在数据库中,或在文件系统上)。这完全取决于您的用例。

或者the similar solution @DaveDev有评论链接到。

© www.soinside.com 2019 - 2024. All rights reserved.