boa tarde pessoal
estou tentando imprimir os dados que estão em uma jtable ate ai tudo bem estou usando o codigo abaixo
/* * To change this template, choose Tools | Templates * and open the template in the editor. */packageView;importjava.awt.Color;importjava.awt.Graphics;importjava.awt.Graphics2D;importjava.awt.print.PageFormat;importjava.awt.print.Printable;importjava.awt.print.PrinterException;importjava.awt.print.PrinterJob;importjavax.swing.JOptionPane;importjavax.swing.JTable;/** * Classe que imprime uma JTable * * @author Guilherme I. Keller TODO - Uma melhor explicacao & comentarios. */publicclassImprimirJTableimplementsPrintable{privateJTabletabela;privatePrinterJobprinterJob;privateGraphicsgraphics;privateGraphics2Dgraphics2d;/** * Metodo construtor da classe * * @param tabela Uma JTable a ser impressa */publicImprimirJTable(JTabletabela){this.tabela=tabela;printerJob=printerJob.getPrinterJob();printerJob.setPrintable(this);printerJob.setJobName("Imprimindo uma JTable");if(printerJob.printDialog()){try{printerJob.print();}catch(PrinterExceptionex){JOptionPane.showMessageDialog(null,"Ocorreu um erro durante a impressão. \n"+ex.toString(),"Erro do Sistema",JOptionPane.ERROR_MESSAGE);}}}/** * Metodo responsavel pela impressao da JTable */publicintprint(Graphicsg,PageFormatpageFormat,intpageIndex)throwsPrinterException{graphics2d=(Graphics2D)g;graphics2d.setColor(Color.black);intfontHeight=graphics2d.getFontMetrics().getHeight();intfontDesent=graphics2d.getFontMetrics().getDescent();// leave room for page number doublepageHeight=pageFormat.getImageableHeight()-fontHeight;doublepageWidth=pageFormat.getImageableWidth();doubletableWidth=(double)tabela.getColumnModel().getTotalColumnWidth();doublescale=1;if(tableWidth>=pageWidth){scale=pageWidth/tableWidth;}doubleheaderHeightOnPage=tabela.getTableHeader().getHeight()*scale;doubletableWidthOnPage=tableWidth*scale;doubleoneRowHeight=(tabela.getRowHeight()+tabela.getRowMargin())*scale;intnumRowsOnAPage=(int)((pageHeight-headerHeightOnPage)/oneRowHeight);doublepageHeightForTable=oneRowHeight*numRowsOnAPage;inttotalNumPages=(int)Math.ceil(((double)tabela.getRowCount())/numRowsOnAPage);if(pageIndex>=totalNumPages){returnNO_SUCH_PAGE;//No more pages }graphics2d.translate(pageFormat.getImageableX(),pageFormat.getImageableY());graphics2d.translate(0f,headerHeightOnPage);graphics2d.translate(0f,-pageIndex*pageHeightForTable);// If this piece of the table is smaller than the size available, // clip to the appropriate bounds. if(pageIndex+1==totalNumPages){intlastRowPrinted=numRowsOnAPage*pageIndex;intnumRowsLeft=tabela.getRowCount()-lastRowPrinted;graphics2d.setClip(0,(int)(pageHeightForTable*pageIndex),(int)Math.ceil(tableWidthOnPage),(int)Math.ceil(oneRowHeight*numRowsLeft));}// else clip to the entire area available. else{graphics2d.setClip(0,(int)(pageHeightForTable*pageIndex),(int)Math.ceil(tableWidthOnPage),(int)Math.ceil(pageHeightForTable));}graphics2d.scale(scale,scale);tabela.paint(graphics2d);graphics2d.scale(1/scale,1/scale);graphics2d.translate(0f,pageIndex*pageHeightForTable);graphics2d.translate(0f,-headerHeightOnPage);graphics2d.setClip(0,0,(int)Math.ceil(tableWidthOnPage),(int)Math.ceil(headerHeightOnPage));graphics2d.scale(scale,scale);tabela.getTableHeader().paint(graphics2d);// paint header at top returnPrintable.PAGE_EXISTS;// continues printing }}// e acho assimnewImprimirJTable(tblTabelaFinalizaCompra);
Não seria melhor você organizar um relatório com iReport?
Lá você pode deixar visualmente da forma que quiser(acredito ser assim, ainda não usei mas li a respeito)… e exportar para alguns formatos…
G
guimarques1987
eu tentei fazer com iReport sera que vc teria algum exemplo de como enviar os dados de uma tabela sem precisar conectar com o banco por a tabela porque os dados que eu quero ja carrega na tabela
Arthur_F_Ferreira
Você pode passar uma lista como fonte de dados. Já que você faz essa consulta e já tem uma lista com os dados, você passa ela como source na hora em que você usa o seu jasper.
G
guimarques1987
como eu faço isso sou novato em java
Arthur_F_Ferreira
Como você disse que tentou antes usar o iReport, mas não conseguiu trabalhar com a lista como datasource, eu vou resumir:
O que vc não conseguiu entender exatamente? O post está bastante mastigadinho. Explica desde a criação do arquivo no iReport até a utilização dele num código java.
G
guimarques1987
desculpe eu não tinha carregado a pagina e eu não tinha visto o link vou dar uma olhada
System.out.println("Gerando relatório...");// lista com os nossos clientes // List lista = new ArrayList();try{JasperReportreport=JasperCompileManager.compileReport("../Relatorio/RelatorioClientes.jrxml");// lista = listaUsuario;JasperPrintprint=JasperFillManager.fillReport(report,null,newJRBeanCollectionDataSource(listaUsuario));JasperExportManager.exportReportToPdfFile(print,"Relatorio/RelatorioClientes.pdf");System.out.println("Relatório gerado.");}catch(JRExceptionex){Logger.getLogger(JfrmFinalizarCompra.class.getName()).log(Level.SEVERE,null,ex);}
Isso significa que a classe Digester não existe no seu classpath. Alguma classe do iReport a utiliza para fazer o que tem de ser feito. Você precisa adicioná-la ao seu projeto: