1

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-snippet - message.getContent() によって返される - は、もともと次のようになっています。

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

1 に答える 1

2

問題が解決しました。

これは、itextpdf と xmlworker のバージョンがわずかに異なることが原因でした。

これと他の多くの問題は、両方の依存関係のまったく同じバージョン (私の場合は 5.5.5) を取得することで解決されました。

頭を壁にぶつけて 2 日間、これだけ強調してもしきれません。itext と xmlworker に関する大量の問題を回避するには、プロジェクト内でそれらが常に正確に同じバージョンであることを確認してください。

うまくいけば、これは他の人に役立ちます。

于 2015-03-05T12:17:41.810 に答える