# Tabelle mit iText erstellen



## Alexius (28. Sep 2012)

Hallo Leute! 
Ich versuche gerade mit iText einen PDF-Formular zu erstellen. Zum Schluss muss das Formular ein paar Überschriften haben und 3 Tabellen die in einer bestimmten Reihenfolge im Formular erscheinen. Nun bin ich fast fertig mit dem Formular. Ich muss nur nocht die letzte Tabelle erstellen. Und genau hier happerts auch.
Diese Tabelle hat 2 bis n Zeilen, sprich die muss "dynamisch" erstellt werden. Was ich im Moment weiß, das diese Tabelle 5 Spallten (ArtNr, Bezeichnung etc.) hat und je nach dem wie viel der Kunde bestellt hat, wird pro Artikel eine Zeile hinzugefügt. Was ich noch vlt sagen muss - die Info über die Anzahl der bestellen Artikel sowie Artikel info holl ich mir aus einer JXTreeTable. All diese Infos speichere ich in einer HashMap ab. 

An dieser Stelle muss noch gesagt werden, das bis vor kurzem habe ich nie was von iText gehört und hab mit Erstellung von PDF-Formularen in Java noch nie was zu tun gehabt, also wenn jemandem was einfällt - bitte soldatensichere Lösung. 

Danke im Voraus!


----------



## Ullenboom (30. Sep 2012)

iText Tutorials - iText Table, Java PDF API for Open, Manipulate and Creation zeigt, wie man eine Tabelle erstellt. Jetzt brauchst du nur noch eine Schleife über alle Zellen.


----------



## Alexius (15. Okt 2012)

Danke schon mal für den Tipp. 
Nu hab ich en weiteres Problemm, und zwar, muss ich 2 Spalten in meiner Tabelle editierbar machen. 
Im Moment läuft es bei mir so ab: 


```
for (Map.Entry<Driver, List<Device>> entry : devicesAndDriverList)
{
            driver = entry.getKey();
            driver.getId();

            cell = new PdfPCell(new Phrase(driver.getArtNr(), FontFactory.getFont("Computer Modern", 10)));
            TableLizenz.addCell(cell);
            cell = new PdfPCell(new Phrase(driver.getName(), FontFactory.getFont("Computer Modern", 10)));
            TableLizenz.addCell(cell);
            .....

}
```
Damit krieg ich meine Tabelle mit allen Werten die ich braucht befühlt. 
Insgesammt hab ich jetzt 7 Spalten und 2 davon muss ich editierbar machen. 

In der Tablle davor habe ich das so gemacht: 

```
public CreatePDF(final int tf)
{
        this.tf = tf;
}

...
cell = new PdfPCell();
cell.setCellEvent(new CreatePDF(13));
Tablle.addCell(cell);
...

 public void cellLayout(final PdfPCell cell, final Rectangle rectangle, final PdfContentByte[] canvases)
 {
        PdfWriter writer = canvases[0].getPdfWriter();
        TextField text = new TextField(writer, rectangle, String.format("text_%s", tf));
        
        switch (tf)
        {
              case 0:
                text.setText(textField.getNr().getText());
                text.setFontSize(12);
                text.setAlignment(Element.ALIGN_LEFT);
                text.setOptions(TextField.REQUIRED);
                break;
                ....
         }
}
```
Kann gut sein das ich da paar Sachen drin habe die so kein Sinn machen, aber es funktionier. Ich kann die Felder in den anderen Tabellen meines PDF Formulars vorbelegen und anschließend editieren. 
Nu muss ich wie gesagt die 2 Spallten in meiner letzten Tabelle editierbar mache. Anfangs dachte ich das ich es auf die gleiche Art und Weise machen kann. Problem - driver.getArtNr etc. liefern mir String zurück und die cellEvent() - Methode braucht cellEvent - Typ. Casten geht leider auch nicht (wenn ich das mach, kriege ich "java.lang.ClassCastException: com.lowagie.text.Phrase cannot be cast to com.lowagie.text.pdf.PdfPCellEvent").

Für jede Hilfe bin ich sehr dankbar!

Alexius


----------



## Alexius (17. Okt 2012)

Hat denn keiner eine Idee?
Eigentlich brauche ich ja nur so was wie: 

```
cell.setOptions(PdfPCell.EDITABLE);
```
wenn es so was überhaupt gibt. 

Oder vlt. verstehe ich die ganze Vorgehensweise nicht, wie iText PDF-Formular erstellt und wie die einezelne Felder editierbar gemacht werden? Geht es vlt. wirklich nur über CellEvent() -> CellLayout()?


----------

