解析HTML片段并添加到PdfPTable

我正在创建一个由几个PdfPTable组成的PDF,其中一些PdfCell由简单的短语组成,其他的则需要解析HTML片段。 为了确保解析的HTML添加了所需的样式,并在正确的位置,我已将其存储在段落中,然后将其添加到PdfPCell。 但是,这样做会导致我在处理列表和引号等HTML标记时遇到问题。 下面是我正在做的一个粗略的例子,我该怎么做才能正确处理HTML列表,引号等?

例如:iText正确处理HTML列表并知道将其转换为iText List / ListItem。 我需要将该List添加到我的PdfTable中。 我知道将列表元素放入段落中取消了正确的样式(整个列表最终都在一行而没有编号)并且想知道处理这个的正确方法

PdfPTable table = new PdfPTable(1); table.addCell(parseHtmlToParagraph(htmlString)); table.addCell(new Phrase("Name" + user.getName())); 

 public Paragraph parseHtmlToParagraph(String str) throws IOException { StringReader body = new StringReader(str); final Paragraph para = new Paragraph(); XMLWorkerHelper.getInstance().parseXHtml(new ElementHandler() { @Override public void add(Writable w) { if (w instanceof WritableElement) { List elements = ((WritableElement) w).elements(); for (Element e : elements) { para.add(e); } } } }, body); return para; } 

答案很简单:通过在文本模式下创建单元格而不是在复合模式下创建单元格,您将丢弃所有结构(例如列表结构)。

像这样创建你的单元格:

 PdfPCell cell = new PdfPCell(); List elements = ((WritableElement) w).elements(); for (Element e : elements) { cell.addElement(e); } 

您正在使用addCell()方法隐式创建PdfPCell实例。 您正在将Paragraph传递给此方法,但此Paragraph已转换为Phrase 。 当您隐式创建带有PhrasePdfPCell ,该Phrase存在的所有内容都将降级为纯文本元素。