2014-11-05 110 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