Java + iText = preveliki PDF-ovi

poruka: 7
|
čitano: 3.619
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
neaktivan
offline
Java + Itext = preveliki pdfovi

Pozdrav,

imam problema sa generiranjem pdfova sa Itextom. Generirani pdfovi ispadaju
preveliki (previše mb).
U generiranom pdfu nalaze se smo slike. Ukupna veličina slika je 10mb(cca 100 slika) , dok
generirani pdf ispadne preko 50mb.
Na koji način reducirati veličinu konačne pdf datoteke?

Primjer kako generiram.

doc = new Document(new Rectangle(600, 800),0,0,0,0);
doc.setMarginMirroring(true);
PdfWriter.getInstance(doc, new FileOutputStream(output + "\\" +
pdfname.getText() + ".pdf"));doc.open()
img2 = com.itextpdf.text.Image.getInstance(imgs[i],null);img2.setAlignmen(com.itextpdf.text.Image.ALIGN_CENTER);
doc.add(img2);
doc.close();


Naravno nisam navodio sve deklaracije i petlje korz koje slike konvertiram..

Uglavnom princip je da imam polje slika (BufferedImage) iz kojeg izvalcim
sliku i pretvaram je com.itextpdf.text.Image te dodajem u pdf dokument.

 

 

EDIT:

