4

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

4

2 回答 2

2

安装 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();
}
于 2016-06-21T13:41:05.033 回答
0

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

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

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

或者,类似的解决方案@DaveDev 已链接到评论。

于 2013-10-29T15:17:39.467 回答