Bom dia a todos!!
Eu criei um RelatorioVendas.jasper, ele foi criado com JasperStudio, ele está pronto, já está com a query, já está compilado, tudo certinho.
Após criar o relatório e compila-lo, coloquei ele dentro do projeto:
Agora eu gostaria, se possível, que alguém me orientasse (passo a passo) o que devo fazer
quais classes tenho que criar? quais arquivos tenho que criar? Onde colocar estes arquivos…e assim por diante…
Grato a todos que puderem ajudar.
Opa. Teve um outro post que vc tinha criado que estava com o código correto para gerar o relatório. Ele não funcionou mais?
@Lucas_Camara
Na verdade eu tinha até esquecido daquele post, mas vamos por partes
eu criei esta classe, lembra dela?
package br.com.fjsistemas.relatorios;
import java.io.InputStream;
import java.util.List;
import org.springframework.stereotype.Component;
import br.com.fjsistemas.backend.Venda;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
@Component
public class GerarRelatorioVenda {
public byte[] gerarRelatorioVendas(List<Venda> lista) throws JRException {
//referencia ao arquivo, carregar no objeto
InputStream fonte = GerarRelatorioVenda.class.getResourceAsStream("/report/RelatorioVendas.jrxml");
//Declarando objeto do tipo JasperReports
JasperReport report = JasperCompileManager.compileReport(fonte);
//preenchendo o relatorio 1º parametro relatorio compilado, 2º null pois não havera imagens no logo, 3º passando a lista transformando-a em um datasource informando qual fonte de dados
//o relatorio vai pegar as informações
JasperPrint print = JasperFillManager.fillReport(report, null, new JRBeanCollectionDataSource(lista));
//exibir
byte[] relatorio = JasperExportManager.exportReportToPdf(print);
return relatorio;
}
}
este código que vc me passou(lembra dele, que vc pegou no site vaadin)
Button downloadButton = new Button("Gerar relatório");
StreamResource myResource = createResource();
FileDownloader fileDownloader = new FileDownloader(myResource);
fileDownloader.extend(downloadButton);
private StreamResource createResource() {
return new StreamResource(new StreamSource() { // aqui vc pode simplificar com lambda: () -> {}
@Override
public InputStream getStream() {
List<Venda> vendas = vendaRepository.findAll();
byte[] relatorio = gerarRelatorioVenda.gerarRelatorioVendas(vendas);
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream(relatorio.length);
baos.write(relatorio, 0, relatorio.length);
return new ByteArrayInputStream(baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
return null;
}
}, "relatorioVendas.pdf");
}
}
então, ele não funciona mais, na verdade comigo nunca funcionou, mas não é que o código esteja errado, ele está certo, porem este código é do Vaadin 8 e eu uso o Vaadin 14.
Fui pesquisar e eu rodei o site do Vaadin atrás de informações, mas para o Vaadin 14 não encontrei nada praticamente
Achei um exemplo para o vaadin 14: https://vaadin.com/forum/thread/17909506/17910246. Porém, parece que o exemplo usa um link em vez de um botão.