Hey Guys,

I'm trying to create a Dynamic Header in the pdf page based on the user
whose data is being displayed on the pdf page. But for some reasons header
displays the data for last user only on each page.

That means  onEndPage is getting fired at the end of the document and not at
the end of each page.

I've modified one of the example from iText in Action book to display how
I'm trying to setup the header.

Here is the Example.

import java.awt.Color;
import java.io.FileOutputStream;
import java.io.IOException;

import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.Rectangle;
import com.lowagie.text.Document;
import com.lowagie.text.pdf.PdfPageEventHelper;

import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.PageSize;
import com.lowagie.text.Phrase;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import com.lowagie.text.pdf.PdfWriter;

/**
 * This example was written by Bruno Lowagie. It is part of the book 'iText
in
 * Action' by Manning Publications.
 * ISBN: 1932394796
 * http://www.1t3xt.com/docs/book.php
 * http://www.manning.com/lowagie/
 */

public class PdfPTableRepeatHeader {

    public static void main(String[] args) {
        System.out.println("Chapter 6: example PdfPTableRepeatHeader");
        System.out.println("-> Creates a PDF file with a large PdfPTable.");
        System.out.println("-> jars needed: iText.jar");
        System.out.println("-> resulting PDF: pdfptable_repeated.pdf");

        // step 1: creation of a document-object
        Document document = new Document(PageSize.A4.rotate());

        try {
            // step 2:
            // we create a writer that listens to the document and directs a
PDF-stream to a file
            PdfWriter wWriter= PdfWriter.getInstance(document,new
FileOutputStream("pdfptable_repeated.pdf"));

            EndPageEvent eEvent = new EndPageEvent();
            eEvent.setDateRange("01/01/2007 - 12/31/2008");

            wWriter.setPageEvent(eEvent);

            // step 3: we open the document
            document.open();
            // step 4: we add a table to the document
            PdfPTable datatable = new PdfPTable(10);
            int headerwidths[] = { 10, 24, 12, 12, 7, 7, 7, 7, 7, 7 };
            datatable.setWidths(headerwidths);
            datatable.setWidthPercentage(100);
            datatable.getDefaultCell().setPadding(5);

            // The header starts with a cell that spans 10 columns
            PdfPCell cell = new PdfPCell(new Phrase(
                    "Administration - System Users Report", FontFactory
                            .getFont(FontFactory.HELVETICA, 24,
Font.BOLD)));
            cell.setHorizontalAlignment(Element.ALIGN_CENTER);
            cell.setBorderWidth(2);
            cell.setColspan(10);
            cell.setBackgroundColor(new Color(0xC0, 0xC0, 0xC0));
            cell.setUseDescender(true);
            datatable.addCell(cell);

            // We need 4 cells with rowspan 2
            datatable.getDefaultCell().setBorderWidth(2);
            datatable.getDefaultCell().setHorizontalAlignment(
                    Element.ALIGN_CENTER);
            datatable.addCell("User Id");
            datatable.addCell("Name\nAddress");
            datatable.addCell("Company");
            datatable.addCell("Department");

            // we use a nested table to fake this
            PdfPTable permissions = new PdfPTable(6);
            permissions.getDefaultCell().setBorderWidth(2);
            permissions.getDefaultCell().setHorizontalAlignment(
                    Element.ALIGN_CENTER);
            permissions.getDefaultCell().setColspan(6);
            permissions.addCell("Permissions");
            permissions.getDefaultCell().setColspan(1);
            permissions.addCell("Admin");
            permissions.addCell("Data");
            permissions.addCell("Expl");
            permissions.addCell("Prod");
            permissions.addCell("Proj");
            permissions.addCell("Online");
            PdfPCell permission = new PdfPCell(permissions);
            permission.setColspan(6);
            datatable.addCell(permission);

            // this is the end of the table header
            // as far as PdfPTable is concerned there are 2 rows in the
header
            datatable.setHeaderRows(2);

            // we add the data to the table
            datatable.getDefaultCell().setBorderWidth(1);
            for (int i = 1; i < 70; i++) {
                //Set a value in the EventHandler class, this value will be
used to set the header.
                eEvent.setTranDisplayValue("XXX : "+i);
                datatable.getDefaultCell().setHorizontalAlignment(
                        Element.ALIGN_LEFT);
                datatable.addCell("myUserId");
                datatable
                        .addCell("Somebody with a very, very, very, very,
very, very, very, very, very, very, very, very, very, very, very, very,
very, very, very, very, very, very, very, very, very, very, very, very,
very, very, very long long name");
                datatable.addCell("No Name Company");
                datatable.addCell("D" + i);
                datatable.getDefaultCell().setHorizontalAlignment(
                        Element.ALIGN_CENTER);
                for (int j = 0; j < 6; j++)
                    datatable.addCell(Math.random() > .5 ? "Yes" : "No");
            }

            datatable.setSplitLate(false);
            document.add(datatable);
        } catch (DocumentException de) {
            System.err.println(de.getMessage());
        } catch (IOException ioe) {
            System.err.println(ioe.getMessage());
        }

        // step 5: we close the document
        document.close();
    }
}

class EndPageEvent extends PdfPageEventHelper {
    private String DateRange=null;
  private String DisplayValue=null;

