2015-02-12 5 views
1

Это тема, связанная с List items in table cell are not formatted. Я использую XmlWorker для обработки выходных данных HTML из форматируемого элемента управления (dijit/Editor из Dojo). Есть некоторые блоки (при использовании центрирования или маржинальных форматтеров) так:Добавление 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 являются «потеряли».

Как следует использовать элементы PdfDiv из XmlWorker?

Я использую IText и XmlWorker в версии 5.5.2

ответ

2

(я думаю) Я понимаю ваш вопрос, но я не понимаю ваш код.

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 (я сохранил свой HTML фрагмент в sb), которые вы хотите, чтобы разобрать на ряд объектов IText, которые будут добавлены к ячейка таблицы.

Это результат этой операции:

Screen shot

Это выглядит довольно много, как я ожидал.

+0

XMLWorkerHelper.parseToElementList, какая версия библиотеки? Я не вижу этот метод в моей версии 5.5.2. Я добавил версию к моему вопросу. –

+0

Версия 5.5.4. Я добавил этот метод удобства, потому что я уставал копировать/вставлять одну и ту же последовательность кода снова и снова в своих ответах на StackOverflow. –

+0

OK Я протестировал его. Он значительно улучшает обработку HTML и помещает его в автономный абзац, но все же, если я добавлю абзац в таблицу, я должен отфильтровать PdfDivs, потому что их содержимое не отображается. –

Смежные вопросы