如果weit.getUnit() 返回 HTML,那么如果您使用问题中显示的 sn-p,您将在单元格中看到该 HTML 代码。
为避免这种情况,您需要将 HTML 呈现为 iText 对象列表。这显示在ParseHtmlObjects 示例的第一部分:
// CSS
CSSResolver cssResolver =
XMLWorkerHelper.getInstance().getDefaultCssResolver(true);
// HTML
HtmlPipelineContext htmlContext = new HtmlPipelineContext(null);
htmlContext.setTagFactory(Tags.getHtmlTagProcessorFactory());
htmlContext.autoBookmark(false);
// Pipelines
ElementList elements = new ElementList();
ElementHandlerPipeline end = new ElementHandlerPipeline(elements, null);
HtmlPipeline html = new HtmlPipeline(htmlContext, end);
CssResolverPipeline css = new CssResolverPipeline(cssResolver, html);
// XML Worker
XMLWorker worker = new XMLWorker(css, true);
XMLParser p = new XMLParser(worker);
p.parse(new FileInputStream(HTML));
现在您有了一个对象elements,其中包含可以添加到单元格的 iText 对象:
PdfPCell cell = new PdfPCell;
for (Element e : elements) {
cell.addElement(e);
}
假设weit.getUnit()返回的HTML包含的数据比你需要的多,那么iText很难读懂你的想法,找出你想保留哪一部分,哪一部分要扔掉。
也许您只对特定的元素类型感兴趣。在这种情况下,您可以检查 e 是 Paragraph、List,还是 iText 中可用的任何其他类型。
或者,也许您可以将 HTML 缩减为需要预先呈现的部分。
无论如何:您不应该期望计算机能够猜测出某些 HTML 的哪些部分对您很重要,哪些部分不重要 ;-)