# Itext PDf wird zu groß



## Pacman92 (12. Aug 2010)

Hallo ich habe ein Problem mit iText und bin darüber schon am verzweifeln. ;(

Ich habe 15 Bilder welche zusammen eine größe von rund 3mb haben (JPGs schwarz weiß). Wenn ich diese jetzt mit meinen Code die Bilder seitenfüllend auf PDF Seite einfüge komme ich auf eine größe von rund 15 mb der PDF - Datei. Was mache ich falsch?

Schonmal danke im Vorraus. Anbei mein Code:


```
if(f.getName().startsWith("A4") && (endung.equals("jpg")))
					{
						if(first4==false)
						{
							first4 = true;
							document4 = new Document(PageSize.A4, 0,0,0,0);
							PdfWriter writer4 = PdfWriter.getInstance(document4 ,new FileOutputStream(tmp + "/" + btanummer + "_" + "A4.pdf"));
							writer4.setFullCompression();
							document4.open();
						}
						//Bild holen
						bimg = ImageIO.read(f);
						//Mit Bild arbeiten
						bild = com.itextpdf.text.Image.getInstance(bimg, null);
						bild.setAbsolutePosition(0, 0);
						//	bild.scaleAbsolute(590.4F, 835.2F); //Zeichnen des Bildes DPI:72 
						bild.scaleAbsolute(document4.getPageSize().getWidth(), document4.getPageSize().getHeight());
						document4.add(bild);
						document4.newPage();
					}
```


----------



## eRaaaa (12. Aug 2010)

Mhm, ist das nicht normal wenn du die Bilder vergrößerst/skalierst?
Wie groß ist denn die PDF wenn du Zeile 17 auskommentierst?


----------



## Empire Phoenix (12. Aug 2010)

Yep, kann man bei Bildern nicht die Pixelgröße/AnzeigeSkalierungsfaktor festlegen?


----------



## Pacman92 (12. Aug 2010)

Ohne Zeile 17 passen die Bilder nicht mehr auf eine Seite. Man sieht also nur ein Teil

Ich will halt für jedes Bild eine Seite haben.

Das PDF ist aber trotzdem 14 MB groß


----------



## Empire Phoenix (12. Aug 2010)

Kannst du den PDFWriter einen komprimierungsfaktor für die bilder setzen? währe hier evtl die idee.


----------



## Pacman92 (12. Aug 2010)

Das habe ich ja schon in Zeile 7 gemacht. Einen anderen Faktor zum komprimieren habe ich nicht gefunden


----------



## trmx (12. Aug 2010)

Hallo! Probiere mal das Bild nicht über die ImageIO-Klasse zu laden und anschließend in ein IText-Image zu konvertieren sondern verwende stattdessen direkt das IText-Image Objekt:

[Java]bild=com.itextpdf.text.Image.read(f)[/code]

Bei mir war das PDF-Dokument dann merklich kleiner. Anscheinend macht IText beim Konvertieren etwas anderes als
wenn das Bild direkt geladen wird.


----------



## Pacman92 (13. Aug 2010)

Danke,

ich habe es so ähnlich gelöst:


```
bimg = ImageIO.read(f);
						zwimg = bimg.getScaledInstance(595, 842, Image.SCALE_SMOOTH);
						kbimg=new BufferedImage(zwimg.getWidth(null),zwimg.getHeight(null), BufferedImage.TYPE_USHORT_GRAY);
				        kbimg.createGraphics().drawImage(zwimg, 0, 0, null);
				        
					
						bild = com.itextpdf.text.Image.getInstance(kbimg, null);
```

Ich habe aber noch eine andere Frage:

Ich scanne die Bilder mit den Morena 6 Scanner Framework, dort gibt mir der Scanner ein schwarz weiß Bild zurück, wenn ich das jetzt als JPEG Bild speichere erzeugt der mir ein 256 Farben Graustufen JPEG. Ich würde das gerne als reines Scharz weiß Bild speichern um die Größe zu drücken, geht dass?

```
morenaImage = new MorenaImage(source);
			image = Toolkit.getDefaultToolkit().createImage(morenaImage);
			komp = image.getScaledInstance(1788, 2526, Image.SCALE_SMOOTH);
			//komp = image.getScaledInstance(595, 842, Image.SCALE_SMOOTH);
			//komp = image; 
			bimg=new BufferedImage(komp.getWidth(null),komp.getHeight(null), BufferedImage.TYPE_USHORT_GRAY);
	        bimg.createGraphics().drawImage(komp, 0, 0, null);
	        //
	        JPEGImageEncoder jpegImageEncoder = JPEGCodec.createJPEGEncoder(new FileOutputStream(System.getProperty("user.home") + "/BBDms/tmp/" + anzahl_ordner + "/A" + papierfomat + "_" + seiten + ".jpg"));
	        JPEGEncodeParam param = jpegImageEncoder.getDefaultJPEGEncodeParam(bimg);
	        param.setQuality(0.2F, true);
	        jpegImageEncoder.encode(bimg, param);
```


----------



## Pacman92 (17. Aug 2010)

So habe jetzt alle Probleme gelöst. Falls es noch jemanden braucht ein reines schwaz/weiß JPEG habe ich mit folgendem Befehl erzeugt:

```
kbimg=new BufferedImage(zwimg.getWidth(null),zwimg.getHeight(null), BufferedImage.TYPE_BYTE_BINARY);
```

Nochmal danke an alle für eure Hilfe


----------

