NoNewLineParagraph 无法转换为 Element

NoNewLineParagraph cannot be cast to Element

我正在关注 itextpdf 示例 http://itextpdf.com/sandbox/htmlworker/HtmlContentForCell

我有以下代码:

// Relevant code from main part of the class:

   ByteArrayOutputStream baos = new ByteArrayOutputStream();
   Document document = new Document(PageSize.A4, 40, 40, 40, 40);
   PdfWriter writer = PdfWriter.getInstance(document, baos);
   document.open();
   document.add(buildContent());
   document.close();

// method that should provide content to the document.

public PdfPTable buildContent() throws IOException {
    InfoList infoList = infoListInstance.get();
    PdfPTable table = new PdfPTable(2);
    for (InfoListMessage message
            : infolistList.getMessages()) {
        renderMessageMetadata(message, table);
        renderMessageContent(message, table);
    }
    return table;
}

// method where the problem occurs and exception is thrown in the for-loop line

public void renderMessageContent(
        InfoListMessage message,
        PdfPTable table) throws IOException {

PdfPCell cell = new PdfPCell();

for (Element e : XMLWorkerHelper.parseToElementList(message.getContent(), null)) {
    cell.addElement(e);
}  
    table.addCell(cell);
}

带有 for 循环 "for (Element e ..." 的行导致以下异常:

java.lang.ClassCastException: com.itextpdf.tool.xml.html.pdfelement.NoNewLineParagraph 无法转换为 com.itextpdf.text.Element

为什么?我无法通过谷歌搜索找到有关此异常的任何信息。

在这种情况下,html-片段 - 由 message.getContent() 返回 - 我正在尝试使用,最初看起来像这样:

<html>
 <head></head>
 <body>
 justrandomtexthere
 </body>
</html>

问题已解决。

这是因为我的 itextpdf 和 xmlworker 的版本略有不同。

通过获得两个依赖项的完全相同的版本(在我的例子中是 5.5.5)解决了这个问题和许多其他问题。

经过 2 天的严格撞墙之后,我对此再强调也不为过:为了避免 itext 和 xmlworker 出现大量问题,确保它们在您的项目中始终是完全相同的版本。

希望这对其他人有帮助。