Let's see:

- HeaderFooter is not supported anymore.
- You can't call Document methods in page events.
- The way to set headers and footer is through page events

This is documented everywhere.

Paulo

> -----Original Message-----
> From: Jeffrey White [mailto:[email protected]] 
> Sent: Tuesday, July 07, 2009 2:56 PM
> To: [email protected]
> Subject: [iText-questions] Setting document header more than 
> once causes unusual problems
> 
> Hello, and thank you for taking time to analyze this problem.
> 
> I am trying to create a pdf file where multiple images of 
> documents are translated onto the pages.  I am having a 
> problem where setting the header with document.setHeader() 
> multiple times is causing the header to become distorted 
> after calling the method more than once, shrinking and 
> automatically moving the alignment to the left corner of the 
> document.  I am not sure why, and after looking through the 
> forums and documentation I did not come across potential 
> problems that would make this occur.  I have also tried 
> moving where the header is set to muliple places, getting the 
> same effect.  If you can offer any insight, it would be 
> highly appreciated.
> 
> Below is the code that I am using to generate the pdf.  To 
> clarify some points that might not be apparent, the array 
> docURLs contains the locations of tiff images to be converted 
> into the pdf; there is also a loop for masking certain parts 
> of the document that contain sensitive information.  There 
> are potentially multiple pages to each document, which is 
> taken care of in another loop.
> 
> Thank you.
> 
> 
> import java.util.StringTokenizer;
> 
> import java.io.FileOutputStream;
> 
> import com.lowagie.text.Document;
> import com.lowagie.text.Element;
> import com.lowagie.text.Font;
> import com.lowagie.text.HeaderFooter;
> import com.lowagie.text.Image;
> //import com.lowagie.text.Paragraph;
> import com.lowagie.text.Phrase;
> 
> import com.lowagie.text.pdf.BaseFont;
> import com.lowagie.text.pdf.PdfContentByte;
> //import com.lowagie.text.pdf.PdfPCell;
> import com.lowagie.text.pdf.PdfWriter;
> import com.lowagie.text.pdf.RandomAccessFileOrArray;
> import com.lowagie.text.pdf.codec.TiffImage;
> 
> 
> 
> //import com.lowagie.text.ExceptionConverter;
> import com.lowagie.text.Rectangle;
> //import com.lowagie.text.pdf.PdfPTable;
> import com.lowagie.text.pdf.PdfPageEventHelper;
> 
> 
> 
> 
> /**
>  * 
>  *
>  */
> public class PrintHelper extends PdfPageEventHelper  {
> private static String pdfHeader="";
> public static final String CLASSNAME = PrintHelper.class.getName();
> public static void main(String args[])
> {
> generatePDF();
> }
>     /**
>      *...@see 
> com.lowagie.text.pdf.PdfPageEventHelper#onEndPage(com.lowagie.
> text.pdf.PdfWriter, com.lowagie.text.Document)
>      * 
>      */
>     public void onEndPage(PdfWriter writer, Document document) {
>         try {
>          document.setHeader(new HeaderFooter(new 
> Phrase(pdfHeader), false));
>         }
>         catch (Exception e) {
>            
>         }
>     }
> 
>     
>     /**
>      * Generates the pdf
>      */
> public  static void generatePDF () {
> String[] docURLs = new String[2];
> docURLs[0] = "C:/sortedDocs/exampleDoc.TIF";
> docURLs[1] = "C:/sortedDocs/exampleDoc2.TIF";
> try {
> Document document = new Document();
> FileOutputStream out = new FileOutputStream("C://Test.pdf");
> PdfWriter writer = PdfWriter.getInstance(document, out);
> writer.setPageEvent(new PrintHelper());
> int pages = 0;
> RandomAccessFileOrArray ra = null;
> 
> //set up the starting page size and header
> String starturl = docURLs[0];
> try {
> ra = new RandomAccessFileOrArray(starturl);
> }
> catch(Exception e) {
> e.printStackTrace();
> }
> Image startImage = TiffImage.getTiffImage(ra, 1);
> document.setPageSize(new 
> Rectangle(startImage.getScaledWidth(), startImage.getScaledHeight()));
> //set up the header before first page loaded
> String custNo = "test"; //docURLs[0].getCustNo();
> String jobNo = "test"; //docURLs[0].getJobNo();
> String rejected= "A"; //docURLs[0].getDocStatus();
> String docRejected="";
> String role = "";
> if(rejected!=null && rejected.trim().equalsIgnoreCase("R"))   
>     docRejected="DOCUMENT REJECTED  ";
> else if(rejected!=null && 
> rejected.trim().equalsIgnoreCase("A"))  docRejected="DOCUMENT 
> APPROVED  ";
> BaseFont bf_times = BaseFont.createFont(BaseFont.TIMES_ROMAN, 
> "Cp1252", false);
> HeaderFooter header = new HeaderFooter(
> new Phrase(docRejected +"COPY CustNo-"+custNo+" JobNo- 
> "+jobNo, new Font(bf_times,40)), false);
> header.setAlignment(Element.ALIGN_CENTER);
> 
> document.setHeader(header);
> document.open();
> PdfContentByte cb = writer.getDirectContent();
> for(int l = 0 ; l<docURLs.length ;l++ )
> {
> String url1 = docURLs[l];
> String coordinates1 = null;
> int comps = 0;
> try {
> ra = new RandomAccessFileOrArray(url1);
> comps = TiffImage.getNumberOfPages(ra);
> }
> catch (Throwable e) {
> }
> custNo = "test1";
> jobNo = "test1";
> role = null;
> rejected= "A";
> docRejected="";
> if(rejected!=null && rejected.trim().equalsIgnoreCase("R"))   
>     docRejected="DOCUMENT REJECTED  ";
> else if(rejected!=null && 
> rejected.trim().equalsIgnoreCase("A"))  docRejected="DOCUMENT 
> APPROVED  ";
> pdfHeader = docRejected +"COPY CustNo-"+ custNo + " JobNo-"+jobNo;
> if(role==null || role.trim().equalsIgnoreCase(""))
> role="01";
>     try {
>     String coordinates =coordinates1;
>     int locX[] = null;
> int locY[] = null;
> int page[] =  null;
> int scaleX[] =  null;
> int scaleY[] =  null;
> int absX = -10; // Constant relative image positioners
> int absY = 0 ;  // Constant relative image positioners
> if(jobNo ==null || jobNo.trim().equalsIgnoreCase("") || 
> jobNo.trim().equalsIgnoreCase("null")) jobNo="";
> if(custNo==null || custNo.trim().equalsIgnoreCase("") || 
> custNo.trim().equalsIgnoreCase("null")) custNo="";
> if(coordinates!=null && 
> !coordinates.trim().equalsIgnoreCase("") && 
> !coordinates.trim().equalsIgnoreCase("null")){
> StringTokenizer t = new StringTokenizer(coordinates,";",false);
> int size = t.countTokens();
> locX = new int[size];
> locY = new int[size];
> page = new int[size];
> scaleX = new int[size];
> scaleY = new int[size];
> absX = -10; // Constant relative image positioners
> absY = 0 ;  // Constant relative image positioners
> int k = 0;
> while(t.hasMoreTokens()) {
> String s = t.nextToken();
> StringTokenizer n = new StringTokenizer(s,",");
> if(n.hasMoreTokens()){
> s = n.nextToken();
> locX[k] = Integer.parseInt(s.trim());
> }
> if(n.hasMoreTokens()){
> s = n.nextToken();
> locY[k] = Integer.parseInt(s.trim());
> }
> if(n.hasMoreTokens()){
> s = n.nextToken();
> scaleX[k] = Integer.parseInt(s.trim());
> }
> if(n.hasMoreTokens()){
> s = n.nextToken();
> scaleY[k] = Integer.parseInt(s.trim());
> }
> if(n.hasMoreTokens()){
> s = n.nextToken();
> page[k] = Integer.parseInt(s.trim());
> }
> k++;
> }
> }
> Image img2 = TiffImage.getTiffImage(ra, 1);
> //document.setPageSize(new Rectangle(img2.getScaledWidth(), 
> img2.getScaledHeight()));
> for (int c = 0; c < comps; ++c) {
> try {
> Image img = TiffImage.getTiffImage(ra, c + 1);
> if(coordinates!=null && 
> !coordinates.trim().equalsIgnoreCase("") && 
> !coordinates.trim().equalsIgnoreCase("null") && 
> !role.trim().equalsIgnoreCase("02")){
> byte maskr[] = new byte[16384];
> for (int w = 0; w < 16384; ++w)
> maskr[w] = -1;
> for(int i=0;i<scaleX.length;i++) {
> if(page[i]==c+1){
> for(int f =locX[i] ;f<=locY[i];f++){
> for(int s=f*64+scaleX[i] ;s<=f*64+scaleY[i] ;s++){
> maskr[s]=0;
> }
> }
> Image mask = Image.getInstance(512,256, 1, 1, maskr);
> mask.makeMask();
> mask.setInverted(true);
> img.setImageMask(mask);
> }
> }    
> }
> //img.scalePercent(19);
> if (img != null) {
> absX=(int) (590-img.getScaledWidth());
>                        absY=(int) (790-img.getScaledHeight());
> //img.setAbsolutePosition(absX, absY);
>                        
>                        
> img.scaleToFit(img.getScaledWidth()-70, img.getScaledHeight()-70);
>                        img.setAbsolutePosition(0,0);
>                       
> cb.addImage(img);
> ++pages;  
>  
> document.newPage(); 
> document.setPageSize(new Rectangle(img2.getScaledWidth(), 
> img2.getScaledHeight()));
> } 
> }
> catch (Throwable e) {
> }
> }
> ra.close();
> }catch (Exception e) {
> } 
>  }
> document.close();
> out.flush();
> }
> catch (Exception e) {
> } 
> }   
> 
> }
> 
> 
> 

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.


------------------------------------------------------------------------------
Enter the BlackBerry Developer Challenge  
This is your chance to win up to $100,000 in prizes! For a limited time, 
vendors submitting new applications to BlackBerry App World(TM) will have 
the opportunity to enter the BlackBerry Developer Challenge. See full prize 
details at: http://p.sf.net/sfu/blackberry
_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions

Buy the iText book: http://www.1t3xt.com/docs/book.php
Check the site with examples before you ask questions: 
http://www.1t3xt.info/examples/
You can also search the keywords list: http://1t3xt.info/tutorials/keywords/

Reply via email to