請大家看一下例子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