Boa tarde.
Estou tentando gerar um relatório em PDF com o Itext, até ai ok mas quando tento colocar o numero de paginas no rodapé ele só aparece na ultima página. Alguém poderia me ajudar?
Obrigado.
Segue o código:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package gerarpdf;
import com.itextpdf.text.BaseColor;
import java.io.FileOutputStream;
import java.io.IOException;
//import api IText
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Phrase;
import com.itextpdf.text.pdf.ColumnText;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfPageEventHelper;
import com.itextpdf.text.pdf.PdfWriter;
import com.sun.xml.internal.ws.wsdl.writer.document.soap.HeaderFault;
import java.awt.Desktop;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.scene.layout.Border;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
/**
*
* @author ferna
*/
public class TestePDF {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
Document document = new Document();
try{
//pega o nome e pasta do JFileChooser e seta aqui para salvar
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("C:\\Users\\ferna\\Documents\\NetBeansProjects\\GerarPDF\\VisualizarPDF\\visualiza.pdf"));
document.open();
//Muda a cor da fonte
Font font20Preto = new Font(Font.FontFamily.UNDEFINED, 20, Font.NORMAL, BaseColor.BLACK);
Image figura = Image.getInstance("C:\\Users\\ferna\\Documents\\NetBeansProjects\\GerarPDF\\Imagem1.png");
PdfPTable tabela = new PdfPTable(4); //cria uma tabela com 4 colunas
//tabela.setHorizontalAlignment(Element.ALIGN_CENTER);
figura.setAlignment(Element.PARAGRAPH);
document.add(figura);
Paragraph espaço = new Paragraph("\n");
document.add(espaço);
document.add(espaço);
document.add(espaço);
Paragraph titulo = new Paragraph("Relatótio de Clientes", font20Preto);
titulo.setAlignment(Element.ALIGN_CENTER);
document.add(titulo);
document.add(espaço);
document.add(espaço);
PdfPCell contador = new PdfPCell(new Paragraph("Quantidades de pessoas:"));
contador.setColspan(4);
contador.setHorizontalAlignment(Element.ALIGN_RIGHT);
contador.setBorder(PdfPCell.NO_BORDER);
tabela.addCell(contador);
PdfPCell celulaNome = new PdfPCell(new Paragraph("Nome")); //adiciona o paragrafo com o titulo na segunda celula.
celulaNome.setHorizontalAlignment(Element.ALIGN_CENTER); //Alinha no centro
celulaNome.setBackgroundColor(BaseColor.GRAY);
PdfPCell celulaCPF = new PdfPCell(new Paragraph("CPF"));
celulaCPF.setHorizontalAlignment(Element.ALIGN_CENTER); //Alinha no centro
celulaCPF.setBackgroundColor(BaseColor.GRAY);
PdfPCell celulaEmail = new PdfPCell(new Paragraph("Email"));
celulaEmail.setHorizontalAlignment(Element.ALIGN_CENTER); //Alinha no centro
celulaEmail.setBackgroundColor(BaseColor.GRAY);
PdfPCell celulaTelefone = new PdfPCell(new Paragraph("Telefone"));
celulaTelefone.setHorizontalAlignment(Element.ALIGN_CENTER); //Alinha no centro
celulaTelefone.setBackgroundColor(BaseColor.GRAY);
//celula1.setBorder(2); // aqui vc tira as bordas da celula
//celula2.setBorder(2);
tabela.addCell(celulaNome); //aqui adiciona as celulas na tabela.
tabela.addCell(celulaCPF);
tabela.addCell(celulaEmail);
tabela.addCell(celulaTelefone);
String teste [][] = new String[][]{
{"Fernando Mordini","[CPF removido]","[email removido]","(11)9 7746-3287"},
{"Ana Cardoso","[CPF removido]","[email removido]","(51)9 1111-2222"},
{"Marcelo Augusto","[CPF removido]","[email removido]","(12)9 5555-5555"},
};
for(int i=0;i<teste.length;i++){
tabela.addCell(teste[i][0]);
tabela.addCell(teste[i][1]);
tabela.addCell(teste[i][2]);
tabela.addCell(teste[i][3]);
// if(i % 2 == 0){
// }
}
document.add(tabela); // coloca a tabela na pagina do PDF.
Documento dc = new Documento();
Paragraph insere = new Paragraph(dc.exemploLuan);
document.add(insere);
class Rodape extends PdfPageEventHelper { //cria evento para adiciona objetos ao rodapé
Font ffont = new Font(Font.FontFamily.UNDEFINED, 10, Font.ITALIC);
Date dataHoraAtual = new Date();
String data = new SimpleDateFormat("dd/MM/yyyy").format(dataHoraAtual);
String hora = new SimpleDateFormat("HH:mm:ss").format(dataHoraAtual);
Paragraph p = new Paragraph("Data: " + data, ffont);
Paragraph p2 = new Paragraph("Hora: "+ hora, ffont);
Paragraph p1 = new Paragraph("paginas: "+writer.getPageNumber());
@Override
public void onEndPage(PdfWriter writer, Document document) {
PdfContentByte cb = writer.getDirectContent();
Phrase footer = new Phrase();
footer.add(p1);
ColumnText.showTextAligned(cb, Element.ALIGN_CENTER,
footer,
(document.right() - document.left()) / 1 + document.leftMargin(),
document.bottom() - 10, 0);
Phrase footer1 = new Phrase(p);
ColumnText.showTextAligned(cb, Element.ALIGN_CENTER,
footer1,
(document.right() - document.left()) / 20 + document.leftMargin(),
document.bottom() - 10, 0);
Phrase footer2 = new Phrase(p2);
ColumnText.showTextAligned(cb, Element.ALIGN_CENTER,
footer2,
(document.right() - document.left()) / 25 + document.leftMargin(),
document.bottom() - 25, 0);
}
}
Rodape event = new Rodape();
writer.setPageEvent(event); //seta o evento criado para adicionar ao rodapé
}
catch(DocumentException de){
System.err.println(de.getMessage());
}
catch(IOException ioe){
System.err.println(ioe.getMessage());
}
finally{
document.close();
}
try {
//chama o documento ja criado
Desktop.getDesktop().open(new File("C:\\Users\\ferna\\Documents\\NetBeansProjects\\GerarPDF\\VisualizarPDF\\visualiza.pdf"));
} catch (IOException ex) {
Logger.getLogger(TestePDF.class.getName()).log(Level.SEVERE, null, ex);
}
}
}