# iText - Tabelle wird ohne Zwischenlinien angezeigt



## Alex Duschek (11. Mai 2009)

Hallo 

In der Hoffnung, mehr Glück als so mancher Vorposter in Sachen iText zu haben, wende ich mich mit meinem aktuellen Problem an dieses Forum. Es geht um Tabellen in iText. Erstmal etwas Quellcode...


```
PdfPTable tabelle = new PdfPTable(new float[] { 0.25f, 1.0f, 0.75f,
				1.0f, 1.0f });
		tabelle.setWidthPercentage(90.0f);
		tabelle.getDefaultCell().enableBorderSide(
				Table.LEFT | Table.RIGHT | Table.BOTTOM | Table.TOP
						| Table.CELL);

		// Header erstellen und ausrichten
		Paragraph head;
		PdfPCell header = new PdfPCell();
		header.addElement(head = new Paragraph("Befunde", sf));
		head.setAlignment(Paragraph.ALIGN_CENTER);
		header.setBackgroundColor(new Color(204, 204, 204));
		header.setColspan(5);
		tabelle.addCell(header);

		// Zellen erstellen
		PdfPCell id = new PdfPCell();
		PdfPCell severity = new PdfPCell();
		PdfPCell description = new PdfPCell();
		PdfPCell reference = new PdfPCell();
		PdfPCell aspect = new PdfPCell();
		
		// Überschriften definieren
		Paragraph idp;
		Paragraph sevp;
		Paragraph desp;
		Paragraph refp;
		Paragraph aspp;
		id.addElement(idp = new Paragraph("ID", sf));
		severity.addElement(sevp = new Paragraph("Gewichtung", sf));
		description.addElement(desp = new Paragraph("Beschreibung", sf));
		reference.addElement(refp = new Paragraph("Referenz", sf));
		aspect.addElement(aspp = new Paragraph("Prüfaspekt", sf));
		idp.setAlignment(Paragraph.ALIGN_CENTER);
		sevp.setAlignment(Paragraph.ALIGN_CENTER);
		desp.setAlignment(Paragraph.ALIGN_CENTER);
		refp.setAlignment(Paragraph.ALIGN_CENTER);
		aspp.setAlignment(Paragraph.ALIGN_CENTER);
		

		// Zellen befüllen
		for (int i = 0; i < findings.size(); i++) {
			id.addElement(idp = new Paragraph(String.valueOf(findings.get(i).getId()),
					sf));
			idp.setAlignment(Paragraph.ALIGN_CENTER);
			severity.addElement(new Paragraph(findings.get(i).getSeverity(), sf));
			description.addElement(new Paragraph(findings.get(i).getDescription(),
					sf));
			for (int p = 0; p < findings.get(i).getReference().size(); p++) {
				reference.addElement(new Paragraph(findings.get(i).getReference()
						.get(p), sf));
			}
			for (int k = 0; k < findings.get(i).getAspect().size(); k++) {
				aspect.addElement(new Paragraph(
						findings.get(i).getAspect().get(k), sf));
			}

		}

		tabelle.addCell(id);
		tabelle.addCell(severity);
		tabelle.addCell(description);
		tabelle.addCell(reference);
		tabelle.addCell(aspect);

		return tabelle;
	}
```

Ich hab eine 5-spaltige Tabelle. In den ersten 2 Spalten stehen jeweils meist kurze Strings, in den Spalten 3 und 4 jedoch können mehrere Zeile an Text stehen. Das Problem dabei ist nun, dass die Zellen keine Rahmenlinien haben (und nein, es bringt nichts, sie zusätzlich zu den Tabellenrahmenlinien zu setzen). Ich habe also nur eine Tabelle ohne inneres Gitter. Zusätzlich dazu sind die Zeilen verschoben, es ist also nicht ersichtlich, was zu wem gehört, weil iText des Zeug einfach untereinander schreibt.

Beispiel:
------------------------------------------
- item1 | item 1 | item 1 | item1-
- item2 | item2 | item1 | item1 -
- ........... | .......... | item1 | item 1 -
- ............|............ | item2 | item1 -
- ............|.............|............| item2 -
------------------------------------------

Möglicherweise fixt ein Befehl das Ganze, aber ich hab ihn bisher noch nicht gefunden. Hoffentlich ist ein iText-Kenner um den Weg und kann mir helfen!
Danke schonmal


----------



## Thomas Darimont (11. Mai 2009)

Hallo,

hiermit bekomme ich entsprechende Gitterlinien angezeigt.


```
package de.tutorials;

import java.awt.Color;
import java.io.FileOutputStream;

import com.lowagie.text.Document;
import com.lowagie.text.Font;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Table;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;

public class ITextExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {

        PdfPTable table = new PdfPTable(5);
        table.getDefaultCell().enableBorderSide(
                Table.LEFT | Table.RIGHT | Table.BOTTOM | Table.TOP
                        | Table.CELL);

        Paragraph head = new Paragraph("tutorials.de");
        head.setAlignment(Paragraph.ALIGN_CENTER);

        PdfPCell headerTitle = new PdfPCell();
        headerTitle.setColspan(5);
        headerTitle.setPhrase(new Phrase("www.tutorials.de"));
        headerTitle.setBackgroundColor(Color.LIGHT_GRAY);
        table.addCell(headerTitle);
        
        table.getDefaultCell().setBackgroundColor(Color.ORANGE);
        for(int i = 0; i < 5;i++){
            table.addCell("Column"+i);
            
        }
        table.getDefaultCell().setBackgroundColor(Color.WHITE);

        for (int i = 0; i < 20; i++) {
            int columnIndex = i % 5;
            switch (columnIndex) {
            case 0:
                table.addCell("Column0_" + i);
                break;
            case 1:
                table.addCell("Column1_" + i);
                break;
            case 2:
                table.addCell("Column2_" + i);
                break;
            case 3:
                table.addCell("Column3_" + i);
                break;
            case 4:
                table.addCell("Column4_" + i);
                break;
            }
        }

        Document document = new Document();
        PdfWriter.getInstance(document, new FileOutputStream("test.pdf"));
        document.open();
        document.add(table);
        document.close();

    }

}
```

Gruß Tom


----------



## Alex Duschek (12. Mai 2009)

Hmmm...also ich hab jetzt 20 Minuten versucht, deinen Quellcode so umzubauen, dass der Fehler auftritt...aber ich habs nicht geschafft *gg*.

Meine erste Vermutung, dass es daran liegt, dass ich mehrere Elemente in einer Zelle habe, konnte ich widerlegen. Aktuell denke ich, dass es mit dem Seitenumbruch zu tun hat und dadurch etwas kaputt geht, weil wenn ich weniger Daten habe, sodass sie auf eine Seite passen, dann funktioniert es. Ich forsche morgen weiter ...


----------

