将PdfDiv添加到段落中

这是与表单元格中的列表项相关联的主题未格式化 。 我正在使用XmlWorker处理格式化控件的HTML输出(来自Dojo的dijit / Editor)。 有一些块(当你使用居中或边距格式化器时)像这样:

 My centered Para 

但是,当我将它们添加到像这里添加到表中的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 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; } 

作为PdfDiv实例的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中使用iText和XmlWorker

(我认为)我理解你的问题,但我不明白你的代码。

ParseHtml示例显示了我如何解释您的问题:

 StringBuilder sb = new StringBuilder(); sb.append("
\n

"); sb.append(""); sb.append(" My centered Para"); sb.append(""); sb.append(" "); sb.append("

\n
"); 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对象。

这是此操作的结果:

屏幕截图

这看起来就像我预期的那样。