Szukaj…


Uwagi

PdfPTable nazwy klas PdfPTable i PdfPCell klasy iText 5, ponieważ mieliśmy już klasy o nazwie Table i Cell do tworzenia obiektów tabeli i komórki na najwyższym poziomie programowania. Istniała również klasa o nazwie PdfTable do wewnętrznego użytku przez iText. Klasy te miały wiele wad i były przestarzałe na rzecz PdfPTable i PdfPCell . Zostały usunięte dawno temu.

Z biegiem lat PdfPTable i PdfPCell również spotkały się z krytyką ze strony użytkowników. Na przykład: użytkownicy nie rozumieli różnicy między trybem tekstowym a trybem złożonym .

Tryb tekstowy jest używany podczas tworzenia PdfPCell następujący sposób:

cell = new PdfPCell(new Phrase("Cell with rowspan 2"));

W takim przypadku definiujesz właściwości takie jak wyrównanie w poziomie na poziomie PdfPCell .

Tryb kompozytowy uruchamia się w momencie użycia metody addElement() :

cell = new PdfPCell();
cell.addElement(new Phrase("Cell 1.2"));

W takim przypadku niektóre właściwości zdefiniowane na poziomie PdfPCell (takie jak wyrównanie w poziomie) są ignorowane. Poziome wyrównanie należy zdefiniować na poziomie elementów dodanych do komórki. Na przykład: jeśli chcesz utworzyć komórkę, w której różne akapity muszą mieć inne wyrównanie w poziomie, przejdziesz do trybu złożonego.

Jeśli spojrzysz na zrzut ekranu tabeli utworzonej za pomocą przykładu iText 5, zauważysz, że komórki z zawartością Komórka 1.1 (dodana w trybie tekstowym) i Komórka 1.2 (dodana w trybie złożonym) są ustawione zupełnie inaczej.

W odpowiedzi na krytykę nieparzystego wyrównania wprowadziliśmy metody wykorzystywania informacji o wstępujących i opadających. Używamy tych metod dla komórek z zawartością Komórka 2.1 (dodana w trybie tekstowym) i Komórka 2.2 (dodana w trybie złożonym). Wprowadziliśmy również wypełnienie 5 dla tych komórek.

Teraz wynik jest znacznie lepszy.

Co naprawiliśmy w iText 7:

Ponieważ stworzyliśmy iText 7 od zera, nie mieliśmy klas starszych o nazwach, których nie moglibyśmy ponownie użyć. Wprowadziliśmy nową Table i nową klasę Cell .

Nie ma już trybu tekstowego ani trybu kompozytowego. Cell jest tworzona albo bez parametrów, albo z parametrami określającymi zakres wierszy i zakres colspan. Cała zawartość jest dodawana w ten sam sposób: za pomocą metody add() .

Nasi klienci również prosili o zapewnienie sposobu odróżnienia marży i wypełnienia. W przykładzie iText 7 dodaliśmy szare tło, aby pokazać różnicę. W komórce z zawartością Komórka 2.1 definiujemy margines 5 jednostek użytkownika. Domyślnym dopełnieniem jest 2. W komórce z zawartością Cell 2.2 definiujemy dopełnienie 5 jednostek użytkownika, domyślny margines w 0.

Jak widać na zrzutach ekranu, komórki są renderowane całkiem nieźle. Nie musieliśmy używać metod, aby ustawić wznoszenie lub opuszczanie. Domyślne zachowanie jest znacznie bliższe zachowaniu, którego oczekiwałby programista.

Chcesz wiedzieć więcej o tabelach i komórkach w iText 7?

Przeczytaj Dodawanie obiektów AbstractElement (część 2), który jest rozdziałem 5 w samouczku iText 7: Building Blocks . Zdobądź bezpłatny ebook!

HelloWorldTable.java (iText 5)

W tym przykładzie utworzymy następującą tabelę za pomocą iText 5:

wprowadź opis zdjęcia tutaj

Potrzebujemy PdfPTable i PdfPCell aby to osiągnąć:

public void createPdf(String dest) throws IOException, DocumentException {
    Document document = new Document();
    PdfWriter.getInstance(document, new FileOutputStream(dest));
    document.open();
    PdfPTable table = new PdfPTable(3);
    PdfPCell cell = new PdfPCell(new Phrase("Cell with colspan 3"));
    cell.setColspan(3);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    table.addCell(cell);
    cell = new PdfPCell(new Phrase("Cell with rowspan 2"));
    cell.setRowspan(2);
    cell.setVerticalAlignment(Element.ALIGN_MIDDLE);
    table.addCell(cell);
    table.addCell("Cell 1.1");
    cell = new PdfPCell();
    cell.addElement(new Phrase("Cell 1.2"));
    table.addCell(cell);
    cell = new PdfPCell(new Phrase("Cell 2.1"));
    cell.setPadding(5);
    cell.setUseAscender(true);
    cell.setUseDescender(true);
    cell.setHorizontalAlignment(Element.ALIGN_CENTER);
    table.addCell(cell);
    cell = new PdfPCell();
    cell.setPadding(5);
    cell.setUseAscender(true);
    cell.setUseDescender(true);
    Paragraph p = new Paragraph("Cell 2.2");
    p.setAlignment(Element.ALIGN_CENTER);
    cell.addElement(p);
    table.addCell(cell);
    document.add(table);
    document.close();
}

Źródło: developers.itextpdf.com

HelloWorldTable.java (iText 7)

W tym przykładzie utworzymy następującą tabelę za pomocą iText 7:

wprowadź opis zdjęcia tutaj

Będziemy potrzebować klasy Table i Cell aby to osiągnąć:

public void createPdf(String dest) throws IOException {
    PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
    try (Document document = new Document(pdf)) {
        Table table = new Table(3);
        Cell cell = new Cell(1, 3)
            .setTextAlignment(TextAlignment.CENTER)
            .add("Cell with colspan 3");
        table.addCell(cell);
        cell = new Cell(2, 1)
            .add("Cell with rowspan 2")
            .setVerticalAlignment(VerticalAlignment.MIDDLE);
        table.addCell(cell);
        table.addCell("Cell 1.1");
        table.addCell(new Cell().add("Cell 1.2"));
        table.addCell(new Cell()
            .add("Cell 2.1")
            .setBackgroundColor(Color.LIGHT_GRAY)
            .setMargin(5));
        table.addCell(new Cell()
            .add("Cell 1.2")
            .setBackgroundColor(Color.LIGHT_GRAY)
            .setPadding(5));
        document.add(table);
    }
}

Źródło: developers.itextpdf.com i samouczek iText 7: Building Blocks .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow