将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对象。
这是此操作的结果:
这看起来就像我预期的那样。