2014-11-03 72 views
1

我正在使用iText PDF庫進行Java以生成PDF。我想部分渲染一些HTML內容而不是整個文檔。這是我想要部分呈現爲HTML的部分。iText部分HTML呈現

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

waterIndexTrendTable是一個PdfPTable。 weit.getUnit()用HTML標籤返回內容。我想呈現HTML到PDF。

回答

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); 
} 

假設HTML通過weit.getUnit()返回包含的數據超過您的需求,那麼iText很難讀懂您的想法並找出您想要保留的部分以及要丟棄的部分。

也許你只對特定的元素類型感興趣。在這種情況下,您可以檢查eParagraph還是List或iText中可用的任何其他類型。

或者,也許你可以減少HTML的部分,需要預先呈現。

在任何情況下:你不應該期望計算機能猜出其中一些HTML部分是對你很重要,哪一部分不是;-)

+0

是否可以解析HTML文本,而不是一個HTML文件在p.parse中?謝謝 – ChannaB 2014-11-03 10:54:04

+0

當然是!檢查'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