Ciao
anche io ho perso non poco tempo per la numerazione delle pagine poi ho trovato una soluzione e per ora sta funzionando alla perfezione. in pratica mi creo una inner class che estende PdfPageEventHelper:
	codice:
	
//inner class per la numerazione delle pagine
    class TableHeader extends PdfPageEventHelper {
        /** The header text. */
        String footer;
        /** The template with the total number of pages. */
        PdfTemplate total;
        
        /**
         * Allows us to change the content of the header.
         * @param header The new header String
         */
        public void setFooter(String footer) {
            this.footer = footer;
        }
        /**
         * Creates the PdfTemplate that will hold the total number of pages.
         * @see com.itextpdf.text.pdf.PdfPageEventHelper#onOpenDocument(
         *      com.itextpdf.text.pdf.PdfWriter, com.itextpdf.text.Document)
         */
        @Override
        public void onOpenDocument(PdfWriter writer, Document document) {
            total = writer.getDirectContent().createTemplate(30, 16);
        }
        
        @Override
        public void onEndPage(PdfWriter writer, Document document) {
            try {                
                String dataOdierna = (new SimpleDateFormat("dd.MM.yyyy")).format(new Date());
                // Footer
                Rectangle page = document.getPageSize();                                               
                Image img = Image.getInstance(total);
                PdfPTable footTable = new PdfPTable(3);
                footTable.setWidths(new int[]{24, 24, 2});
                footTable.getDefaultCell().setBorder(Rectangle.TOP);
                PdfPCell cell;
                cell= uit.getCell(new Phrase(""),3,0,"","");
                cell = uit.getCellBorderBottom(cell, BaseColor.BLACK, 2f);
                cell.setFixedHeight(20);
                cell.setVerticalAlignment(18);
                footTable.addCell(cell);           
                PdfPCell cell1 = new PdfPCell(new Phrase("intestazione- " +
                        "esportazione del: " + dataOdierna, small));
                cell1.setBorder(Rectangle.NO_BORDER);
                PdfPCell cell2 = new PdfPCell(img);
                cell2.setBorder(Rectangle.NO_BORDER);
                
                footTable.addCell(cell1);
                String s = String.format("Page %d of", writer.getPageNumber()+1);
                PdfPCell cell3 = new PdfPCell(new Phrase(s,small));
                cell3.setHorizontalAlignment(Element.ALIGN_RIGHT);
                cell3.setBorder(Rectangle.NO_BORDER);
                cell3.setPaddingTop(Element.ALIGN_TOP-1);
                footTable.addCell(cell3);
                footTable.addCell(cell2);
                footTable.setTotalWidth(page.getWidth() - document.leftMargin()
                        - document.rightMargin());
                footTable.writeSelectedRows(0, -1, document.leftMargin(), 
                        document.bottomMargin(), writer.getDirectContent());
            }
            catch(DocumentException de) {
                throw new ExceptionConverter(de);
            }
        }
        @Override
        public void onCloseDocument(PdfWriter writer, Document document) {
            ColumnText.showTextAligned(total, Element.ALIGN_LEFT,
                    new Phrase(String.valueOf(writer.getPageNumber()),small),
                    Element.ALIGN_LEFT, Element.ALIGN_MIDDLE, 0);
        }
    }
//di seguito il metodo che crea il pdf (si trova nella stessa classe)
Document document = null;
PdfWriter writer = null; 
try{
   .....
   document = new Document();
   writer = PdfWriter.getInstance(document, new FileOutputStream(path2 + "/file.pdf"));
   TableHeader event = new TableHeader();
    writer.setPageEvent(event);
    document.open();
    ..............
 
Funziona con l'ultima versione della libreria