# iText: Mehrseitiges PDF erzeugen



## Leroy42 (6. Sep 2007)

Hallo, 

ich versuche gerade per iText ein mehrseitiges PDF-File (Quartalsabrechnung)
zu erstellen und bin auf einen merkwürdigen Fehler gestossen:

```
import java.awt.*;
import java.io.*;
import com.lowagie.text.*;
import com.lowagie.text.pdf.*;

public class PDFCreate {
    public static void main(String[] args) {
        Document document = new Document();
        try {
        	PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("Test.pdf"));
            document.open();
            int w = (int) PageSize.A4.width();
            int h = (int) PageSize.A4.height();

            PdfContentByte cb = writer.getDirectContent();
            Graphics2D g = cb.createGraphics(w, h);
            g.drawString("Hallo", 100, 100);

            document.newPage();
            cb = writer.getDirectContent();
            g = cb.createGraphics(w, h);
            g.drawString("Welt", 100, 100);
        } catch(DocumentException de) {
            System.err.println(de.getMessage());
        } catch(IOException ioe) {
            System.err.println(ioe.getMessage());
        }
        document.close();
        try {
          Runtime.getRuntime().exec("cmd /c " + "Test.pdf");
        } catch (IOException e) {
          e.printStackTrace();
        }
    }
}
```
Wenn ich bei der Anzeige des erzeugten Dokuments mit der Maus langsam durch
die Seiten scrolle, bleibt die zweite Seite vollständig leer; erst ab einen bestimmten
Zeitpunkt (wenn die erste Seite vollständig nicht mehr zu sehen ist) erscheint plötzlich
das Wort "Welt"; beim Ausdruck sieht allerdings alles korrekt aus.

*Frage*: Ist das jetzt ein Fehler des Acrobat Readers oder mache ich etwas
grundsätzlich falsch? Oder anders gefragt: Sind die Anweisungen

```
document.newPage();
            cb = writer.getDirectContent();
            g = cb.createGraphics(w, h);
            g.drawString("Welt", 100, 100);
```
so korrekt? Wird jeweils der richtige _DirectContent_ für die einzelnen
Seiten besorgt, in den ich dann hineinschreiben kann?

Danke im Voraus!


----------



## Wildcard (6. Sep 2007)

Nimm den Foxit Reader, der ist eh schneller und besser, wenn du dort immer noch Probleme hast seh ich mir den Code mal an  :wink:


----------



## The_S (7. Sep 2007)

Es ist besser Seitenumbrüche in iText mittels PageEvent zu generieren. Aber wenn das PDF korrekt erzeugt und ausgedruckt wird, würde ich mal darauf schließen, dass der Acrobat Reader nen Hau hat.


----------



## Leroy42 (7. Sep 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> dass der Acrobat Reader nen Hau hat.



Denke ich auch; WildCard's _Foxit Reader_ mach auf Anhieb auch bei
der Monitordarstellung keine Probleme


----------



## thE_29 (7. Sep 2007)

Naja.. da iText die Richtlinien von Adobe implementiert, isses irgendwie komisch dass das Adobe eigene Programm das nicht richtig darstellen kann...


----------



## The_S (7. Sep 2007)

Das schon, ich tippe aber eher auf eine veraltete oder fehlerhaft installierte version bei leroy ...


----------



## Jango (8. Sep 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> ...fehlerhaft installierte version bei leroy ...


 :shock:  Was kann man beim Installieren vom Adobe Reader falsch machen?


----------



## Wildcard (8. Sep 2007)

Jango hat gesagt.:
			
		

> :shock:  Was kann man beim Installieren vom Adobe Reader falsch machen?


Man kann den Fehler machen nicht auf 'Abbrechen' zu klicken  :wink:


----------



## Gast2 (8. Sep 2007)

du musst bei itext nicht extra die seite auf A4 stellen, das ist automatisch so ...
also funktioniert es auch bei adobe

```
import java.awt.*; 
import java.io.*; 
import com.lowagie.text.*; 
import com.lowagie.text.pdf.*; 

public class PDFCreate { 
    public static void main(String[] args) { 
        Document document = new Document(); 
        try { 
           PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("Test.pdf")); 
            document.open(); 

            PdfContentByte cb = writer.getDirectContent(); 
            cb.beginText();
            BaseFont bf5= BaseFont.createFont(BaseFont.COURIER, BaseFont.CP1250, BaseFont.NOT_EMBEDDED);
            cb.setFontAndSize(bf5, 10);
            cb.setTextMatrix(22, 692);
            cb.showText("Hallo");
            cb.endText();

            document.newPage(); 
            cb = writer.getDirectContent(); 
            cb.beginText();
            cb.setFontAndSize(bf5, 10);
            cb.setTextMatrix(22, 692);
            cb.showText("Welt");
            cb.endText();
        } catch(DocumentException de) { 
            System.err.println(de.getMessage()); 
        } catch(IOException ioe) { 
            System.err.println(ioe.getMessage()); 
        } 
        document.close(); 
        try { 
          Runtime.getRuntime().exec("cmd /c " + "Test.pdf"); 
        } catch (IOException e) { 
          e.printStackTrace(); 
        } 
    } 
}
```


----------



## The_S (10. Sep 2007)

Jango hat gesagt.:
			
		

> Hobbit_Im_Blutrausch hat gesagt.:
> 
> 
> 
> ...



kA, ma kann viel  . Evtl. auch ne defekte Installation (was ich eigentlich damit sagen wollte), z. B. weil Leroy (oder ein böser Mensch/Virus) was an den Installationsdateien verändert hat. Man weiß es nicht.


----------

