# iText und Table.setTableFitsPage(); geht nicht



## dirty-mg (31. Jul 2008)

Hallo liebe Leute,

ich erzeuge ein PDF mit vielen untereinanderstehenden Tabelle.
Jede Tabelle ist hat 5 Spalten und 5 Zeilen.
Nun habe ich folgendes gemacht:

```
myTable.setTableFitsPage(true);
```

Das soll doch sicherlich verhindern, dass eine Tabelle am Seitenende gesplittet wird und beispielsweise die letzten beiden Zeilen auf der nächsten Seite erscheinen. Viel mehr sollte doch dann die ganze Tabelle auf der nächsten Seite stehen oder?

Leider brechen die Tabelle bei mir doch mittendrin um.

Hat jemand einen Rat?

mfg
Marcus


----------



## thE_29 (31. Jul 2008)

Müsste eigentlich genau mit dem funktionieren.

Hast du das Bsp vielleicht bei der Hand zum Testen?


----------



## dirty-mg (31. Jul 2008)

hier ein Beispiel, das bei mir nicht funktioniert:

```
package test;

import com.lowagie.text.Table;
import com.lowagie.text.Rectangle;
import com.lowagie.text.Phrase;
import com.lowagie.text.Element;
import com.lowagie.text.FontFactory;
import com.lowagie.text.Cell;
import com.lowagie.text.Document;
import com.lowagie.text.PageSize;
import com.lowagie.text.pdf.PdfWriter;
import java.io.FileOutputStream;
import java.awt.Color;

public class MainClass {
    public static void main(String[] args) {
        try {
            // Dokument vorbereiten
            Document document = new Document();
            document.setPageSize(PageSize.A4);
            String docName = System.currentTimeMillis()+".pdf";
            PdfWriter.getInstance(document, new FileOutputStream(docName));           
            document.open();
            
            for (int i=0; i<10; i++) {
                Table table = new Table(5);
                table.setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.TOP | Rectangle.BOTTOM);
                table.setBorderColor(Color.RED);
                table.setWidth(90);
                table.setTableFitsPage(true);
                table.setPadding(2);
                
                for (int zeile=1; zeile<=5; zeile++) {
                    for (int spalte=1; spalte<=5; spalte++) {
                        Cell cell = new Cell(new Phrase("S "+spalte+" Z "+zeile,
                            FontFactory.getFont("Arial", 10,
                                                com.lowagie.text.Font.NORMAL)));
                        cell.setBorder(Rectangle.BOTTOM);
                        cell.setHorizontalAlignment(Element.ALIGN_LEFT);
                        table.addCell(cell);
                    }
                }
                
                // ein wenig Abstand zwischen 2 Tabellen
                document.add(new Phrase("", FontFactory.getFont("Arial", 10,
                                                            com.lowagie.text.Font.NORMAL)));
                
                document.add(table);
            }
            
            document.close();
            Runtime.getRuntime().exec("RUNDLL32 url.dll,FileProtocolHandler " + docName);
        }
        catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}
```
Die Tabellen haben einen roten Rahmen, die Zellen einen schwarzen.


----------



## dirty-mg (31. Jul 2008)

Ich benutzer iText 2.1.2u


----------



## thE_29 (31. Jul 2008)

Mit iText 1.3 macht er das schön sauber...
Also die roten Tabellen werden nie zwischengebrochen!

Ich weiß warum ich seit 1.3 nicht mehr geupdated habe.. Die haben manchmal mehr kaputt gemacht, als eingebaut.


----------



## dirty-mg (31. Jul 2008)

Und nu? Wenn ich ein Downgrade auf iText 1.3 mache, kann ich viele viele andere Dokumente anpassen. Das wäre nicht lustig. Probier es doch mal mit iText 2.1.2u aus ;-)


----------



## robthemobb (31. Jul 2008)

dachte das macht 


```
table.setSplitLate(false);
```
oder

```
table.setSplitRows(false);
```

habs noch nie ausprobiert. evtl klappt es damit

rob


----------



## dirty-mg (31. Jul 2008)

```
table.setSplitLate()
```
kommt aus der Klasse

```
com.lowagie.text.pdf.PdfPTable
```
Ich benutze aber
[/code]com.lowagie.text.Table
	
	
	
	





```
und da gibt es diese Methode nicht.
```


----------



## robthemobb (31. Jul 2008)

dumme frage:

warum nimmst du dann nicht einfach die klasse?
sorry, bin anfänger und das verwirrt mich ein wenig. ich würde dann einfach die andere klasse nehmen mit der es geht...


----------



## thE_29 (31. Jul 2008)

So also mitn 2.1.3 gehts mal nicht..
Ich teste mal 2.1.0.

Ädit: 2.1.0 geht auch nicht... Manchmal frage ich mich warum die bestehende Funktionen so dermassen zerstören und keinem fällt es beim Testen auf.


----------



## dirty-mg (31. Jul 2008)

Jo dann muss ich die quasi fertige Klasse, die mein PDF erzeugt komplett überarbeiten zwecks Ausrichtung etc. und das möchte ich mir ersparen. Verstehst Du???


----------



## thE_29 (31. Jul 2008)

```
try
    {
      // Dokument vorbereiten
      Document document = new Document();
      document.setPageSize(PageSize.A4);
      String docName = System.currentTimeMillis() + ".pdf";
      PdfWriter.getInstance(document, new FileOutputStream(docName));
      document.open();

      for (int i = 0; i < 10; i++)
      {
        Table table = new Table(5);
        table.setBorder(Rectangle.LEFT | Rectangle.RIGHT | Rectangle.TOP |
                        Rectangle.BOTTOM);
        table.setBorderColor(Color.RED);
        table.setWidth(90);
        table.setTableFitsPage(true);
        table.setPadding(2);

        for (int zeile = 1; zeile <= 5; zeile++)
        {
          for (int spalte = 1; spalte <= 5; spalte++)
          {
            Cell cell = new Cell(new Phrase("S " + spalte + " Z " + zeile,  FontFactory.getFont("Arial", 10,
                com.lowagie.text.Font.NORMAL)));
            cell.setBorder(Rectangle.BOTTOM);
            cell.setHorizontalAlignment(Element.ALIGN_LEFT);
            table.addCell(cell);
          }
        }

        // ein wenig Abstand zwischen 2 Tabellen
        document.add(new Phrase(" ", FontFactory.getFont("Arial", 10, 
                                                        com.lowagie.text.Font.NORMAL))); //<-- OHNE LEERZEICHEN IST DANN KEIN ABSTAND
        table.setConvert2pdfptable(true); //<--- DIESER BEFEHL SORGT DAFÜR, DAS setSpliteLate gesetzt wird

        document.add(table);
      }

      document.close();
      Runtime.getRuntime().exec("RUNDLL32 url.dll,FileProtocolHandler " + docName);
    }
    catch (Exception ex)
    {
      ex.printStackTrace();
    }
```


----------



## dirty-mg (31. Jul 2008)

Das ist super. Vielen Dank.


----------

