itext
Tabellen: iText 5 vs. iText 7
Suche…
Bemerkungen
Die iText 5-Klassennamen PdfPTable
und PdfPCell
wurden ausgewählt, da bereits Klassen mit den Namen Table
und Cell
, um Tabellen- und PdfPCell
auf der höchsten Programmierebene zu erstellen. Es gab auch eine Klasse namens PdfTable
, die von iText intern verwendet wird. Diese Klassen hatten viele Mängel und wurden zugunsten von PdfPTable
und PdfPCell
. Sie wurden vor langer Zeit entfernt.
Im Laufe der Jahre wurden auch PdfPTable
und PdfPCell
von den Anwendern kritisiert. Zum Beispiel: Benutzer haben den Unterschied zwischen Textmodus und Verbundmodus nicht verstanden.
Der Textmodus wird verwendet, wenn Sie eine PdfPCell
wie PdfPCell
erstellen:
cell = new PdfPCell(new Phrase("Cell with rowspan 2"));
In diesem Fall definieren Sie Eigenschaften wie die horizontale Ausrichtung auf der Ebene der PdfPCell
.
Der Composite-Modus tritt addElement()
wenn Sie die addElement()
Methode verwenden:
cell = new PdfPCell();
cell.addElement(new Phrase("Cell 1.2"));
In diesem Fall werden einige auf Ebene der PdfPCell
definierte Eigenschaften (wie z. B. die horizontale Ausrichtung) ignoriert. Die horizontale Ausrichtung muss auf der Ebene der Elemente definiert werden, die der Zelle hinzugefügt werden. Zum Beispiel: Wenn Sie eine Zelle erstellen möchten, in der verschiedene Absätze eine andere horizontale Ausrichtung haben müssen, wechseln Sie in den zusammengesetzten Modus.
Wenn Sie sich den Screenshot der mit dem iText 5-Beispiel erstellten Tabelle ansehen, werden Sie feststellen, dass die Zellen mit dem Inhalt Zelle 1.1 (im Textmodus hinzugefügt) und Zelle 1.2 (im Verbundmodus hinzugefügt) ziemlich unterschiedlich ausgerichtet sind.
Als Antwort auf die Kritik am ungeraden Alignment haben wir Methoden zur Verwendung von Auf- und Abstiegsinformationen eingeführt. Wir verwenden diese Methoden für die Zellen mit dem Inhalt Zelle 2.1 (hinzugefügt im Textmodus) und Zelle 2.2 (hinzugefügt im zusammengesetzten Modus). Wir haben auch eine Auffüllung von 5 für diese Zellen eingeführt.
Jetzt ist das Ergebnis viel besser.
Was wir in iText 7 behoben haben:
Seit wir iText 7 von Grund auf erstellt haben, hatten wir keine älteren Klassen mit Namen, die wir nicht wiederverwenden konnten. Wir haben eine neue Table
und eine neue Cell
Klasse eingeführt.
Es gibt keinen Textmodus und keinen Verbundmodus mehr. Eine Cell
wird entweder ohne Parameter oder mit Parametern erstellt, die den Zeilenbereich und den Spaltenbereich definieren. Der gesamte Inhalt wird auf dieselbe Weise hinzugefügt: mit der add()
-Methode.
Unsere Kunden wollten auch ein Mittel zur Unterscheidung von Rand und Polsterung bieten. Im Beispiel von iText 7 haben wir einen grauen Hintergrund hinzugefügt, um den Unterschied anzuzeigen. In der Zelle mit dem Inhalt Zelle 2.1 definieren wir eine Marge von 5 Benutzereinheiten. Die Standardauffüllung ist 2. In der Zelle mit der Inhaltszelle 2.2 definieren wir eine Auffüllung von 5 Benutzereinheiten, den Standardabstand in 0.
Wie Sie den Screenshots entnehmen können, werden die Zellen recht gut gerendert. Wir mussten keine Methoden verwenden, um den Auf- oder Abstieg festzulegen. Das Standardverhalten ist viel näher an dem Verhalten, das ein Entwickler erwarten würde.
Möchten Sie mehr über Tabellen und Zellen in iText 7 erfahren?
Lesen Sie das Hinzufügen von AbstractElement-Objekten (Teil 2). Dies ist Kapitel 5 im Tutorial zu iText 7: Building Blocks . Holen Sie sich das kostenlose E-Book!
HelloWorldTable.java (iText 5)
In diesem Beispiel erstellen wir die folgende Tabelle mit iText 5:
Um dies zu erreichen, benötigen wir die Klasse PdfPTable
und PdfPCell
:
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();
}
Quelle: developer.itextpdf.com
HelloWorldTable.java (iText 7)
In diesem Beispiel erstellen wir die folgende Tabelle mit iText 7:
Um dies zu erreichen, benötigen wir die Table
und Cell
Klasse:
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);
}
}
Quelle: developer.itextpdf.com und das Tutorial zu iText 7: Bausteine .