Jasper reports

Estou precisando de passar uma imagem em byte para o relatório em jasper.

Tentei desta forma mas não foi enviado

	public byte[] gerar(String id) {
		try {
			Catalogo catalogo = pesquisaPorId(id);

			ImageIcon gto = new ImageIcon(catalogo.getPaginas().iterator().next().getArquivos().iterator().next()
					.getArquivo().getArquivoByte());

			JRDataSource dataSource = new JRBeanCollectionDataSource(null);
			Map<String, Object> parametros = new HashedMap<>();
			parametros.put("imagem", gto.getImage());
			return JasperRunManager.runReportToPdf(				this.getClass().getClassLoader().getResourceAsStream("relatorio/catalogo.jasper"), parametros,
					dataSource);
		} catch (JRException e) {
			throw new GeralException("Erro ao gerar relatório de Cotação em PDF !");
		}
	}

jasper

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.16.0.final using JasperReports Library version 6.16.0-48579d909b7943b64690c65c71e07e0b80981928  -->
<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="catalogo" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="9b0210bf-df4b-4d67-8415-27df24199e5f">
	<parameter name="imagem" class="java.lang.String"/>
	<queryString>
		<![CDATA[]]>
	</queryString>
	<background>
		<band splitType="Stretch"/>
	</background>
	<detail>
		<band height="600" splitType="Stretch">
			<image>
				<reportElement stretchType="ContainerHeight" x="0" y="0" width="555" height="600" uuid="266110fc-056f-429d-9a43-1447b7ff858d">
					<property name="com.jaspersoft.studio.unit.width" value="px"/>
				</reportElement>
				<imageExpression><![CDATA[$P{imagem}]]></imageExpression>
			</image>
		</band>
	</detail>
</jasperReport>

O que está errado ?

Tente alterar a tag no jasper para:

<imageExpression class="java.awt.Image"><![CDATA[$P{imagem}]]></imageExpression>
1 curtida

Altero para

<imageExpression class="java.awt.Image"><![CDATA[$P{imagem}]]></imageExpression>

e ele muda automaticamente para

<imageExpression><![CDATA[$P{imagem}]]></imageExpression>

Ah mano, parece que o parâmetro imagem no jasper está definido como java.lang.String. Tente colocar como java.awt.Image.

<parameter name="imagem" class="java.awt.Image" />
1 curtida

Já tentei com:

<parameter name="imagem" class="java.awt.Image" />

mas o relatório fica em branco.

Dá algum erro?

1 curtida

Não dá erro na geração console. Só não mostra

Testei aqui e passando um dataSource com null não funciona mesmo. O correto é passar um new JREmptyDataSource():

return JasperRunManager.runReportToPdf(
    this.getClass().getClassLoader().getResourceAsStream("relatorio/catalogo.jasper"), 
    parametros,
    new JREmptyDataSource() // essa é a forma certa de passar um datasource vazio
);

Mudando soh isso, deve funcionar (fiz aqui e funcionou)

1 curtida

Agora sim