Thanks a lot for the explanation and for the transformation scheme: "PDF in a String -> decode base64 -> PDF in a byte[] -> use it in PdfReader"
But do you mean that the PDF they give to me, the PDF with the content (I get it with the always used System.out.println method) %PDF-1.1 1 0 obj << /Creator (Developer 2000) /CreatorDate (Thu Nov 15 08:42:50 AM 2007) /Author (Oracle Reports) /Producer (Oracle PDF driver) /Title (52985491.pdf) ... is already base64 encoded? I think it is not encoded, because when I try to decode it I recieve the error "Length of Base64 encoded input string is not a multiple of 4.". So I thing it is an usual String, not an encoded String. And that prevents me from reaching the "PDF in a byte[]" stage form your good "PDF in a String -> decode base64 -> PDF in a byte[] -> use it in PdfReader" step-by-step scheme. Feel sorry for been asking so many questions, Paulo, you are being very helpful to me... 2007/11/15, Paulo Soares <[EMAIL PROTECTED]>: > You have explained the problem properly but you didn't understand the answer. > If you must have a pdf inside a String you MUST code it in some way, for > example base64, to preserve all the bytes. Think of PDF as a JPEG image and > the way to put a JPEG image inside a String. Just because PDF looks like text > in notepad it isn't text. > The process is (for example): > > PDF in a byte[] -> convert to base64 -> PDF in String > PDF in a String -> decode base64 -> PDF in a byte[] -> use it in PdfReader > > Paulo > > > -----Original Message----- > > From: [EMAIL PROTECTED] > > [mailto:[EMAIL PROTECTED] On > > Behalf Of Adriano Leite Ribero > > Sent: Thursday, November 15, 2007 12:11 PM > > To: Post all your questions about iText here > > Subject: Re: [iText-questions] Watermark on a pdf wich is > > embedded in abrowser > > > > 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/