【问题标题】:Convert HTML with CSS to PDF using iTextSharp使用 iTextSharp 将带有 CSS 的 HTML 转换为 PDF
【发布时间】:2013-11-08 18:33:20
【问题描述】:

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

【问题讨论】:

  • 你必须使用 iTextSharp 吗?我发现code.google.com/p/wkhtmltopdf 可以非常有效地完成我的 HTML -> 免费 PDF 转换
  • 是的...但是 wkhtmltopdf 是否适用于 asp.net 和 C#?
  • 我在 mvc c# .net 应用程序中使用 iTextXmlWorker 完成了此操作。如果有用,请告诉我,我会发布一些信息的答案。
  • 我目前在 C#/WPF 解决方案中使用它,我认为在 ASP.NET 中使用它不会有问题。这概述了我所做的事情:stackoverflow.com/a/18767473/181771
  • 请发布您的代码。你在用HTMLWorker吗?如果是这样,那么早就不赞成使用XmlWorker。任何和所有的工作,包括 CSS 支持,都在后者中完成,甚至不要再尝试前者了。

标签: c# html asp.net css itextsharp


【解决方案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();
}

【讨论】:

  • 在css里面我们可以用div吗?
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-08-31
    • 2022-03-07
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 2014-09-29
    相关资源
    最近更新 更多