@ResourcepublicclassRelatoriosController{privatefinalOLDaoolDao;privatefinalEnderecoDaoenderecoDao;publicRelatoriosController(OLDaoolDao,EnderecoDaoenderecoDao){this.olDao=olDao;this.enderecoDao=enderecoDao;}@Get@Path("/relatoriosController/propostaLocacao/{ol.id}/proposta")publicInputStreamDownloadpropostaLocacao(OLol)throwsMalformedURLException,IOException{finalint[]COLUMNWIDTHS={7,7,35,10,10};Integerseq=0;floatvalorTotal=0;NumberFormatnumberFormat=NumberFormat.getInstance(newLocale("pt","BR"));numberFormat.setMinimumFractionDigits(2);LocalDatedt=newLocalDate();Font[]fonts=newFont[6];fonts[0]=FontFactory.getFont(FontFactory.HELVETICA,Font.DEFAULTSIZE,Font.NORMAL);fonts[1]=FontFactory.getFont(FontFactory.HELVETICA,20,Font.NORMAL);fonts[2]=FontFactory.getFont(FontFactory.HELVETICA,15,Font.NORMAL);fonts[3]=FontFactory.getFont(FontFactory.HELVETICA,10,Font.NORMAL);fonts[4]=FontFactory.getFont(FontFactory.HELVETICA,8,Font.NORMAL);fonts[5]=FontFactory.getFont(FontFactory.HELVETICA,Font.DEFAULTSIZE,Font.BOLD);ByteArrayOutputStreamoutputStream=newByteArrayOutputStream();Documentdocument=newDocument();try{PdfWriter.getInstance(document,outputStream);document.open();// colocar aqui a lógica e formatação do relatório: document.add(????);}catch(DocumentExceptionde){System.err.println(de.getMessage());}document.close();StringcontentType="application/pdf";StringfileName="relatorio.pdf";InputStreamdocumentInput=newByteArrayInputStream(outputStream.toByteArray());returnnewInputStreamDownload(documentInput,contentType,fileName,true,outputStream.toByteArray().length);}
E é só.
A documentação do iText é muito boa e tem muitos exemplos.
A versão atual do iText é a 5.01, mas me parece que não está estável. Estou usando a 2.1.7.
Espero que isso te atenda. Qualquer dúvida é só perguntar.
L
lico
Lagaffe,
Por favor me dê uam ajudinha a mais, tipo assim tenho um arquivo jasper posso passar ele pra esse modelo que você me mandou??? e eu posso usar sem passar parametros porq é uma lista de alunos por exemplo segue o codigo abaixo:
Controller
@Get@Path("/relatorio/alunos")publicInputStreamDownloadrelatorioAlunos()throwsMalformedURLException,IOException,DocumentException{finalint[]COLUMNWIDTHS={7,7,35,10,10};Integerseq=0;floatvalorTotal=0;NumberFormatnumberFormat=NumberFormat.getInstance(newLocale("pt","BR"));numberFormat.setMinimumFractionDigits(2);// LocalDate dt = new LocalDate();Font[]fonts=newFont[6];fonts[0]=FontFactory.getFont(FontFactory.HELVETICA,Font.DEFAULTSIZE,Font.NORMAL);fonts[1]=FontFactory.getFont(FontFactory.HELVETICA,20,Font.NORMAL);fonts[2]=FontFactory.getFont(FontFactory.HELVETICA,15,Font.NORMAL);fonts[3]=FontFactory.getFont(FontFactory.HELVETICA,10,Font.NORMAL);fonts[4]=FontFactory.getFont(FontFactory.HELVETICA,8,Font.NORMAL);fonts[5]=FontFactory.getFont(FontFactory.HELVETICA,Font.DEFAULTSIZE,Font.BOLD);ByteArrayOutputStreamoutputStream=newByteArrayOutputStream();Documentdocument=newDocument();try{PdfWriter.getInstance(document,outputStream);document.open();document.getClass().getClassLoader().getResourceAsStream("br/com/catequese/relatorio/alunos.jasper");// colocar aqui a lógica e formatação do relatório: document.add(????);}catch(DocumentExceptionde){System.err.println(de.getMessage());}document.close();StringcontentType="application/pdf";StringfileName="relatorio.pdf";InputStreamdocumentInput=newByteArrayInputStream(outputStream.toByteArray());returnnewInputStreamDownload(documentInput,contentType,fileName,true,outputStream.toByteArray().length);}
Não tenho nenhuma experiência com Jasper. Estava começando a estudar quando achei o iText. Achei o iText muito mais simples e atende por enquanto o que preciso. Inclusive o Jasper usa classes do iText (e vários outros geradores de relatórios).
Minha sugestão é de que você converta tudo para iText ou use as dicas do Lucas.
achei o seguinte na internet para criar um InputStream a partir de um arquivo compilado:
InputStream is = this.getClass().getClassLoader().getResourceAsStream(“jasper/” + jasperName);
Uma pergunta básica preciso criar um jsp pra abrir o pdf?
se preciso criar que dados eu colocaria porq na verdade ele abriria no acrobat ou estou equivocado?
agradeço a ajuda
Lucas_Cavalcanti
se vc fizer só isso ele vai tentar mostrar no browser o pdf…
no InputStreamDownload, vc pode passar um boolean de doDownload… se ele for true, o browser vai abrir uma caixa de download, se for false o browser vai tentar mostrar
L
lico
Lucas
Bom dia!
Andei vendo o erro acontece neste código.
Ele imprime o primeiro System.out.print
o segundo ele não imprime
o erro eu acredito que esteja na passagem do arquivo porq estou colocando um teste no codigo e ele diz que o arquivo não existe, veja o caminho do arquivo como estou passando
publicInputStreamDownloadrelAlunos()throwsJRException,SQLException,ClassNotFoundException{Stringfile="/br/com/catequese/relatorio/codigoBarra.jasper";Filearq=newFile(file);//Verificando se o arquivo é existenteif(arq.exists()){// se arquivo existirSystem.out.println("Arquivo existe");}else{System.out.println("Arquivo nao existe");}ByteArrayOutputStreamos=newByteArrayOutputStream();JasperRunManager.runReportToPdfStream(getClass().getClassLoader().getResourceAsStream(file),os,newHashMap(),getConexao());System.out.println("Arquivo pdf aqui");InputStreamdocument=newByteArrayInputStream(os.toByteArray());returnnewInputStreamDownload(document,"Content-Disposition","attachment; filename=codigoBarra.pdf",true,os.toByteArray().length);}
Me ajude por favor
Lucas_Cavalcanti
new File(file) é diferente do …getResourceAsStream(file)
no new File, a ‘/’ no começo significa a partir da raiz do seu sistema operacional (c:\ no windows, / no unix)… já no getResourceAsStream é a partir do classpath…
jasperReport=JasperCompileManager.compileReport(caminhoDoRelatorio);jasperPrint=JasperFillManager.fillReport(jasperReport,newHashMap(),conn.getConexao());byte[]oRelatorio=JasperExportManager.exportReportToPdf(jasperPrint);///Faz conversao byte[] para InputStreamInputStreamarquivo=newByteArrayInputStream(oRelatorio);returnnewInputStreamDownload(arquivo,"application/pdf","relatorio.pdf");
L
lico
Lucas,
Boa Tarde!
Mais uma vez fomos fechando os caminhos pra solução.
Pensei o seguinte em pegar versão mais recente do itext, jasper e common digest.
E era isso acredita resolveu o problema, menos mal.