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