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