使用ITextSharp XMLWorkerHelper和解析HTML的性能低下

时间:2013-04-11 18:37:23

标签: c# performance pdf itextsharp xmlhelper

我最近遇到了一个涉及ITextSharp的性能问题需要很长时间(通常超过30秒)来呈现HTML内容(从HTML编辑器传递,如CKEditor,TinyMCE,等)。

以前,HTMLWorker用于解析内容,效果很好。这是快速且相当准确的,但是当更复杂的HTML(,如表,有序列表和无序列表)开始传入时,它开始变得不稳定:

//The HTML Worker was quick, however it's weaknesses began to show with more 
//complex HTML
List<IElement> objects = HTMLWorker.ParseToList(sr, ss);

复杂标记是这种情况下的一项要求,而不是尝试执行正则表达式手术和其他讨厌的事情来尝试解决这些问题,我选择使用XMLWorker来处理解析。

//This outputs everything perfectly and retains all of the proper styling that is
//needed. However, when things get complex it gets sluggish
XMLWorkerHelper.GetInstance().ParseXHtml(writer,document,stringReader);

XMLWorker的结果令人难以置信,它可以按照我们的需要输出所有内容,但它的性能使它几乎无法使用。随着内容的复杂性增加(通过附加表,样式和列表),加载时间也是如此。

上面这一行似乎是性能瓶颈,尝试使用它的几种不同的替代方案根本没有帮助(,例如创建基本的自定义XmlHandler )。

可能的原因和想法

  • 我尝试通过并从传入的内容中删除任何无关的无效标记,但这样做很少。

  • 问题可能在于iTextSharp本身以及XMLWorkerHelper的工作原理吗?我试图在iText XML Helper Demo here内使用SAME输入,速度非常快。我认为表现至少是可比较的。

  • 目前的考虑因素是使用存储方法来实际存储渲染的PDF,然后按需检索它们,而不是动态生成它们。我宁愿避免这种情况,但它已经摆在桌面上了。

  • 内容是从Microsoft Word( cringe )粘贴的,我试图尽可能地清理它,但我不相信自iText以来的主要问题上面提到的演示在相同内容上没有重大问题。

  • 使用iTextSharp的可能替代方案?

我很乐意提供任何其他详细信息和代码。

1 个答案:

答案 0 :(得分:1)

虽然这个问题已经存在了几年,但我想我会让任何未来的读者知道我最终选择通过wkhtmltopdf使用TuesPechkin project库。

性能是对iTextSharp的重大改进,它提供了很好的文档,包含适用于您现有项目的各种场景的实现示例。