Boa noite pessoal! Estou fazendo relatórios com java + mySql + Itext…e quando o banco de dados tem poucos registros roda muito bem, mas quando coloco um banco de dados com mais de mil registros a primeira página fica em branco e os dados aparecem somente a partir da segunda página. é como se fosse impresso na primeira página os dados na cor branca. o resto do formulário roda certo…Alguém já teve um problema estúpido destes? abaixo o código que estou utilizando
Obs: os dados da segunda página em diante estão corretos.
/*
- Writed by Cleber Angelo Ransolin
- Last edition 11/07/2019 21:20
- Impressão de lista de clientes
- FINALIZADO em
*/
package relatorios;
import com.itextpdf.text.BaseColor;
import java.io.FileOutputStream;
import java.io.IOException;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfWriter;
import java.awt.Desktop;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import static util.Funcao.pegaDataToString;
import static util.Funcao.pegaHora;
public class PrintRC1 {
/** Path to the resulting PDF file. */
public static final String RESULT = javax.swing.filechooser.FileSystemView.getFileSystemView().getHomeDirectory().toString();
public static File file= new File(RESULT+"\\Lista de Clientes.PDF");
public static String CHAVE;
public static String DATAINICIAL;
public static String DATAFINAL;
/** Cria um PDF file de acordo com a nota
* @param args no arguments needed
* @throws com.itextpdf.text.DocumentException
* @throws java.io.IOException */
public static void main(String[] args) throws DocumentException, IOException {
new PrintRC1().createPdf(file.toString());
}
/**
* Creates a PDF document.
* @param filename the path to the new PDF document
* @throws DocumentException
* @throws IOException
*/
public void createPdf(String filename) throws DocumentException, IOException {
Connection con=null;
PreparedStatement pst=null;
ResultSet rs=null;
//Abre novo documento
Document document = new Document();
document.setPageSize(PageSize.A4);
PdfWriter.getInstance(document, new FileOutputStream(filename));
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
document.open();
try {
//Conecta o banco de dados
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/MySql","root","nativa");
String sqlSelect="SELECT codigo "
+ "FROM Clientes "
+ "ORDER BY codigo";
pst=con.prepareStatement(sqlSelect);
rs=pst.executeQuery();
rs.beforeFirst();
//Adiciona o logotipo
Image image1 = Image.getInstance("C:\\SAN\\LOGO\\machado.jpg");
image1.scaleAbsolute(120, 90);
image1.setAbsolutePosition(10, 720);
document.add(image1);
//Insere paragrafo
Paragraph p = new Paragraph();
document.add(p);
//Desenha a borda
pintaBorda(10, 692,584,20,writer);
//Monta o cabeçalho
FixText("Fulano de Tal Ltda",120,775,writer,18,"Bold");
FixText("Rua , bairrro",120,760,writer,12,"");
FixText("Cidade - Estado. CEP xxxx-xxx ",120,744,writer,12,"");
FixText("Telefone xxxx-xxxx",120,728,writer,12,"");
int cont=0;
int linha=660;
int pag=1;
int limite=46; //quant. de linhas da primeira pagina
FixText("LISTA DE CLIENTES",10,697,writer,16,"Bold");
FixText("____________________________________________________________________",10,675,writer,14,"");
cabecalho(675,writer);
int registros=0;
while(rs.next()){
registros ++;
if((registros % 2)==0){ //imprime fundo zebrado
PdfContentByte contentBytex = writer.getDirectContent();
Rectangle rectangle3 = new Rectangle(11,linha-2,583,linha+11);
rectangle3.setBackgroundColor(new BaseColor(245,255,255));
contentBytex.rectangle(rectangle3);
}
FixText(String.format("%4s", rs.getString(1)).replace(' ', '0'),12,linha,writer,11,"");
linha=linha-14;
cont=cont+1;
if(cont==limite){
rodape(writer); //imprime o rodape
pag=pag+1; //contador de pagina
if(pag>1){
limite=54; //limita 58 linhas por pagina
linha=775; //inicia na segunda página a partir da posiçao da linha
cont=0; //zera contador de linha
document.newPage(); //adiciona nova pagina
cabecalho(linha+20,writer); //imprime o cabeçalho
rodape(writer); //imprime rodapé
pintaBorda(10, 810,584,20,writer); //desenha a borda
FixText("____________________________________________________________________",10,790,writer,14,"");
}
}
}
} catch (SQLException ex) {
Logger.getLogger(PrintRC1.class.getName()).log(Level.SEVERE, null, ex);
}
//Fecha o documento
document.close();
//Abre o PDF gerado
if (file.toString().endsWith(".pdf"))
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + file);
else {
Desktop desktop = Desktop.getDesktop();
desktop.open(file);
}
}
//cabeçalho
private void cabecalho(int lines,PdfWriter writer){
FixText("CÓDIGO",13,lines,writer,11,"Bold");
FixText("CLIENTE",70,lines,writer,11,"Bold");
FixText("TELEFONE",400,lines,writer,11,"Bold");
FixText("TELEFONE",500,lines,writer,11,"Bold");
}
//Rodapé
private void rodape(PdfWriter writer){
FixText("Relatório impresso por nome do usuario em " + pegaDataToString()+" "+pegaHora(),12,12,writer,8,"");
FixText("Pag. "+ writer.getCurrentPageNumber(),550,12,writer,8,"");
}
//Desenha a borda
private void pintaBorda(int x, int y, int w, int h, PdfWriter writer) {
PdfContentByte contentByte = writer.getDirectContent();
contentByte.setColorStroke(BaseColor.DARK_GRAY);
com.itextpdf.text.Rectangle rectname = new com.itextpdf.text.Rectangle(x,y,w,h);
rectname.setBorder(com.itextpdf.text.Rectangle.BOX);
rectname.setBorderWidth(0.05F);
contentByte.rectangle(rectname);
}
//Configura o texto
private static void FixText(String text, int x, int y,PdfWriter writer,int size,String bold) {
BaseFont bf=null;
PdfContentByte cb = writer.getDirectContent();
try {
if(bold.equals("Bold")){
bf = BaseFont.createFont(BaseFont.COURIER_BOLD, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
}else{
bf = BaseFont.createFont(BaseFont.COURIER, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
}
} catch (DocumentException | IOException ex) {
Logger.getLogger(PrintClientes.class.getName()).log(Level.SEVERE, null, ex);
}
cb.saveState();
cb.beginText();
cb.moveText(x, y);
cb.setFontAndSize(bf, size);
cb.showText(text);
cb.endText();
cb.restoreState();
}
}