我正在使用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。
答案 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很难读懂您的想法并找出您想要保留的部分以及您想要丢弃的部分
也许您只对特定的元素类型感兴趣。在这种情况下,您可以检查e
是Paragraph
还是List
,还是iText中可用的任何其他类型。
或许您可以将HTML缩小到需要预先呈现的部分。
在任何情况下:你不应该期望计算机可以猜出某些HTML 的哪些部分对你很重要,哪些部分不是; - )