# Wie kann man die IText Table Position bestimmen?



## cyanid3 (8. Jul 2011)

Hallo User,

ich versuch seit einiger Zeit schon meine PDFPTable zu verschieben mittels der Methode 
table.writeselectedRows(0,-1,100,100,cb);
Das Problem hierbei ist das ich folgende Meldung bekomme:


```
java.lang.RuntimeException: The table width must be greater than zero.
	at com.lowagie.text.pdf.PdfPTable.writeSelectedRows(Unknown Source)
	at com.lowagie.text.pdf.PdfPTable.writeSelectedRows(Unknown Source)
```

Hab ganz google durchforstet und viele Beispiele gefunden nur klappt es irgendwie immernoch nicht obwohl das ContentByte bestückt ist und alles plausibel klingt.

Bitte daher um Hilfe

Danke im vorraus für Antworten.
PS: Quelltext steht nicht zur Verfügung


----------



## cyanid3 (8. Jul 2011)

So, habs gelöst und zwar auf recht schmutzige Weise. Habe eine Zelle mit der Breite von 6 Column gesetzt und diese hinzugefügt. Anschließend Border rausgemacht und alles in ein schönes Weis gepackt und die höhe der Zelle gesetzt.

```
PdfPCell AbstandOben =
            new PdfPCell(new Paragraph(new Chunk("Abstand oben", FontFactory.getFont(FontFactory.HELVETICA, 1, Font.BOLD, new Color(255,255,255))))); // Die Zelle
      AbstandOben.setColspan(6); // gesamte anzahl der Spalten innerhalb der PDFPTable
      AbstandOben.setFixedHeight(55); // Höhe bzw. Abstand nach Oben
      AbstandOben.setBorder(Rectangle.NO_BORDER); // Rahmen entfernt

      table.addCell(AbstandOben);
```

Bitte dennoch falls möglich um Optimierungs oder Verbesserungsvorschläge.
Weiterhin Danke für komende Antworten


----------



## trmx (8. Jul 2011)

Hallo!

Für die Methode "writeselectedRows" muß die Tabelle eine feste Breite haben, da die Spaltenbreite beim Verschieben nicht mehr angepasst werden kann.

Tabellenbreite setzt man mit tabelle.setTotalWidth(breite).
Wenn es dir (wie in deinem Beispiel) nur um den oberen Abstand geht und die Tabelle Seitenbreite hat kannst du folgendes Beispiel verwenden:


```
float yPos=300f;

tabelle.setTotalWidth(doc.getPageSize().getWidth() - doc.leftMargin() - doc.rightMargin());
tabelle.addCell("test");
tabelle.writeSelectedRows(0, -1, doc.leftMargin(), yPos, w.getDirectContent());
```


Wenn du keine Direktpositionierung verwendest und die Objekt mit dokument.add() dem PDF hinzufügst kannst du auch alternativ zu deiner Lösung einfach vor der Tabelle

```
doc.add(Chunk.NEWLINE);
```
einfügen. Dadurch rutscht die Tabelle auch nach unten.


Michael


----------



## cyanid3 (11. Jul 2011)

Michael, Danke für die Antwort. 
Die Spaltenbreite ergibt sich aus einer Rechnung  in der das längste Wort ausgerechnet wird und auch gleich als spaltenbreite definiert wird. Die Breite ist bei mir ein Array von dem Typ float welches sich während dem befüllen permanent ändert. Doch gegen Ende hatte ich es mal versucht aber es kam die gleiche Meldung, daher glaube ich werd ich die Cell methode öfter nutzen oder die chunk version.

Dankesehr auf jedenfall.

Ich wollte zudem noch fragen ob es möglich ist eine PDFPTable einem PDFTemplate hinzuzufügen? Das würde meine Sache erheblich erleichtern. 

Danke im vorraus


----------

