Pessoal estou fazendo um relatorio dinamicamente com o JasperReport mais não aparece nada
Veja o código
JasperDesign
private JasperDesign getJasperDesign(List<JFreeChart> freesCharts)
throws JRException {
JasperDesign design = new JasperDesign();
design.setName("RelatorioGraficoSimilaridade");
design.setPageWidth(1100);
design.setPageHeight(600);
design.setColumnCount(1);
design.setColumnWidth(540);
design.setColumnSpacing(0);
design.setLeftMargin(0);
design.setRightMargin(0);
design.setTopMargin(0);
design.setBottomMargin(0);
JRDesignBand titulo = new JRDesignBand();
titulo.setHeight(70);
JRDesignStaticText staticText = new JRDesignStaticText();
staticText.setX(170);
staticText.setY(18);
staticText.setWidth(300);
staticText.setHeight(32);
staticText.setFontName("Tahoma");
staticText.setPdfFontName("Helvetica-Bold");
staticText.setFontSize(24);
staticText.setBold(true);
staticText.setHorizontalAlignment(HorizontalAlignEnum.CENTER);
staticText.setText("Relatório Grafico Similaridade");
titulo.addElement(staticText);
design.setTitle(titulo);
JRDesignBand colunaCabecalho = new JRDesignBand();
JRDesignBand detalhe = new JRDesignBand();
for (int i = 0; i < freesCharts.size(); i++) {
JRDesignParameter parametro = new JRDesignParameter();
String nomeParametro = i + "imagem";
parametro.setName(nomeParametro);
parametro.setValueClass(java.awt.Image.class);
design.addParameter(parametro);
JRDesignImage image = new JRDesignImage(design);
image.setX(100);
image.setY(0);
image.setHeight(151);
image.setWidth(201);
JRDesignExpression expression = new JRDesignExpression();
expression.setValueClass(Image.class);
expression.setText("$P{" + nomeParametro + "}");
image.setExpression(expression);
detalhe.setHeight(200);
detalhe.addElement(image);
}
design.setColumnHeader(colunaCabecalho);
design.setDetail(detalhe);
return design;
}
gerarRelatorio
public void gerarRelatorio() {
ServletOutputStream ouputStream = null;
List<JFreeChart> freesCharts = this.gerarGraficos(); (Obs: este metodo gera as imagens corretas pois ja fiz teste unitario)
try {
JasperDesign desenho = getJasperDesign(freesCharts);
JasperReport relatorio = JasperCompileManager.compileReport(desenho);
Map<String,Object> parametro = new HashMap<String,Object>();
for (int i = 0 ; i < freesCharts.size(); i++) {
Image imagem = freesCharts.get(i).createBufferedImage(200, 150);
String nomeParametro = i+"imagem";
parametro.put(nomeParametro, imagem);
}
JasperPrint relatorioFinal = JasperFillManager.fillReport(relatorio, parametro);
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
response.setContentType("application/pdf");
response.addHeader("Content-Disposition","attachment; filename=RelatorioGraficoSimilaridade.pdf");
ouputStream = response.getOutputStream();
JRPdfExporter exporterPdf = new JRPdfExporter();
exporterPdf.setParameter(JRPdfExporterParameter.JASPER_PRINT, relatorioFinal);
exporterPdf.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, ouputStream);
exporterPdf.exportReport();
facesContext.responseComplete();
ouputStream.flush();
} catch (IOException ex) {
ex.printStackTrace();
} catch (JRException ex) {
ex.printStackTrace();
} finally {
if (ouputStream != null) {
try {
ouputStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
Pessoal o relatório apenas gera um folha em branco , nem o título ele está gerando, alguem sabe o que pode ser?
Desta ja agradeço
Olá
Difícil dizer algo sem debugar…
Não dá nenhum erro no console?
Verificou se o DataSource esta com algum dado
furutani primeiramente quero agradecer por estar me ajudando,
Bom já debuguei, não da nenhum erro no console, como você pode ver não tenho datasourse, pois o relatório tem somente o Título e uma imagem que é passada por parâmetro,
Debugando o que eu pude perceber é que essa imagem realmente existe quando passada no parâmetro, é ele chega gerar o relatório, porem gera em branco sem nada. nem o titulo aparece.
Talvez pode ser alguma coisa de posicionamento mais não faço mínima idéia de como arrumar isso.
Obrigado
Só reforçando, fui fazer um teste para abrir direto no jasperviw
Coloquei JasperView jv = new JasperView(jasperPrint);
ai da a seguinte menssagem
“O documento não contem páginas” e abre vazio.
Ja descobri o que é,é uma coisa mtu “ridícula”, acredita que vc temque mandar um dataSource com algum objeto na lista do dataSource… mesmo que vc não vai usar, vc temque mandar se não, não funciona
[quote=erickfm8]Ja descobri o que é,é uma coisa mtu “ridícula”, acredita que vc temque mandar um dataSource com algum objeto na lista do dataSource… mesmo que vc não vai usar, vc temque mandar se não, não funciona
[/quote]
Na verdade não é bem isso…
Vc pode usar sem datasource; basta ir na aba ‘Propriedades’ do seu relatório e na opção ‘When no Data’ selecionar ‘All Sections,no Detail’
Amigo eu não estou usando o IReport, estou usando o JasperReport, estou criando o relatório dinamicamente, estou criando o XML dinamicamente pelo java, assim não existe esta opção.
Obrigado
Olá
Acho que você se esqueceu de configurar a banda no data, para casos em que o Datasource está vazio
Dá uma olhada nesse link http://www.furutani.com.br/2010/06/relatorio-dinamico-com-jasperdesign/
na linha 115
Eu não sei como que faz para fazer o ajuste citado por raf4ever, mas 99% de chance de existir uma forma de fazer isso programaticamente.
Outro problema agora, é o seguinte
veja meu jasperDesign
private JasperDesign getJasperDesign(List<JFreeChart> freesCharts)
throws JRException {
JasperDesign design = new JasperDesign();
design.setPageWidth(500);
design.setPageHeight(1000);
design.setColumnCount(1);
design.setColumnWidth(450);
design.setColumnSpacing(0);
design.setLeftMargin(10);
design.setRightMargin(10);
design.setBottomMargin(5);
design.setTopMargin(5);
design.setName("RelatorioGraficoSimilaridade");
JRDesignBand titulo = new JRDesignBand();
titulo.setHeight(35);
JRDesignStaticText staticText = new JRDesignStaticText();
staticText.setX(75);
staticText.setY(5);
staticText.setWidth(310);
staticText.setHeight(25);
staticText.setFontName("Tahoma");
staticText.setPdfFontName("Helvetica-Bold");
staticText.setFontSize(18);
staticText.setBold(true);
staticText.setHorizontalAlignment(HorizontalAlignEnum.CENTER);
staticText.setText("Relatório Grafico Similaridade");
titulo.addElement(staticText);
design.setTitle(titulo);
JRDesignBand colunaCabecalho = new JRDesignBand();
JRDesignBand detalhe = new JRDesignBand();
Integer top = 10;
Integer heigthDetalhe = 200;
for (int i = 0; i < freesCharts.size(); i++) {
JRDesignParameter parametro = new JRDesignParameter();
String nomeParametro = i + "imagem";
parametro.setName(nomeParametro);
parametro.setValueClass(java.awt.Image.class);
design.addParameter(parametro);
JRDesignImage image = new JRDesignImage(design);
image.setX(115);
image.setY(top);
image.setHeight(175);
image.setWidth(240);
JRDesignExpression expression = new JRDesignExpression();
expression.setValueClass(Image.class);
expression.setText("$P{" + nomeParametro + "}");
image.setExpression(expression);
top = top + 190;
heigthDetalhe = heigthDetalhe + 200;
detalhe.setHeight(heigthDetalhe);
detalhe.addElement(image);
}
design.setColumnHeader(colunaCabecalho);
design.setDetail(detalhe);
return design;
}
Eu não sei quantas imagens eu vou colocar no relatório, assim tenho que inserir varias e ir aumentado o top da imagem e o heigth da band detalhe o problema é que a band detalhe só vai até uma certa quantia, ai gera o ERRO :
net.sf.jasperreports.engine.design.JRValidationException: Report design not valid :
1. The detail section, the page and column headers and footers and the margins do not fit the page height.
at net.sf.jasperreports.engine.design.JRAbstractCompiler.verifyDesign(JRAbstractCompiler.java:258)
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:140)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:215)
at br.com.documentacao.faces.SimilarityFace.gerarRelatorio(SimilarityFace.java:251)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.apache.el.parser.AstValue.invoke(AstValue.java:172)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:387)
at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:329)
at org.ajax4jsf.component.AjaxViewRoot.broadcastEventsForPhase(AjaxViewRoot.java:304)
at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:261)
at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:474)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.com.documentacao.util.AuthenticationFilter.doFilter(AuthenticationFilter.java:32)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
at java.lang.Thread.run(Unknown Source)
O que fazer, alguem poderia me dar uma “luz”
Obrigado
furutani enquanto o datasoruce vazia, depois vou verificar ve se existe alguma forma programatica de fazer isto.
Obrigado
[quote=erickfm8]Amigo eu não estou usando o IReport, estou usando o JasperReport, estou criando o relatório dinamicamente, estou criando o XML dinamicamente pelo java, assim não existe esta opção.
Obrigado[/quote]
Mas qual a vantagem disso?
Não existe vantagem, é que muitas vezes agente PRECISA fazer isto, veja meu exemplo.
Eu não sei quantas imagens eu vou colocar no relatório isto so vai ser resolvido em tempo de execução, assim sou OBRIGADO a criar sua imagens em tempo de execução.
[quote=erickfm8]Não existe vantagem, é que muitas vezes agente PRECISA fazer isto, veja meu exemplo.
Eu não sei quantas imagens eu vou colocar no relatório isto so vai ser resolvido em tempo de execução, assim sou OBRIGADO a criar sua imagens em tempo de execução.[/quote]
Entendi.Não havia lido o requisito direito 
Acho que pra não exceder o tamanho da banda detalhe vc vai ter que usar sub-relatórios
Olá
EU acho que no seu caso era possível trabalhar sem ser dinâmico. Bastava por a imagem na band details e passar as imagens como datasource, que o próprio jasper fazia a paginação conforme a quantidade de imagens no datasource.
Mas desse jeito que você está fazendo funciona, mas vai ter um trampinho para ajustar o tamanho do relatório
Olá estou precisando fazer alguns relatórios dinamicamente, mas no meu caso eu preciso passar via parametros, pelo o que entendi preciso adicionar a classe
JasperDesign no iReport e criar os parâmetros, alguem ja conseguiu fazer o iReport enxergar essa classe?