# Graphics PDFBox



## Flon92 (1. Apr 2010)

Ich nutze PDFBox und möchte ein Graphics reinschreiben (in das Dokument). Hat jemand vielleicht ein Code-Snippet das mir das kurz demonstriert?
THX


----------



## Flon92 (2. Apr 2010)

Würde das vorherige Abspeichern und neu einlesen als (Buffered)Image etwas bringen?
Danke


----------



## Flon92 (5. Apr 2010)

Keiner ?


----------



## eRaaaa (5. Apr 2010)

Mhm, also ich hab damit selbst auch noch nie was gemacht, aber bei den Beispielen ist doch etwas zu finden um ein BufferedImage im Dokument zu zeichnen/anzuzeigen?! Hilft dir das vllt?


```
public static void main(String... _) throws Exception {
	PDDocument doc = null;
	try {
	    doc = new PDDocument();
	    PDPage page = new PDPage();
	    doc.addPage(page);
	    PDXObjectImage ximage = null;
	    
	    BufferedImage image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB);
	    Graphics2D g = image.createGraphics();
	    g.drawString("Hallo PDFBox", 100, 100);
	    g.dispose();
	    ximage = new PDJpeg(doc, image);
	    
	    /* Lade ein Bild */
	   // ximage = new PDJpeg(doc, new FileInputStream( "PFAD" ) );

	    PDPageContentStream contentStream = new PDPageContentStream(doc,page);
	    contentStream.drawImage(ximage, 20, 20);
	    contentStream.close();
	    doc.save("PFAD WO PDF GESPEICHERT WERDEN SOLL"); //anpassen
	} finally {
	    if (doc != null) {
		doc.close();
	    }
	}
    }
```


----------



## Flon92 (5. Apr 2010)

Komisch, das Beispiel habe ich nicht gefunden. Könntest du den Link dazu posten? Danke

In dem Beispiel wird Graphics g modifiziert aber nie wieder benutzt?!?


----------



## eRaaaa (5. Apr 2010)

Flon92 hat gesagt.:


> Komisch, das Beispiel habe ich nicht gefunden. Könntest du den Link dazu posten? Danke


Nein kann ich nicht 
Die Beispiele findest du wenn du dir die Sourcen runterlädst in einem Ordner examples/(pdmodel)


> In dem Beispiel wird Graphics g modifiziert aber nie wieder benutzt?!?



Der Teil mit dem BufferedImage + Graphics stammt von mir, das hab ich da nur schnell testweise reingeschrieben, aber was meinst du mit nicht mehr benutzt? Hier hole ich mir ja das Graphics von dem BufferedImage und male dann quasi auf dem Bild den String... oder was meinst du?


----------



## Flon92 (5. Apr 2010)

Aha, das könnte die lange Suche erklären 

        BufferedImage image = new BufferedImage(300, 300, BufferedImage.TYPE_INT_RGB);
        Graphics2D g = image.createGraphics();
        g.drawString("Hallo PDFBox", 100, 100);
        g.dispose();
        ximage = new PDJpeg(doc, image);

Du lädst erstellst ein leeres "image" weißt g den Grafiken zu und modifizierst g. Anschließend übergibst du PDJpeg aber das unmodifizierte (und damit leere(?)) image  oder habe ich da etwas falsch verstanden?


----------



## eRaaaa (5. Apr 2010)

> *Das Bild bemalen*
> 
> Image-Objekte (BufferedImage ist eine Unterklasse) geben über getGraphics() das Graphics-Objekt zurück, mit dem sich das Bild bemalen lässt. Im Fall eines speziellen BufferedImage-Objekts ist es jedoch üblich, die Methode createGraphics() einzusetzen, da sie ein Graphics2D-Objekt – eine Unterklasse von Graphics – liefert, mit dem weitere Zeichenoperationen möglich sind. Außerdem ruft getGraphics() sowieso createGraphics() auf ...
> 
> ...



Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 17.6 Bilder

mit [c]Graphics2D g = image.createGraphics();[/c] holst du dir quasi einen Pinsel mit dem du auf das Bild zeichnen kannst ! (grob gesagt  )


----------



## Flon92 (5. Apr 2010)

Ah, ok. Ich dachte das würde "get"mäßiger ablaufen .

Danke


----------



## Flon92 (8. Apr 2010)

Hi,

leider ist die Qualität der PNG in der PDF nicht so gut. Kann man die Qualität irgendwie hochstellen?


----------

