Manda o jrxml pra gente ver.
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.17.0.final using JasperReports Library version 6.17.0-6d93193241dd8cc42629e188b94f9e0bc5722efd -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="RelatorioVendas" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="2e0e50d4-9514-4537-9eb7-b2223b2664d1">
<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="fjsistemas"/>
<queryString language="SQL">
<![CDATA[SELECT
cliente.nome,
venda.id,
venda.data_venda,
venda.valor_total_venda,
formaPagamento.forma_de_pagamento
FROM
fjsistemas.venda venda
INNER JOIN fjsistemas.cliente cliente
ON cliente.id = venda.cliente_id
INNER JOIN fjsistemas.forma_de_pagamento formaPagamento
ON venda.forma_de_pagamento_id = formaPagamento.id]]>
</queryString>
<field name="nome" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="nome"/>
<property name="com.jaspersoft.studio.field.label" value="nome"/>
<property name="com.jaspersoft.studio.field.tree.path" value="cliente"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="id" class="java.lang.Long">
<property name="com.jaspersoft.studio.field.name" value="id"/>
<property name="com.jaspersoft.studio.field.label" value="id"/>
<property name="com.jaspersoft.studio.field.tree.path" value="venda"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="data_venda" class="java.sql.Date">
<property name="com.jaspersoft.studio.field.name" value="data_venda"/>
<property name="com.jaspersoft.studio.field.label" value="data_venda"/>
<property name="com.jaspersoft.studio.field.tree.path" value="venda"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="valor_total_venda" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="valor_total_venda"/>
<property name="com.jaspersoft.studio.field.label" value="valor_total_venda"/>
<property name="com.jaspersoft.studio.field.tree.path" value="venda"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<field name="forma_de_pagamento" class="java.lang.String">
<property name="com.jaspersoft.studio.field.name" value="forma_de_pagamento"/>
<property name="com.jaspersoft.studio.field.label" value="forma_de_pagamento"/>
<property name="com.jaspersoft.studio.field.tree.path" value="forma_de_pagamento"/>
<fieldDescription><![CDATA[]]></fieldDescription>
</field>
<background>
<band/>
</background>
<title>
<band height="72">
<frame>
<reportElement mode="Opaque" x="-20" y="-20" width="595" height="92" backcolor="#006699" uuid="4a5bb3ef-9a2a-4935-a501-65480e83408b"/>
<staticText>
<reportElement x="0" y="0" width="595" height="92" forecolor="#FFFFFF" uuid="9a4d8f9c-b897-4e51-9e44-13a8046222ca"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="34" isBold="true"/>
</textElement>
<text><![CDATA[RELATÓRIO DE VENDAS]]></text>
</staticText>
</frame>
</band>
</title>
<pageHeader>
<band/>
</pageHeader>
<columnHeader>
<band height="21">
<line>
<reportElement x="-20" y="20" width="595" height="1" forecolor="#666666" uuid="5e89c1f4-5166-405e-b8f2-a0ab858a7247"/>
</line>
<staticText>
<reportElement mode="Opaque" x="-20" y="0" width="151" height="20" forecolor="#006699" backcolor="#E6E6E6" uuid="40f47e82-8b64-4cf1-b52f-8c8eb0e08af7">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="9e80d110-ce3c-4160-8754-87ba8dba1ac8"/>
</reportElement>
<textElement textAlignment="Center">
<font size="14" isBold="true"/>
</textElement>
<text><![CDATA[ID]]></text>
</staticText>
<staticText>
<reportElement mode="Opaque" x="91" y="0" width="151" height="20" forecolor="#006699" backcolor="#E6E6E6" uuid="d84e8987-62de-4ee7-89b4-4b8e6274f230">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="4536281d-5c6e-4197-81c2-c6f3fbc2babf"/>
</reportElement>
<textElement textAlignment="Center">
<font size="14" isBold="true"/>
</textElement>
<text><![CDATA[DATA]]></text>
</staticText>
<staticText>
<reportElement mode="Opaque" x="202" y="0" width="151" height="20" forecolor="#006699" backcolor="#E6E6E6" uuid="b140ab7b-d427-4559-a422-73616518ff9a">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="8b1f275b-2bd2-452e-b206-f553fd0f5c6a"/>
</reportElement>
<textElement textAlignment="Center">
<font size="14" isBold="true"/>
</textElement>
<text><![CDATA[CLIENTE]]></text>
</staticText>
<staticText>
<reportElement mode="Opaque" x="313" y="0" width="151" height="20" forecolor="#006699" backcolor="#E6E6E6" uuid="ad528a61-f62f-43a6-b862-363839b63a02">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="b0cc8fe2-8712-4c22-9f68-0165a2ac5a53"/>
</reportElement>
<textElement textAlignment="Center">
<font size="14" isBold="true"/>
</textElement>
<text><![CDATA[VALOR]]></text>
</staticText>
<staticText>
<reportElement mode="Opaque" x="424" y="0" width="151" height="20" forecolor="#006699" backcolor="#E6E6E6" uuid="d2b0f4e4-88f8-4362-86da-cef09765e112">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="2d066431-6862-42c1-b8b1-97cb6e46f470"/>
</reportElement>
<textElement textAlignment="Center">
<font size="14" isBold="true"/>
</textElement>
<text><![CDATA[F.PAGAMENTO]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="21">
<line>
<reportElement positionType="FixRelativeToBottom" x="-20" y="20" width="595" height="1" uuid="e0ee4647-b7a7-4eb5-925e-750dc7ad0d85"/>
</line>
<textField textAdjust="StretchHeight">
<reportElement x="0" y="0" width="111" height="20" uuid="cdab64e7-e01d-4a66-ba74-67f3c208f7ee">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="9e80d110-ce3c-4160-8754-87ba8dba1ac8"/>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="14"/>
</textElement>
<textFieldExpression><![CDATA[$F{id}]]></textFieldExpression>
</textField>
<textField textAdjust="StretchHeight">
<reportElement x="111" y="0" width="111" height="20" uuid="b2f1ead4-4b3b-43ed-bdd6-ea2713472dc9">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="4536281d-5c6e-4197-81c2-c6f3fbc2babf"/>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="14"/>
</textElement>
<textFieldExpression><![CDATA[$F{data_venda}]]></textFieldExpression>
</textField>
<textField textAdjust="StretchHeight">
<reportElement x="222" y="0" width="111" height="20" uuid="c0f810a5-bd07-4fbc-ba0b-8ee89e677145">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="8b1f275b-2bd2-452e-b206-f553fd0f5c6a"/>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="14"/>
</textElement>
<textFieldExpression><![CDATA[$F{nome}]]></textFieldExpression>
</textField>
<textField textAdjust="StretchHeight">
<reportElement x="333" y="0" width="111" height="20" uuid="d01d637d-5248-428a-bf06-ef6edb4ccdc6">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="b0cc8fe2-8712-4c22-9f68-0165a2ac5a53"/>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="14"/>
</textElement>
<textFieldExpression><![CDATA[$F{valor_total_venda}]]></textFieldExpression>
</textField>
<textField textAdjust="StretchHeight">
<reportElement x="444" y="0" width="111" height="20" uuid="41ddd3a1-42ba-4803-b359-25cbedb22b7d">
<property name="com.jaspersoft.studio.spreadsheet.connectionID" value="2d066431-6862-42c1-b8b1-97cb6e46f470"/>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="14"/>
</textElement>
<textFieldExpression><![CDATA[$F{forma_de_pagamento}]]></textFieldExpression>
</textField>
</band>
</detail>
<columnFooter>
<band/>
</columnFooter>
<pageFooter>
<band height="17">
<textField>
<reportElement mode="Opaque" x="0" y="4" width="515" height="13" backcolor="#E6E6E6" uuid="05ed0fd3-d214-421b-af78-eda7b865e587"/>
<textElement textAlignment="Right"/>
<textFieldExpression><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
</textField>
<textField evaluationTime="Report">
<reportElement mode="Opaque" x="515" y="4" width="40" height="13" backcolor="#E6E6E6" uuid="9df907f5-7443-47aa-9f6b-9d19c6039184"/>
<textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
<textField pattern="EEEEE dd MMMMM yyyy">
<reportElement x="0" y="4" width="100" height="13" uuid="6bbc7b9c-89d1-495f-a56e-2ea57fddae32"/>
<textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
</textField>
</band>
</pageFooter>
<summary>
<band/>
</summary>
</jasperReport>
Entendi. vc está gerando por uma query direto no relatório. Então vc realmente não precisa passar a lista como eu tinha te falado. Vc deve passar uma Connection
do banco de dados para o relatório.
JasperFillManager.fillReport(document, null, connnection);
Repare no parâmetro connnection. Vc deve recuperar ele pelo Spring injetando um datasource na classe PDF:
public class PDF {
private VendaRepository vendaRepository;
private DataSource dataSource;
public PDF(VendaRepository vendaRepository, DataSource dataSource) {
this.vendaRepository = vendaRepository;
this.dataSource = dataSource;
}
// aqui vai o resto do código da classe
}
e ao gerar o relatório:
JasperFillManager.fillReport(document, null, dataSource.getConnection());
Não precisa mais passar a lista de vendas. Ela só seria necessário se a aplicação fosse fornecer os dados do relatório.
A classe Datasource é do pacote javax.sql.DataSource
tira uma duvida…no meu projeto ja tenho o arquivo application.properties, dentro dele tem todas as informações de conexao com db:
application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/fjsistemas
spring.datasource.username=usuario
spring.datasource.password=senha
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.testWhileIdle=true
spring.datasource.validationQuery=SELECT 1
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
se eu adicionar este connection não vai dar conflito?
A Connection que falei é exatamente a conexão do banco de dados usando essas propriedades do application.properties.
O Spring pega essas propriedades de conexão e cria um DataSource para ser usado na aplicação, fazendo o gerenciamento das conexões usadas.
@Lucas_Camara assim?
package br.com.fjsistemas.relatorios;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.springframework.stereotype.Component;
import br.com.fjsistemas.repository.VendaRepository;
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;
@Component
public class PDF {
private VendaRepository vendaRepository;
private DataSource dataSource;
public PDF(VendaRepository vendaRepository, DataSource dataSource) {
this.vendaRepository = vendaRepository;
this.dataSource = dataSource;
}
public void generatePdfButton() throws JRException, SQLException {
JasperReport document = JasperCompileManager.compileReport(
"C:\\Users\\fjd2320\\eclipse-workspace\\fjsistemas\\src\\main\\resources\\META-INF\\resources\\RelatorioVendas.jrxml");
//List<Venda> vendas = vendaRepository.findAll();
//JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(vendas);
JasperFillManager.fillReport(document, null, dataSource.getConnection());
JasperPrint print = JasperFillManager.fillReport(document, null);
JasperExportManager.exportReportToPdfFile(print,
"C:\\Users\\fjd2320\\eclipse-workspace\\fjsistemas\\src\\main\\resources\\META-INF\\resources\\RelatorioVendas.pdf");
}
}
Isso. Faça um teste dessa forma.
@Lucas_Camara kkkk
não deu erros de compilação ou execução…mas…
RELATORIO TOTALMENTE EM BRANCO AGORA
O objeto java.sql.Connection fornecido é nulo.
Deve ser por conta do spring data jpa. Confesso que nunca precisei recuperar uma Connection jdbc numa aplicação Spring. Vou dá uma pesquisa aqui e posto se achar algo.
AH mano, o código tah errado. Tu duplicou a linha que preenche o relatório:
JasperFillManager.fillReport(document, null, dataSource.getConnection());
JasperPrint print = JasperFillManager.fillReport(document, null);
Deixa só o assim:
JasperFillManager.fillReport(document, null, dataSource.getConnection());
Deu certo manooo…
classe PDF:
package br.com.fjsistemas.relatorios;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.springframework.stereotype.Component;
import br.com.fjsistemas.repository.VendaRepository;
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;
@Component
public class PDF {
@SuppressWarnings("unused")
private VendaRepository vendaRepository;
private DataSource dataSource;
public PDF(VendaRepository vendaRepository, DataSource dataSource) {
this.vendaRepository = vendaRepository;
this.dataSource = dataSource;
}
public void generatePdfButton() throws JRException, SQLException {
JasperReport document = JasperCompileManager.compileReport(
"C:\\Users\\fjd2320\\eclipse-workspace\\fjsistemas\\src\\main\\resources\\META-INF\\resources\\RelatorioVendas.jrxml");
JasperPrint print = JasperFillManager.fillReport(document, null, dataSource.getConnection());
JasperExportManager.exportReportToPdfFile(print,
"C:\\Users\\fjd2320\\eclipse-workspace\\fjsistemas\\src\\main\\resources\\META-INF\\resources\\RelatorioVendas.pdf");
}
}
Manooo…muito obrigado mais uma vez…vc é fera!!! Vlw manoooo Muitooo Obg!!!
Massa!
Só lembrando: Em projetos Spring, evite usar new Classe blz? Sempre anote suas classes e as use através de injeção de dependência. Por @Autowired
ou pelo construtor (como foi feito na classe PDF).
Sim sim…estou vendo o link que vc mandou agora com mais calma…vlw parça!!!