2015-02-12 85 views
1

這是與List items in table cell are not formatted連接的主題。我使用XmlWorker處理來自格式表控件(Dojo的dijit/Editor)的HTML輸出。還有一些塊(當你使用定心或保證金格式化)這樣的:將PdfDiv添加到段落

<div> 
    <p align="center"><font size="5"><b>&nbsp;<font color="#32cd32">My centered Para</font></b></font><font color="#32cd32">&nbsp;</font></p> 
</div> 

然而,當我將它們添加到Paragraph被添加到表喜歡這裏:

PdfPCell htmlCell = new PdfPCell(); 
    htmlCell.setBackgroundColor(new BaseColor(213, 226, 187)); 
    htmlCell.addElement(html2Para(html)); 
    htmlCell.setPaddingBottom(5); 
    htmlCell.setPaddingLeft(5); 
    table.addCell(htmlCell); 

private Paragraph html2para(String html) { 
    final Paragraph para = new Paragraph(); 
    try { 
     XMLWorkerHelper.getInstance().parseXHtml(new ElementHandler() { 
      @Override 
      public void add(Writable wri) { 
       if (wri instanceof WritableElement) { 
        List<Element> elems = ((WritableElement) wri).elements(); 
        for (Element elem : elems) { 
         para.add(elem); 
        } 
       } 
      } 
     }, new StringReader(StringUtils.trimToEmpty(html))); 
    } catch (IOException e) { 
     log.error(e.getMessage(), e); 
    } 
    return para; 
} 

一切,在Element之內,即PdfDiv的實例不可見。

所以,當我滿足PdfDiv,我添加它的內容:

private void addElem2para(Element elem, Paragraph target) { 
    if (elem instanceof PdfDiv) { 
     for (Element inside : ((PdfDiv)elem).getContent()) { 
      addElem2para(inside, target); 
     } 
    } else { 
     target.add(elem); 
    } 
} 

不過,現在像居中或保證金,格式化那名PdfDiv的屬性是「丟失」。

應該如何處理來自XmlWorker的PdfDiv元素?

我在版本5.5.2

回答

2

(我認爲)我明白你的問題,但我不明白你的代碼利用iText和XmlWorker。

ParseHtml例子顯示瞭如何理解你的問題:

StringBuilder sb = new StringBuilder(); 
sb.append("<div>\n<p align=\"center\">"); 
sb.append("<font size=\"5\">"); 
sb.append("<b>&nbsp;<font color=\"#32cd32\">My centered Para</font></b>"); 
sb.append("</font>"); 
sb.append("<font color=\"#32cd32\">&nbsp;</font>"); 
sb.append("</p>\n</div>"); 

PdfPTable table = new PdfPTable(1); 
PdfPCell cell = new PdfPCell(); 
ElementList list = XMLWorkerHelper.parseToElementList(sb.toString(), null); 
for (Element element : list) { 
    cell.addElement(element); 
} 
table.addCell(cell); 
document.add(table); 

你有一些HTML(我存儲在sb你的HTML代碼段)要解析成一系列的iText對象添加到表格單元格。

這是該操作的結果:

Screen shot

這看起來幾乎是我所期望的方式。

+0

XMLWorkerHelper.parseToElementList是什麼版本的庫?我在5.5.2版本中看不到這種方法。我已經爲我的問題添加了版本。 – 2015-02-12 08:54:24

+0

版本5.5.4。我添加了這個便捷方法,因爲我厭倦了在StackOverflow的答案中反覆複製/粘貼相同的代碼序列。 – 2015-02-12 09:25:43

+0

好的,我測試過了。它大大改進了HTML的處理並將其置於獨立段落中,但如果我將該段落添加到表格中,則必須濾除PdfDivs,因爲它們的內容不會顯示出來。 – 2015-02-12 10:09:29