Fiz assim e não roda no servidor, somente local também
package br.com.ghnetsoft.comprasfood.relatorio.service; import static br.com.ghnetsoft.principal.util.DataUtil.DD_MM_YYYY; import static br.com.ghnetsoft.principal.util.DataUtil.converterLocalDateParaString; import static br.com.ghnetsoft.principal.util.DataUtil.converterLocalDateTimeJava; import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collection; import java.util.Map; import java.util.Optional; import org.apache.commons.collections4.map.HashedMap; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import br.com.ghnetsoft.comprasfood.model.requisicao.Requisicao; import br.com.ghnetsoft.comprasfood.model.requisicaoitem.RequisicaoItem; import br.com.ghnetsoft.comprasfood.relatorio.dto.RequisicaoItemDTO; import br.com.ghnetsoft.comprasfood.repository.requisicao.RequisicaoRepository; import br.com.ghnetsoft.principal.dto.ArquivoDTO; import br.com.ghnetsoft.principal.exception.GeralException; import net.sf.jasperreports.engine.JRDataSource; import net.sf.jasperreports.engine.JRException; import net.sf.jasperreports.engine.JasperRunManager; import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource; @Service public class RequisicaoService { @Autowired private RequisicaoRepository repository; private BigDecimal total; public ArquivoDTO imprimir(Long idRequisicao) { try { Optional<Requisicao> requisicaoExiste = repository.findById(idRequisicao); if (requisicaoExiste.isPresent()) { total = new BigDecimal("0"); JRDataSource dataSource = new JRBeanCollectionDataSource(inserirLista(requisicaoExiste)); Map<String, Object> parametros = new HashedMap<String, Object>(); parametros.put("lojaOrigem", requisicaoExiste.get().getLojaOrigem().getNome()); parametros.put("lojaDestino", requisicaoExiste.get().getLojaDestino().getNome()); parametros.put("funcionario", requisicaoExiste.get().getFuncionario().getNome()); parametros.put("dataEntrega", converterLocalDateParaString( converterLocalDateTimeJava(requisicaoExiste.get().getDataEntrega()), DD_MM_YYYY)); parametros.put("natureza", requisicaoExiste.get().getObservacao()); parametros.put("numeroRequisicao", requisicaoExiste.get().getNumero()); parametros.put("status", requisicaoExiste.get().getStatus().getDescricao()); parametros.put("total", total); byte[] bytes = JasperRunManager.runReportToPdf( this.getClass().getClassLoader().getResourceAsStream("relatorio/requisicao_compra.jasper"), parametros, dataSource); return ArquivoDTO.builder().contentType("application/pdf").arquivo(bytes).nome("teste").build(); } } catch (JRException e) { e.printStackTrace(); throw new GeralException("Erro ao gerar relatório de requisição de compras !"); } return ArquivoDTO.builder().build(); } private Collection<RequisicaoItemDTO> inserirLista(Optional<Requisicao> requisicaoExiste) { Collection<RequisicaoItemDTO> itens = new ArrayList<>(); for (RequisicaoItem item : requisicaoExiste.get().getRequisicoesItens()) { itens.add(RequisicaoItemDTO.builder().insumo(item.getInsumo().getNome()).quantidade(item.getQuantidade()) .quantidadeAprovada(item.getQuantidadeAprovada()).total(item.getTotal()) .ultimoCusto(item.getUltimoCusto()).unidade(item.getUnidade().getNome()).build()); total = total.add(item.getTotal()); } return itens; } }