javafooteritextpdf

How to make a footer in generating a pdf file using an itextpdf


I have been searching the net on how to make or set a footer using itextpdf in java. and up until now i havent found anything on how to do it. I have seen some articles on how to use and set a header. but not footers. here's a sample code

Document document = new Document(PageSize.LETTER);

Paragraph here = new Paragraph();
Paragraph there = new Paragraph();

Font Font1 = new Font(Font.FontFamily.HELVETICA, 9, Font.BOLD);

here.add(new Paragraph("sample here", Font1));
there.add(new Paragraph("sample there", Font1));
//footer here 

document.add(here);
document.add(there);
document.add(footer);

Solution

  • For implementing Header and footer you need to implement a HeaderFooter class that extends
    PdfPageEventHelper class of iText API. Then override the onEndPage() to set header and footer. In this example I am settingname in header and 'page mumber` in footer.

    In pdf creation side code you need to use HeaderAndFooter class like this:

        Document document = new Document(PageSize.LETTER);
        PdfWriter writer = PdfWriter.getInstance(document, "C:\sample.pdf");
        //set page event to PdfWriter instance that you use to prepare pdf
        writer.setPageEvent(new HeaderAndFooter(name));
        .... //Add your content to documne here and close the document at last
    
        /*
         * HeaderAndFooter class
         */
        public class HeaderAndFooter extends PdfPageEventHelper {
    
        private String name = "";
    
    
        protected Phrase footer;
        protected Phrase header;
    
        /*
         * Font for header and footer part.
         */
        private static Font headerFont = new Font(Font.COURIER, 9,
                Font.NORMAL,Color.blue);
    
        private static Font footerFont = new Font(Font.TIMES_ROMAN, 9,
                Font.BOLD,Color.blue);
    
    
        /*
         * constructor
         */
        public HeaderAndFooter(String name) {
            super();
    
            this.name = name;
    
    
            header = new Phrase("***** Header *****");
            footer = new Phrase("**** Footer ****");
        }
    
    
        @Override
        public void onEndPage(PdfWriter writer, Document document) {
    
            PdfContentByte cb = writer.getDirectContent();
    
            //header content
            String headerContent = "Name: " +name;
    
            //header content
            String footerContent = headerContent;
            /*
             * Header
             */
            ColumnText.showTextAligned(cb, Element.ALIGN_LEFT, new Phrase(headerContent,headerFont), 
                    document.leftMargin() - 1, document.top() + 30, 0);
    
            /*
             * Foooter
             */
            ColumnText.showTextAligned(cb, Element.ALIGN_RIGHT, new Phrase(String.format(" %d ", 
                    writer.getPageNumber()),footerFont), 
                    document.right() - 2 , document.bottom() - 20, 0);
    
        }
    
    }
    

    Hope it helps. I had used this in one of the allication.