java - iTextPdf not loading Images correctly -


heyo, have problem piece of code:

  private void createpdf(string[] url, string name) throws filenotfoundexception, documentexception, ioexception{     com.itextpdf.text.document document = new com.itextpdf.text.document();     fileoutputstream fos = new fileoutputstream(name);     pdfwriter writer = pdfwriter.getinstance(document, fos);     writer.open();     document.open();     document.setmargins(1, 0, 0, 0);     document.addtitle(name);     document.addsubject(name);     (string url1 : url) {       image = image.getinstance(new java.net.url(url1));       i.scaletofit(document.getpagesize());       document.add(i);       document.newpage();       writer.flush();     }     document.close();     writer.close();   } 

the images jpeg formatted , on server using itext-pdfa-5.5.5 itext-xtra-5.5.5 via maven.

the problem is, pictures not displayed correctly cut in halve. how can prevent happen?

what tried until now:

  • what see above
  • preloading image imageio

both same result.

please me.


okay inserted (with getimage beeing bruno lowagies code below)

  bufferedimage read = imageio.read(new bytearrayinputstream(getimage(new java.net.url(url1))));   imageio.write(read, "jpeg", new file(url1.substring(url1.length()-8, url1.length())));   image = image.getinstance(read, null); 

and files arent downloaded , bottom part of picture seems filled #808080

itext doesn't change singe byte of jpg image. takes bytes receives , puts them inside pdf in stream defining /filter /dctdecode, there should no problem importing jpg images.

however, looking @ code, see expect image object load file url: new java.net.url(url1) , remember people having problems similar yours because inputstream obtained url object wasn't read when url1 wasn't file url, url image on web.

this problem inherent reading inputstreams: image needs read first bytes of inputstream first determine image type, , go start of inputstream read full image.

to work around problem, better read image byte[] first , use byte[] parameter image constructor.

something this:

public byte[] getimage(url url) throws ioexception {     bytearrayoutputstream baos = new bytearrayoutputstream();     inputstream = url.openstream ();     byte[] b = new byte[4096];     int n;     while ( (n = is.read(b)) > -1 ) {         baos.write(b, 0, n);     }     return baos.tobytearray(); } 

and then:

image = image.getinstance(getimage(new java.net.url(url1))); 

i wrote these code snippets without testing. please let me know if work (or update answer if made typos).


Comments

Popular posts from this blog

css - SVG using textPath a symbol not rendering in Firefox -

Java 8 + Maven Javadoc plugin: Error fetching URL -

node.js - How to abort query on demand using Neo4j drivers -