  public void setDateRange(String sDateRange) {
      this.DateRange=sDateRange;
  }

  public void setTranDisplayValue(String sDisplayValue) {
      this.DisplayValue=sDisplayValue;
    System.out.println("Display Value : "+sDisplayValue);
  }

  public void onEndPage(PdfWriter writer, Document document) {

      System.out.println("onEndPage called...");

    Rectangle page = document.getPageSize();

    Font font = FontFactory.getFont("SERIFE", BaseFont.WINANSI, 10,
Font.BOLD);

    if(writer.getPageNumber()>1) {
      PdfPTable head = new PdfPTable(new float[] {30,70});

      PdfPCell pdfCell = null;
      pdfCell = new PdfPCell(new Phrase("Date Range: "+DateRange,font));
      pdfCell.setHorizontalAlignment(Element.ALIGN_LEFT);
      pdfCell.setVerticalAlignment(Element.ALIGN_TOP);
      pdfCell.setBorderWidth(0);

      head.addCell(pdfCell);

      pdfCell = new PdfPCell(new Phrase(DisplayValue,font));
      pdfCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
      pdfCell.setVerticalAlignment(Element.ALIGN_TOP);
      pdfCell.setBorderWidth(0);

      head.addCell(pdfCell);

      head.setTotalWidth(page.getWidth() - document.leftMargin() -
document.rightMargin());

      head.writeSelectedRows(0, -1, document.leftMargin(),
              page.getHeight() - document.topMargin() +
head.getTotalHeight(),
              writer.getDirectContent());
    }

    PdfPCell pdfCell = null;

    pdfCell = new PdfPCell(new Phrase(String.valueOf( writer.getPageNumber()
), font ));
    pdfCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
    pdfCell.setBorderWidth(0);

    PdfPTable foot = new PdfPTable(1);
    foot.addCell(pdfCell);

    foot.setTotalWidth(page.getWidth() - document.leftMargin() -
document.rightMargin());

    foot.writeSelectedRows(0, -1, document.leftMargin(),
               document.bottomMargin(),
               writer.getDirectContent());

  }
}

Please help me in understanding what I'm doing wrong.

Thanks very much for your time.
------------------------------------------------------------------------------
This SF.net email is sponsored by:
SourcForge Community
SourceForge wants to tell your story.
http://p.sf.net/sfu/sf-spreadtheword
_______________________________________________
iText-questions mailing list
iText-questions@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/itext-questions

Buy the iText book: http://www.1t3xt.com/docs/book.php

Reply via email to