iText部分HTML渲染

时间:2014-11-03 10:36:37

标签: java html itext

我正在使用Java的iText PDF库来生成PDF。我想部分呈现一些HTML内容而不是整个文档。以下是我想部分呈现为HTML的部分。

waterIndexTrendTable.getDefaultCell().setHorizontalAlignment(Element.ALIGN_LEFT); 
waterIndexTrendTable.addCell(new Phrase(weit.getUnit(), smallFont));  

waterIndexTrendTable是一个PdfPTable。 weit.getUnit()返回带有HTML标记的内容。我想将HTML呈现给PDF。

1 个答案:

答案 0 :(得分:1)

如果weit.getUnit()返回HTML,则如果您使用问题中显示的代码段,则会在单元格中看到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很难读懂您的想法并找出您想要保留的部分以及您想要丢弃的部分

也许您只对特定的元素类型感兴趣。在这种情况下,您可以检查eParagraph还是List,还是iText中可用的任何其他类型。

或许您可以将HTML缩小到需要预先呈现的部分。

在任何情况下:你不应该期望计算机可以猜出某些HTML 的哪些部分对你很重要,哪些部分不是; - )