Java 解析HTML片段并添加到PdfPTable

Java 解析HTML片段并添加到PdfPTable,java,itext,xmlworker,Java,Itext,Xmlworker,我正在创建一个由几个PDFPTable组成的PDF,其中一些PdfCell由简单的短语组成,而另一些则需要解析HTML片段。为了确保解析后的HTML添加了所需的样式,并且位于正确的位置,我将其存储在段落中,然后将其添加到PdfPCell中。然而,这样做会使我在处理一些HTML标记(如列表和引号)时遇到问题。下面是我正在做的一个粗略的例子,我能做些什么来正确处理HTML列表、引号等 例如:iText正确地处理HTML列表,并知道如何将其转换为iText列表/列表项。我需要将该列表添加到我的PdfT

我正在创建一个由几个PDFPTable组成的PDF,其中一些PdfCell由简单的短语组成,而另一些则需要解析HTML片段。为了确保解析后的HTML添加了所需的样式,并且位于正确的位置,我将其存储在段落中,然后将其添加到PdfPCell中。然而,这样做会使我在处理一些HTML标记(如列表和引号)时遇到问题。下面是我正在做的一个粗略的例子,我能做些什么来正确处理HTML列表、引号等

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

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

public paragration parsehtmltoparagration(String str)引发IOException{
StringReader主体=新的StringReader(str);
最后段落段落=新段落();
XMLWorkerHelper.getInstance().parseXHtml(新的ElementHandler()){
@凌驾
公共无效添加(可写w){
if(w可写元素的实例){
列表元素=((WritableElement)w).elements();
对于(元素e:元素){
添加(e)段;
}
}
}
},主体);
返回段;
}

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

按如下方式创建单元格:

PdfPCell cell = new PdfPCell();
List<Element> elements = ((WritableElement) w).elements();
for (Element e : elements) {
     cell.addElement(e);
}
PdfPCell cell=新的PdfPCell();
列表元素=((WritableElement)w).elements();
对于(元素e:元素){
单元。附加元素(e);
}

您正在使用
addCell()
方法隐式创建一个
PdfPCell
实例。您正在将
段落
传递给此方法,但此
段落
被强制转换为
短语
。当您使用
短语
隐式创建
PdfPCell
时,该
短语
中的所有内容都将降级为纯文本元素

XMLWorkerHelper实际上是解析HTML还是只解析XML?因为HTML不是有效的XML,除非它是XHTML.Duh,谢谢!我在做我的项目的时候,突然想到了隧道,却错过了一个显而易见的答案
PdfPCell cell = new PdfPCell();
List<Element> elements = ((WritableElement) w).elements();
for (Element e : elements) {
     cell.addElement(e);
}