Java 如何使用IText添加表而不引发异常?

Java 如何使用IText添加表而不引发异常?,java,itext,pdf-generation,itext7,Java,Itext,Pdf Generation,Itext7,我正在尝试将表添加到由IText生成的pdf文档中,但是在运行该文件时,出现强制转换异常错误(com.itextpdf.text.pdf.PdfPTable无法强制转换为com.itextpdf.layout.element.IBlockElement)。我该如何解决这个问题 import com.itextpdf.kernel.pdf.PdfDocument; import com.itextpdf.kernel.pdf.PdfWriter; import com.itextpdf.kern

我正在尝试将表添加到由IText生成的pdf文档中,但是在运行该文件时,出现强制转换异常错误(com.itextpdf.text.pdf.PdfPTable无法强制转换为com.itextpdf.layout.element.IBlockElement)。我该如何解决这个问题

import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import  com.itextpdf.kernel.pdf.*;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.IBlockElement;

import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.property.TextAlignment;
import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Font;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
...


PdfWriter writer = new PdfWriter(dest);
            // Creating a PdfDocument       
            PdfDocument pdf = new PdfDocument(writer);
        ...
            Document document = new Document(pdf);

PdfPTable p = new PdfPTable(5);
            p.setWidthPercentage(100);
            Font neg = new Font(Font.FontFamily.TIMES_ROMAN, 12, Font.BOLD, BaseColor.BLACK);
            PdfPCell cell1 = new PdfPCell(new Phrase("Item", neg));
            PdfPCell cell2 = new PdfPCell(new Phrase("Part No", neg));
            PdfPCell cell3 = new PdfPCell(new Phrase("Unit Cost", neg));
            PdfPCell cell4 = new PdfPCell(new Phrase("Qunatity", neg));
            PdfPCell cell5 = new PdfPCell(new Phrase("Cost", neg));

            p.addCell(cell1);
            p.addCell(cell2);
            p.addCell(cell3);
            p.addCell(cell4);
            p.addCell(cell5);

            for(SparePart s :sp ){
                p.addCell(s.getPartName());
                p.addCell(s.getCode());
                p.addCell(s.getPrice().toString());
                p.addCell(Integer.toString(s.getQnty_Used()));
                p.addCell(s.getTotalPrice().toString());
            }
            document.add((IBlockElement) p);

            document.close();
但当我运行该文件时,会出现以下错误:

注意:当我删除“IBlockElement”时,我得到了一个编译时错误。(没有找到合适的add(PdfPTable)方法) 方法RootElement.add(IBlockElement)不适用 (参数不匹配;PdfPTable无法转换为IBlockElement) 方法RootElement.add(图像)不适用…)

另外,这些是存储在my.pom文件中的相应依赖项,仅供参考,不确定是否存在导致问题的缺失/冲突

 <dependency>         
            <groupId>com.itextpdf</groupId>         
            <artifactId>kernel</artifactId>         
            <version>7.0.2</version>     
        </dependency>  

        <dependency>         
            <groupId>com.itextpdf</groupId>         
            <artifactId>io</artifactId>         
            <version>7.0.2</version>     
        </dependency>  

        <dependency>         
            <groupId>com.itextpdf</groupId>         
            <artifactId>layout</artifactId>         
            <version>7.0.2</version>
        </dependency>  

        <dependency>         
            <groupId>com.itextpdf</groupId>         
            <artifactId>forms</artifactId>         
            <version>7.0.2</version>    
        </dependency>  

        <dependency>         
            <groupId>com.itextpdf</groupId>         
            <artifactId>pdfa</artifactId>         
            <version>7.0.2</version>     
        </dependency>  

        <dependency>         
            <groupId>com.itextpdf</groupId>         
            <artifactId>sign</artifactId>         
            <version>7.0.2</version>     
        </dependency>  

        <dependency>         
            <groupId>com.itextpdf</groupId>         
            <artifactId>barcodes</artifactId>         
            <version>7.0.2</version>     
        </dependency>  

        <dependency>         
            <groupId>com.itextpdf</groupId>         
            <artifactId>font-asian</artifactId>         
            <version>7.0.2</version>     
        </dependency>  

        <dependency>         
            <groupId>com.itextpdf</groupId>         
            <artifactId>hyph</artifactId>         
            <version>7.0.2</version>    
        </dependency> 
        <!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.13</version>
        </dependency>

com.itextpdf
内核
7.0.2     
com.itextpdf
木卫一
7.0.2     
com.itextpdf
布局
7.0.2
com.itextpdf
形式
7.0.2    
com.itextpdf
pdfa
7.0.2     
com.itextpdf
签名
7.0.2     
com.itextpdf
条形码
7.0.2     
com.itextpdf
亚洲字体
7.0.2     
com.itextpdf
连字符
7.0.2    
com.itextpdf
itextpdf
5.5.13

您同时使用iText5和iText7类,请避免这样做

这就是在iText7中向文档添加表的方式:

    PdfDocument pdfDoc = new PdfDocument(new PdfWriter(outFileName));
    Document doc = new Document(pdfDoc);

    Table table = new Table(new float[]{50, 50})
            .addCell(new Cell().add(new Paragraph("cell 1, 1")))
            .addCell(new Cell().add(new Paragraph("cell 1, 2")));
    doc.add(table);
    doc.close();
以下是正确的iText7导入:

    import com.itextpdf.kernel.pdf.PdfDocument;
    import com.itextpdf.kernel.pdf.PdfWriter;
    import com.itextpdf.layout.element.Cell;
    import com.itextpdf.layout.element.Paragraph;
    import com.itextpdf.layout.element.Table;
通常,在iText7中,可以避免使用以
com.itextpdf.text.
开头的类,因此应该删除最后一个依赖项