(RESOLVIDO)JasperReport Gerando PDF Nulo

Manda o jrxml pra gente ver.

1 curtida
<?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

1 curtida

@Lucas_Camara

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.

1 curtida

@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");

	}

}
1 curtida

Isso. Faça um teste dessa forma.

1 curtida

@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.

1 curtida

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());
1 curtida

@Lucas_Camara

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!!!

1 curtida

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).

1 curtida

Sim sim…estou vendo o link que vc mandou agora com mais calma…vlw parça!!!

1 curtida

Já leu a documentação do JREmptyDataSource?