如果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);
}
假設HTML通過weit.getUnit()
返回包含的數據超過您的需求,那麼iText很難讀懂您的想法並找出您想要保留的部分以及要丟棄的部分。
也許你只對特定的元素類型感興趣。在這種情況下,您可以檢查e
是Paragraph
還是List
或iText中可用的任何其他類型。
或者,也許你可以減少HTML的部分,需要預先呈現。
在任何情況下:你不應該期望計算機能猜出其中一些HTML部分是對你很重要,哪一部分不是;-)
是否可以解析HTML文本,而不是一個HTML文件在p.parse中?謝謝 – ChannaB 2014-11-03 10:54:04
當然是!檢查'parse()'方法:http://api.itextpdf.com/xml/com/itextpdf/tool/xml/parser/XMLParser.html#parse(java.io.InputStream)它接受一個'InputStream',包括文字。你是說你不知道如何從'String'創建'InputStream'? http://stackoverflow.com/questions/5720524/how-does-one-create-an-inputstream-from-a-string – 2014-11-03 11:08:18