cadev wrote:
> 
> I am using page events to add a header to a pdf document.  The header
> contains a PdfPTable.  I would like to add a String containing a page
> number to the last row of the PdfPTable.  However, when I initialize the
> PdfPTable (in setPageHeader), the page number does not exist yet -- it
> only exists in the "onEndPage" method.  How can I put the page number in
> the PdfPTable?
> 

For anyone who is interested, here was my eventual solution.  I invite
anyone to critique my method and come up with a similar solution that is not
so round-about.

public class ComplexHeader extends PdfPageEventHelper {

  private PdfPTable pdfHeaderTable;
        private float pdfHeaderPadding = 0;
        private float headerDataHeight = 0;
        private float hNumberedTableHeight = 0;
        private Phrase headerNumberedPhrase = null;
        
  public ComplexHeader() {
        ; //Do nothing, just initialize the object
  }
  
  public void setPageHeader (PdfPTable iHeaderTable, String numberedString,
Font font, Document document) {
        pdfHeaderTable = new PdfPTable(iHeaderTable);
        pdfHeaderTable.setTotalWidth(document.right() - document.left());
        headerDataHeight = pdfHeaderTable.getTotalHeight();
        if (font == null)
                font = new Font(Font.TIMES_ROMAN, 10, Font.BOLD);
        headerNumberedPhrase = new Phrase(numberedString, font);
        if (!headerNumberedPhrase.isEmpty()) {
                PdfPTable pdfNumberedTable = new PdfPTable(1);
                
pdfNumberedTable.getDefaultCell().setBorder(Rectangle.NO_BORDER);
                pdfNumberedTable.getDefaultCell().setUseAscender(true);
                pdfNumberedTable.getDefaultCell().setUseBorderPadding(true);
                Phrase headerPhraseWithNumber = new 
Phrase(headerNumberedPhrase);
                headerPhraseWithNumber.add(" 999"); //This is just to figure 
out table
size, and there will probably never be a page number >999
                PdfPCell headerCell = new 
PdfPCell(pdfNumberedTable.getDefaultCell());
                headerCell.setPhrase(headerPhraseWithNumber);
                headerCell.setHorizontalAlignment(Element.ALIGN_CENTER);
                pdfNumberedTable.addCell(headerCell);
                pdfNumberedTable.setTotalWidth(document.right() - 
document.left());
                hNumberedTableHeight = pdfNumberedTable.getTotalHeight();
        }
        document.setMargins(document.leftMargin(), document.rightMargin(),
(document.topMargin() + headerDataHeight + hNumberedTableHeight +
pdfHeaderPadding), document.bottomMargin());
  }
  
        public void onEndPage(PdfWriter writer, Document document) {
                PdfContentByte cb = writer.getDirectContent();
                if (pdfHeaderTable != null) {   
                        pdfHeaderTable.writeSelectedRows(0, -1, 
document.left(), document.top() +
hNumberedTableHeight + headerDataHeight + pdfHeaderPadding, cb);
                        if (!headerNumberedPhrase.isEmpty()) {
                                PdfPTable pdfNumberedTable = new PdfPTable(1);
                                
pdfNumberedTable.getDefaultCell().setBorder(Rectangle.NO_BORDER);
                                
pdfNumberedTable.getDefaultCell().setUseAscender(true);
                                
pdfNumberedTable.getDefaultCell().setUseBorderPadding(true);
                                Phrase headerPhraseWithNumber = new 
Phrase(headerNumberedPhrase);
                                headerPhraseWithNumber.add(" " + 
writer.getPageNumber());
                                PdfPCell headerCell = new 
PdfPCell(pdfNumberedTable.getDefaultCell());
                                headerCell.setPhrase(headerPhraseWithNumber);
                                
headerCell.setHorizontalAlignment(Element.ALIGN_CENTER);
                                pdfNumberedTable.addCell(headerCell);
                                pdfNumberedTable.setTotalWidth(document.right() 
- document.left());
                                pdfNumberedTable.writeSelectedRows(0, -1, 
document.left(),
document.top() + hNumberedTableHeight + pdfHeaderPadding, cb);
                        }
                }
        }
        
}


-- 
View this message in context: 
http://itext-general.2136553.n4.nabble.com/Add-a-page-number-to-a-PdfPTable-tp2233494p2233999.html
Sent from the iText - General mailing list archive at Nabble.com.

------------------------------------------------------------------------------

_______________________________________________
iText-questions mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/itext-questions

Buy the iText book: http://www.itextpdf.com/book/
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