Hello again!

On Thu, 27 Apr 2006, Paulo Soares wrote:

It can't be done in a reliable way without changing the library. I'll get back to you next week with some kind of solution.

I was just wondering if you (or anyone) had got around to this? It is clear that you have no shortage of questions from this list though, so I'll be patient.

Thanks,

Petter

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On
Behalf Of Petter Nyström
Sent: Thursday, April 27, 2006 12:15 PM
To: [email protected]
Subject: RE: [iText-questions] Far cry for help with JPEG in PDF

On Mon, 17 Apr 2006, Paulo Soares wrote:

You shouldn't be messing with PRStream. Create a new PdfStream with the right filters to replace the old PRStream. Don't forget to kill the old PRStream with PdfReader.killIndirect().

I have been pondering this and trying to do things the right way as hinted at by Paulo Soares, but I haven't managed to get it working out. The code I have that works (but requires a hack in the iText library in its full version) looks something like this in a very condensed form:

     void foo (PRStream image)
     {
         File file = new File("someimage.cmyk");
         FileInputStream stream = new FileInputStream(file);
         byte[] data = new byte[file.length()];

         stream.read(data, 0, file.length());
         image.setData(data);
     }

If I am not to mess with the PRStream but instead make a new PdfStream, my problem revolves around how to set up the new PdfStream in a manner so it has all the properties of the old one. I can copy the PdfDictionary values easily enough, but I also need to make sure it has the same positions etc. within the document. Since the one and only thing I wish to do is really to replace the stream data, the suggested solution seems like a lot more work to me. Work that I can't even get right at the moment. But I still want to do this "the right way" and absolutely don't want to resort to hacking the iText library. So I am interested in how to set up this new PdfStream object in such a way that it will completely replace the old one. Answers are appreciated, as usual.

Regards,

Petter Nyström

P.S. I see how a few same people answer dozens of questions on this list every day, and I would just like to say that your efforts are noticed and greatly appreciated! =) D.S.

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On
Behalf Of Petter Nyström
Sent: Monday, April 17, 2006 1:14 PM
To: [email protected]
Subject: Re: [iText-questions] Far cry for help with JPEG in PDF

It seems my problem is indeed with that setData() uses some sort of compression filter on the data, which is not desirable when dealing with JPEG. I added a simple method setDataRaw() in com/lowagie/text/pdf/PRStream.java like this:

     public void setDataRaw (byte[] data)
     {
         this.offset = -1;
         bytes = data;
         setLength(bytes.length);
     }

And calling this instead of setData() when dealing with JPEG fixes my problem. What I am asking for now is, I guess, if there are any official way of achieving the same effect as I have with my method. (I see that this result is also achieved with setData() if the Document.compression field is false, but I'm not sure that is the correct way either.) Because I don't really want to make my own changes in the iText library since that makes upgrading so much more difficult in the future.

Any word on this?

Regards,

Petter Nyström

On Mon, 17 Apr 2006, Petter Nyström wrote:

Good evening list!

This problem might not have anything to do with Itext as such. It's mostly a cry out to see if anyone on this list have an idea for a solution to my problem. I hope that is okay.

My problem then, is this: I extract images from PDF documents using Itext. Sometimes, this is a JPEG/JFIF image. (I treat any image with a DCTDecode filter as a JPEG. Is that incorrect?) I then convert extracted images into TIFF and perform some image processing before they are turned back into their internal PDF format, e.g. JPEG or raw CMYK etc.. The image format conversions are made with the ImageMagick API.

I then proceed to replace the data of the images in the PDF with the data of the images that has gone through conversion and image processing. For this I use the setData() method in the PRStream object of the images I find in the PDF, and a PdfStamper to write a new PDF.

The unfortunate result is that JPEG images in the new PDF document appear garbled, while other image formats I have been working with come through fine.

My premier theory to explain this is that the JPEG image generated by ImageMagick is somehow not compatible with what is standard within the PDF. So while ImageMagick can make sense out of a JPEG come from a PDF, a PDF cannot make sense out of a JPEG come from ImageMagick.

My secondary theory is that there could be some problem with how I do the replacement. Should I have to apply some filters to the data before I call the setData() method?

Obviously I have tried a whole lineup of approaches but always with the same dissapointing result. So this mail is a hope that someone out there has a clue as to what might go wrong and what one might do to stop it from doing so. If you have one such clue, please let me know of it!

Regards,

Petter Nyström


-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid0709&bid&3057&dat1642
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions

Reply via email to