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

4
我正在使用C#开发asp.net网站。我想将一个包含多个HTML元素(如div、label、表格和带有背景颜色、css类等样式的图像)的HTML DIV转换为PDF,使用iTextSharp DLL实现。但是我遇到了一个问题:CSS没有被应用。能否提供任何示例或代码片段来帮助我解决这个问题?

你必须使用iTextSharp吗?我发现http://code.google.com/p/wkhtmltopdf/非常有效地免费完成HTML -> PDF转换。 - DaveDev
是的... 但是 wkhtmltopdf 能在 asp.net 和 C# 中使用吗? - Superman
我在一个MVC C# .NET应用程序中使用iTextXmlWorker完成了这个。如果有用的话,请让我知道,我会发布一些信息的答案。 - hutchonoid
1
我目前在使用C# / WPF解决方案中,我认为在ASP.NET中使用它不会有问题。这是我所做的概述:http://stackoverflow.com/a/18767473/181771 - DaveDev
请发布您的代码。您是否正在使用HTMLWorker?如果是这样,那么它已经被弃用,推荐使用XmlWorker。所有工作,包括CSS支持,都在后者中完成,请不要再尝试使用前者。 - Chris Haas
2个回答

3

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

在 CSS 中,我们可以使用 div 吗? - Vishal Parmar

0

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

具体来说,在此时此刻(考虑到一个挂起的拉取请求),我会检查这个分支,它解决了一些错误(据我的经验,特别适用于基于 IIS 的环境)。

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

另外 DaveDev 所链接的类似解决方案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接