2014-11-05 114 views
3

我有XHTML內容,我必須從這個內容中創建一個PDF文件。我使用iText pdf轉換器。 我試過簡單的方法,但在調用XMLWorkerHelper解析器後,我總是得到不好的結果。如何使用iText將XHTML嵌套列表轉換爲pdf?

XHTML: <ul> <li>First <ol> <li>Second</li> <li>Second</li> </ol> </li> <li>First</li> </ul>

的預期值:

  • 首先
  • 首先

PDF結果:

  • 第一二二
  • 首先

在結果沒有嵌套列表。我需要一個調用解析器的解決方案,而不是創建一個iText Document實例。

回答

3

請大家看一下例子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。這不是我們目前技術路線圖上的一個項目。

+0

我需要用richtext數據填充現有的PDF,我被允許在新頁面中渲染溢出的數據,我怎樣才能不使用ColumnText去。對於document.add,截斷文本會發生什麼情況,我如何拆分文本以適合頁面。我很抱歉,如果這個問題對你來說太明顯了,我剛開始使用itext。 – user1541389 2017-01-13 03:10:10

+0

我不明白你不明白。請創建一個新問題並添加一個[SSCCE](http:// sscce。org)解釋你想要做什麼,並解釋你爲什麼認爲它不起作用。 – 2017-01-13 08:46:50