Molim moderatora da preimenuje u naslovu teme "prefeliki pdfovoci" u "preveliki pdfovi". Brzoplet sam :(

Poruka je uređivana zadnji put pon 20.9.2010 18:19 (ranGO).
 
0 0 hvala 0
17 godina
moderator
online
RE: Java + Itext = preveliki pdfovi

A to polje slika - polje kakvih slika je to? Jesu to JPEG-ovi ili PNG-ovi? Jer ako nisu, to bi objasnjavalo problem!

 

Ja sam probao ovako:

 

        Document document=new Document();
        PdfWriter.getInstance(document,new FileOutputStream("c:/pdf/imagesPDF.pdf"));
        document.open();

        Image image = com.itextpdf.text.Image.getInstance("c:/pdf/DSC08722.JPG");
        image.setAlignment(com.itextpdf.text.Image.ALIGN_CENTER);
        image.scalePercent(12);

        Image image2 = com.itextpdf.text.Image.getInstance("c:/pdf/DSC08704.JPG");
        image2.setAlignment(com.itextpdf.text.Image.ALIGN_CENTER);
        image2.scalePercent(12);
       
        document.add(new Paragraph("Roseindia nesto"));
        document.add(image);
        document.add(image2);
       
        document.close();       
        System.out.println("gotovo");

 

S ovime dobijem PDF koji je velicine (9077 kB) prakticki iste kao te dvije slike (4560 kB + 4516 kB). Ako vec brljas po slikama (a ne da ih ucitavas onakvima kakve jesu), onda iskoristi metodu slika.setCompressionLevel(compressionLevel). I nije mi jasna ova linija u tvom kodu:

 

img2 = com.itextpdf.text.Image.getInstance(imgs[i],null);

 

Sto tu radi taj null? Meni ga NetBeans uopce ne da napisati - odmah dobijem crveni usklicnik. U cemu radis? Probaj NetBeans - u dosta slucajeva ce te sprijeciti da pises neispravan kod vec kod upisivanja koda.

17 godina
neaktivan
offline
RE: Java + Itext = preveliki pdfovi

 

Polje slika je polje BufferedImage, jpgovi koji su prethondo ucitani u polje, slike splitale na dva dijela i resizane te se dodaju u pdf.

 

Ako te splitane slike zapisem na disk (ImageIO.write(imgs[i], new File (path + ".jpg")) imaju imaju cca 10mb (120km). Ako ih dodam u pdf onda on ima 50mb.

 

com.itextpdf.Image img2 = com.itextpdf.text.Image.getInstance(imgs[i],null); - null oznacava parametar konstuktora color.

Nepostoji metoda da samo prima polje slika ukoliko je  img2 instanca klase com.itextpdf.Image

 

Inace radim u Eclipseu.

 

Metodom setCompressionLevel(9); dobim cca 10% manji pdf, još uvijek preveliko.

 

Ne bih baš volio prvo obrađene slike zapisati na disk pa ih ponovno dodavati u pdf kada su vec u memoriji.

17 godina
neaktivan
offline
RE: Java + Itext = preveliki pdfovi

Ukoliko obrađenu sliku prije zapišem na disk pa sa diska dodam u pdf onda pdf zauzima 9mb.

 

Dakle rijesio sam tako da prvo spremim sliku na disk ko temp file, pa sa diska doadajem u pdf i nakon toga brišem taj tem file. Postupak ponavaljam dok sve stranice nisu u pdfu.

 

Nije bas najbolje riješenje, kada nađem vremena poigrat ću se više sa time.

17 godina
moderator
online
RE: Java + Itext = preveliki pdfovi

Mislim da je stvar jednostavno u tome da ti iz klase BufferedImage on izvuce nekomprimirani sadrzaj, odnosno sadrzaj BufferedImage objekta ne procita kao JPEG. Mozda da ti img2 bude objekt klase com.itextpdf.text.Jpeg? Mada nekako sumnjam da ce ti to pomoci.

 

Sam si skuzio da kad sliku spremis na disk pomocu objekta ImageIO, da je onda sve u redu. Pazi foru - ImageIO ne mora spremiti sliku u datoteku na disku, nego je moze "spremiti" i u radnu memoriju (dakle, output stream ne mora biti hard disk, nego moze biti i recimo memorijski byte array output stream) - a to je upravo ono sto tebi treba. Ovdje ces nacin konretni primjer:

http://forums.sun.com/thread.jspa?threadID=5450698&tstart=0

 

A mogla bi ti pomoci i ova stranica: http://mindprod.com/jgloss/imageio.html

 

http://discussion.forum.nokia.com/forum/showthread.php?108882-image-gt-byte-array-gt-image

Poruka je uređivana zadnji put sri 22.9.2010 21:52 (mbaksa).
17 godina
neaktivan
offline
RE: Java + Itext = preveliki pdfovi
mbaksa kaže...

Mislim da je stvar jednostavno u tome da ti iz klase BufferedImage on izvuce nekomprimirani sadrzaj, odnosno sadrzaj BufferedImage objekta ne procita kao JPEG. Mozda da ti img2 bude objekt klase com.itextpdf.text.Jpeg? Mada nekako sumnjam da ce ti to pomoci.

 

Sam si skuzio da kad sliku spremis na disk pomocu objekta ImageIO, da je onda sve u redu. Pazi foru - ImageIO ne mora spremiti sliku u datoteku na disku, nego je moze "spremiti" i u radnu memoriju (dakle, output stream ne mora biti hard disk, nego moze biti i recimo memorijski byte array output stream) - a to je upravo ono sto tebi treba. Ovdje ces nacin konretni primjer:

http://forums.sun.com/thread.jspa?threadID=5450698&tstart=0

 

A mogla bi ti pomoci i ova stranica: http://mindprod.com/jgloss/imageio.html

 

 

Dobra je fora zapisa u radnu memoriju. Budem se pozabavio sa time.

 

Uglavnom radim programičić koji "optimizira" sigurnosnu kopiju stripova za pregled na kindlu.

 

http://www.bug.hr/forum/topic/programiranje/jkindlecomic-program/69467.aspx

 

 

17 godina
moderator
online
RE: Java + Itext = preveliki pdfovi
ranGO kaže...
Dobra je fora zapisa u radnu memoriju. Budem se pozabavio sa time.

Provjeri jos i ovo: http://forums.sun.com/thread.jspa?threadID=386264

 

ranGO kaže...

Uglavnom radim programičić koji "optimizira" sigurnosnu kopiju stripova za pregled na kindlu.

 

http://www.bug.hr/forum/topic/programiranje/jkindlecomic-program/69467.aspx

Fora! Osmijeh

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice