Как добавить таблицы с использованием IText без исключения приведения? - PullRequest
1 голос
/ 03 апреля 2019

Я пытаюсь добавить таблицу в документ PDF, созданный IText, однако я получаю ошибку исключения приведения (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();

Но когда я запускаю файл, я получаю эту ошибку: enter image description here

Обратите внимание, что когда я удаляю IBlockElement, я получаю ошибку времени компиляции (подходящий метод для add не найден (PdfPTable) метод RootElement.add (IBlockElement) не применим (несоответствие аргумента; PdfPTable не может быть преобразовано в IBlockElement) метод RootElement.add (Image) не применим ...)

Также для справки это соответствующие зависимости, хранящиеся в моем файле .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>

1 Ответ

1 голос
/ 03 апреля 2019

Вы используете классы 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., поэтому последнюю из ваших зависимостей следует удалить.

...