I think I have not explained the problem properly.

The String I have, let´s call it inputString, has the following content:

             %PDF-1.2
             %âãÏÓ
             3 0 obj
             <<
             /Linearized 1
             ... (etc)

(looks similar to the content you see when opening a PDF with notepad,
ultraedit, notepad++, etc)

If I construct a PdfReader the following way:

             PdfReader reader = new PdfReader(inputString.getBytes());

it works fine, it opens it, seems no extra transformation is required.
Then I manipulate the file (add the watermark as I have mentioned
before) and write the resulting PDF to the browser, but it looks
exactly like the original one. But the content of the original and
final PDF documents are a little different (the size of the
manipulated document is bigger).

It seems that the watermark is somehow added, and the document
structure is not damaged (otherwise, it wouldn´t load), but something
is wrong. And it has to be related to the transformation between the
inputString and its corresponding byte array.

I´ve tryed to encode the inputString to a Base64 char array, but it is
not the solution. I think this because an exception is throwed when
trying to construct the PdfReader object with the encoded String,
thing that did't happen if I don´t encode the String:

07/11/15 12:33:53 java.io.IOException: PDF header signature not found.
07/11/15 12:33:53 at com.lowagie.text.pdf.PRTokeniser.checkPdfHeader
07/11/15 12:33:53 at com.lowagie.text.pdf.PdfReader.readPdf
07/11/15 12:33:53 at com.lowagie.text.pdf.PdfReader.<init>

So, the steps should be (and in my code are, in fact):

- transform the inputString in a byte[] to construct the PdfReader
- construct the PdfReader
- add the watermark (works ok starting from a PdfReader)
- read the resulting ByteArrayOutputStream (from the PdfStamper
associated to the PdfReader) and transforming it back to a String
(with toString)

What do I miss?

Excuse me for so many questions, I think it must be a detail (because
I´ve done the same with pdf files).
Adriano.

2007/11/15, Adriano Leite Ribero <[EMAIL PROTECTED]>:
> Do you mean I have to encode my string (having the pdf content
> "%PDF-1.2......") as a base64 char[] and construct the PdfReader
> object passing that char[] as a parameter? (I have to check it, but I
> think PdfReader(char[]) wasn`t a valid constructor...).
>
> Again, lot of thanks for your time,
> Adriano.
>
> 2007/11/15, Paulo Soares <[EMAIL PROTECTED]>:
> > The problem is that PDF are binary. If you must pass it as a string encoded 
> > it first as base64 and decode it before delivering it to PdfReader.
> >
> > Paulo
> >
> > > -----Original Message-----
> > > From: [EMAIL PROTECTED]
> > > [mailto:[EMAIL PROTECTED] On
> > > Behalf Of Adriano Leite Ribero
> > > Sent: Thursday, November 15, 2007 8:47 AM
> > > To: itext-questions@lists.sourceforge.net
> > > Subject: [iText-questions] Watermark on a pdf wich is
> > > embedded in a browser
> > >
> > > Hi,
> > >
> > > I am trying to add some watermark to a pdf document. I've followed
> > > correctly the example of the file "AddWatermarkPageNumbers.java" from
> > > "http://itextdocs.lowagie.com/tutorial/general/copystamp/index.php";,
> > > and it works properly. I have made some changes to fit the method in
> > > that java file to my purpose without problems, and renamed the method
> > > in it as "addWaterMark", so my method preWaterMark1, which calls it,
> > > works fine:
> > >
> > >   public static void preWaterMark1(String nameOriginalFile, String
> > > text, String image, String nameOutputFile) {
> > >         try {
> > >             PdfReader reader = new PdfReader(nameOriginalFile);
> > >             PdfStamper stamp = new PdfStamper(reader, new
> > > FileOutputStream(nameOutputFile));
> > >             addWaterMark(reader, stamp, text, image);
> > >         } catch (Exception e){
> > >           System.out.println("MarcaDeAgua.preWaterMark ->
> > > Excepción: " + e);
> > >         }
> > >     }
> > >
> > >   private static void addWaterMark(PdfReader reader, PdfStamper stamp,
> > > String text, String image){... /*works ok*/}
> > >
> > >
> > >   The problem is that i need to do the same with pdf documents that
> > > are not files, they are just in the browser. I start from a String
> > > having the content of a document of that kind, and, following the same
> > > steps I've written preWaterMark2, which uses the same method to write
> > > the watermark. But what I get is just the pdf without any visible
> > > changes, I can´t see any watermark. But I know the String having the
> > > content of the pdf document has changed.
> > >
> > >   public static String preWaterMark2(String pdfContent, String text,
> > > String image){
> > >       ByteArrayOutputStream baos = new ByteArrayOutputStream();
> > >       try {
> > >           PdfReader reader = new
> > > PdfReader(pdfContent.getBytes("ISO-8859-1"));
> > >           PdfStamper stamp = new PdfStamper(reader, baos);
> > >           addWaterMark(reader, stamp, text, image);
> > >       } catch (Exception de){
> > >           de.printStackTrace();
> > >       }
> > >       String ret = "";
> > >       try{
> > >         if (baos.toString()!= null)
> > >           ret = baos.toString();
> > >       } catch (Exception e){
> > >         System.out.println("MarcaDeAgua.preWaterMark -> Excepción: " +
> > > e.getMessage());
> > >         e.printStackTrace();
> > >       }
> > >       return ret;
> > > }
> > >
> > > I guess the problem could be related to the transforming process
> > > between the String having the PDF content and the byte[] with the same
> > > data. I have tryed to change the "ISO-8859-1", but it keeps on showing
> > > me a PDF without any watermark.
> > >
> > > Does anybody know what could be the problem?
> > >
> > > Lot´s of thanks,
> > > Adriano.
> >
> >
> > Aviso Legal:
> > Esta mensagem é destinada exclusivamente ao destinatário. Pode conter 
> > informação confidencial ou legalmente protegida. A incorrecta transmissão 
> > desta mensagem não significa a perca de confidencialidade. Se esta mensagem 
> > for recebida por engano, por favor envie-a de volta para o remetente e 
> > apague-a do seu sistema de imediato. É proibido a qualquer pessoa que não o 
> > destinatário de usar, revelar ou distribuir qualquer parte desta mensagem.
> >
> > Disclaimer:
> > This message is destined exclusively to the intended receiver. It may 
> > contain confidential or legally protected information. The incorrect 
> > transmission of this message does not mean the loss of its confidentiality. 
> > If this message is received by mistake, please send it back to the sender 
> > and delete it from your system immediately. It is forbidden to any person 
> > who is not the intended receiver to use, distribute or copy any part of 
> > this message.
> >
> > -------------------------------------------------------------------------
> > This SF.net email is sponsored by: Splunk Inc.
> > Still grepping through log files to find problems?  Stop.
> > Now Search log events and configuration files using AJAX and a browser.
> > Download your FREE copy of Splunk now >> http://get.splunk.com/
> > _______________________________________________
> > iText-questions mailing list
> > iText-questions@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/itext-questions
> > Buy the iText book: http://itext.ugent.be/itext-in-action/
> >
>

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
iText-questions mailing list
iText-questions@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/itext-questions
Buy the iText book: http://itext.ugent.be/itext-in-action/

Reply via email to