Fala galera blz?
Alguem pode me ajudar com relatorios? Preciso gerar alguns relatorios em JSF e nao estou conseguindo alguem tem um exemplo de como fazer um relatorio em pdf no JSF.
Estou usando o JSF 2.0, primefaces e hibernate. Peço a ajuda de voces. abraços.
Douglas,dá uma sacada nesse exemplo,é no JSF 1.2 mas pode te atender:
public void imprimirManual() throws IOException{
try {
ServletContext ctx = (ServletContext) FacesContext
.getCurrentInstance().getExternalContext().getContext();
File f = new File(ctx.getRealPath("/publicacoes/manual2011.pdf"));
HttpServletResponse response = (HttpServletResponse) FacesContext
.getCurrentInstance().getExternalContext().getResponse();
response.setContentType("application/pdf");
response.setHeader("content-disposition",
"attachment;filename=Manual2011.pdf");
byte[]bytes = bytesFromFile(f);
response.setContentLength(bytes.length);
ServletOutputStream servletStream = response.getOutputStream();
servletStream.write(bytes, 0, bytes.length);
servletStream.flush();
servletStream.close();
FacesContext.getCurrentInstance().responseComplete();//NÃO funciona sem essa linha!!
}catch(Exception e){
e.printStackTrace();
}
}
Passando parâmetros:
String path = ctx.getRealPath("/reports/acompanhamento.jasper");
byte[] bytes = JasperRunManager.runReportToPdf(path, parameters,
conn);
[quote]public void imprimirManual() throws IOException{
try {
ServletContext ctx = (ServletContext) FacesContext
.getCurrentInstance().getExternalContext().getContext();
File f = new File(ctx.getRealPath("/publicacoes/manual2011.pdf"));
HttpServletResponse response = (HttpServletResponse) FacesContext
.getCurrentInstance().getExternalContext().getResponse();
response.setContentType(“application/pdf”);
response.setHeader(“content-disposition”,
“attachment;filename=Manual2011.pdf”);
byte[]bytes = bytesFromFile(f);
response.setContentLength(bytes.length);
ServletOutputStream servletStream = response.getOutputStream();
servletStream.write(bytes, 0, bytes.length);
servletStream.flush();
servletStream.close();
FacesContext.getCurrentInstance().responseComplete();//NÃO funciona sem essa linha!!
}catch(Exception e){
e.printStackTrace();
}
} [/quote]
Eu crio uma nova classe, mas onde “chamo” o relatorio do banco? Teria que ser no ireport no caso? Nao entendi muito bem =/
[quote=douglascst90][quote]public void imprimirManual() throws IOException{
try {
ServletContext ctx = (ServletContext) FacesContext
.getCurrentInstance().getExternalContext().getContext();
File f = new File(ctx.getRealPath("/publicacoes/manual2011.pdf"));
HttpServletResponse response = (HttpServletResponse) FacesContext
.getCurrentInstance().getExternalContext().getResponse();
response.setContentType(“application/pdf”);
response.setHeader(“content-disposition”,
“attachment;filename=Manual2011.pdf”);
byte[]bytes = bytesFromFile(f);
response.setContentLength(bytes.length);
ServletOutputStream servletStream = response.getOutputStream();
servletStream.write(bytes, 0, bytes.length);
servletStream.flush();
servletStream.close();
FacesContext.getCurrentInstance().responseComplete();//NÃO funciona sem essa linha!!
}catch(Exception e){
e.printStackTrace();
}
} [/quote]
Eu crio uma nova classe, mas onde “chamo” o relatorio do banco? Teria que ser no ireport no caso? Nao entendi muito bem =/[/quote]
Como assim “chamar” do banco?
Quem dispara o relatório vai ser tua aplicação,crie um h:commandButton que invoca o método.
Nao tinha visto esse codigo
String path = ctx.getRealPath("/reports/acompanhamento.jasper");
byte[] bytes = JasperRunManager.runReportToPdf(path, parameters,
conn);
É aqui que ele chama o relatorio do ireport(jasper). Certo?
[quote=douglascst90]Nao tinha visto esse codigo
String path = ctx.getRealPath("/reports/acompanhamento.jasper");
byte[] bytes = JasperRunManager.runReportToPdf(path, parameters,
conn);
É aqui que ele chama o relatorio do ireport(jasper). Certo?[/quote]
Sim.
:-o
Da uma pesquisada na doc oficial
O proprio primefaces tem um gerador de relatorios PDF nao precisa por mais um framework ai nao amigão
Mas eu preciso de relatorios mais detalhados com dados de varias tabelas, com o componente do prime eu pego uma lista. No meu caso to usando o iReport, que ja esta gerando os relatorios, so preciso chamar ele(esse é o problema). Abraços.
raf4ever estou com problema nessa linha
byte[] bytes = JasperRunManager.runReportToPdf(path, parameters,conn);
em “path”, “parameters” e “conn” não entendi muito bem o que deve por, o qual do parametro???
obrigado.
O problema ainda persiste…