【发布时间】:2014-01-22 06:31:48
【问题描述】:
我正在使用以下代码在我的 WPF 应用程序中使用 iTextSharp XMLWorker 解析 HTML 字符串:
var css = "";
using (var htmlMS = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(html)))
{
//Create a stream to read our CSS
using (var cssMS = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(css)))
{
//Get an instance of the generic XMLWorker
var xmlWorker = XMLWorkerHelper.GetInstance();
//Parse our HTML using everything setup above
xmlWorker.ParseXHtml(writer, doc, htmlMS, cssMS, System.Text.Encoding.UTF8, fontProv);
}
}
解析工作正常,但速度很慢,解析 HTML 大约需要 2 秒。因此,对于 50 页的 pdf,大约需要 2 分钟。我在我的 HTML 字符串中使用内联样式。这是自然行为还是可以优化?
【问题讨论】:
-
你的 HTML 嵌套很深吗?例如,所有东西都包裹在一个巨大的 DIV 中吗?在这些情况下,解析器(甚至常规桌面浏览器)必须一直到文档末尾才能呈现第一件事。你在用桌子吗? PDF 没有表格的概念,因此 iText 必须模拟它们,如果它们很长,则计算成本会很高。你在使用图像吗?如果是这样,iText 必须加载/下载图像(取决于它们的引用方式),这也需要时间。
-
我还没有答案,但我也看到这个库有多慢。大部分时间都被 ParseXHtml 内部的以下方法消耗掉了:iTextSharp.text.FontFactoryImp.RegisterDirectories
-
我发现只有在调试模式下运行我的应用程序时,XMLWorkerHelper 实例才超级慢。
-
另见 Java iText 问题 - stackoverflow.com/q/15621218/179972
标签: c# itextsharp