请大家看一下例子NestedListHtml
在这个例子中,我把你的代码片段list.html:
<ul>
<li>First
<ol>
<li>Second</li>
<li>Second</li>
</ol>
</li>
<li>First</li>
</ul>
我解析它变成一个ElementList
:
// 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));
现在我可以将此列表添加到Document
:
for (Element e : elements) {
document.add(e);
}
或者,我可以列出这个清单的Paragraph
:
Paragraph para = new Paragraph();
for (Element e : elements) {
para.add(e);
}
document.add(para);
你会得到期望的结果如图nested_list.pdf
您无法嵌套列表添加到PdfPCell
或到ColumnText
。例如:这是行不通的:
PdfPTable table = new PdfPTable(2);
table.addCell("Nested lists don't work in a cell");
PdfPCell cell = new PdfPCell();
for (Element e : elements) {
cell.addElement(e);
}
table.addCell(cell);
document.add(table);
这是由于在ColumnText
类已经存在了很多年的限制。我们已经评估了这个问题,解决这个问题的唯一方法是完全重写ColumnText
。这不是我们目前技术路线图上的一个项目。
我需要用richtext数据填充现有的PDF,我被允许在新页面中渲染溢出的数据,我怎样才能不使用ColumnText去。对于document.add,截断文本会发生什么情况,我如何拆分文本以适合页面。我很抱歉,如果这个问题对你来说太明显了,我刚开始使用itext。 – user1541389 2017-01-13 03:10:10
我不明白你不明白。请创建一个新问题并添加一个[SSCCE](http:// sscce。org)解释你想要做什么,并解释你为什么认为它不起作用。 – 2017-01-13 08:46:50