Tutorial relatório Grails com IReport
23/01/2018 01:27
0
Bom dia pessoal, tudo bem?

Estou precisando gerar relatórios com o IReport no Grails mas não estou conseguindo, uso a versão 3.3.1 do Grails.
Já fiz várias pesquisas e testes com plugins mas até o momento sem sucesso!
Alguém por acaso teria um tutorial sobre o procedimento correto para a geração de relatórios em pdf usando o iReport no grails?

Desde já agradeço.
Tags: Grails, IReport, Jasper, tutorial


0
Fale amigo.
Infelizmente o plugin do jasper que temos hoje para grails 3 só funciona nas versões 3.0.2 > * <= 3.2.x, devido a atualizações de dependencias no grails 3.3.x este plugin deixou de funcionar. Então o que eu lhe recomendo utilizar as dependencias do jasper report e criar um service para gerar os relatórios.

1. Inclua as dependencias abaixo no seu build.gradle.
dependencies {
compile('com.lowagie:itext:2.1.7')
compile('org.apache.poi:poi:3.10-FINAL')
compile('net.sf.jasperreports:jasperreports:5.6.1') {
exclude module: 'antlr'
exclude module: 'commons-logging'
exclude module: 'ant'
exclude module: 'mondrian'
exclude module: 'commons-javaflow'
exclude module: 'barbecue'
exclude module: 'xml-apis-ext'
exclude module: 'xml-apis'
exclude module: 'xalan'
exclude module: 'groovy-all'
exclude module: 'hibernate'
exclude module: 'saaj-api'
exclude module: 'servlet-api'
exclude module: 'xercesImpl'
exclude module: 'xmlParserAPIs'
exclude module: 'spring-core'
exclude module: 'bsh'
exclude module: 'spring-beans'
exclude module: 'jaxen'
exclude module: 'barcode4j'
exclude module: 'batik-svg-dom'
exclude module: 'batik-xml'
exclude module: 'batik-awt-util'
exclude module: 'batik-dom'
exclude module: 'batik-css'
exclude module: 'batik-gvt'
exclude module: 'batik-script'
exclude module: 'batik-svggen'
exclude module: 'batik-util'
exclude module: 'batik-bridge'
exclude module: 'persistence-api'
exclude module: 'jdtcore'
exclude module: 'bcmail-jdk16'
exclude module: 'bcprov-jdk16'
exclude module: 'bctsp-jdk16'
exclude module: 'bcmail-jdk14'
exclude module: 'bcprov-jdk14'
exclude module: 'bctsp-jdk14'
exclude module: 'xmlbeans'
exclude module: 'olap4j'
}
}?


2. Crie o seguinte service abaixo.
import grails.util.Holders
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.data.JRBeanCollectionDataSource
?
class JasperService {
byte[] generateReport(String reportPath = '/reports/Clientes.jasper',
Collection data = [],
Map parameters = null) {
def resource = Holders.grailsApplication.mainContext.getResource(reportPath)
def dataSource = new JRBeanCollectionDataSource(data)
JasperPrint print = JasperFillManager.fillReport(resource.inputStream, parameters, dataSource)
OutputStream out = new ByteArrayOutputStream()
JasperExportManager.exportReportToPdfStream(print, out)
out.toByteArray()
}

def compileReport(String reportPath = '/reports/Clientes.jrxml') {
def resource = Holders.grailsApplication.mainContext.getResource(reportPath)
JasperCompileManager.compileReportToFile(resource.file.path)
}
}

3. Crie dentro de /src/main/webapp a pasta reports e coloque todos os arquivos .jasper dentro dela.
4. Seja feliz :)
25/01/2018 04:34


0
Boa tarde Mikael!
Muito obrigado pelas informações, efetuei os procedimentos e a aplicação executou! Estou fazendo os testes da chamada do service no controller agora para emitir o PDF, está apresentando alguns erros, estou verificando o que pode ser, não sei se estou fazendo a chamada corretamente!
27/01/2018 17:54


0
Boa tarde pessoal, consegui executar o relatório! Fiz apenas algumas alterações nos parâmetros para funcionar:

1 - O JasperService ficou assim, direto na pasta raiz service:
import grails.util.Holders
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.data.JRBeanCollectionDataSource
import grails.transaction.Transactional
@Transactional
class JasperService {
   byte[] generateReport(String reportPath, Collection data, Map parameters) {
      println 'Entrou no jasper'
      def resource = Holders.grailsApplication.mainContext.getResource(reportPath)
      def dataSource = new JRBeanCollectionDataSource(data)
      JasperPrint print = JasperFillManager.fillReport(resource.inputStream, parameters, dataSource)
      OutputStream out = new ByteArrayOutputStream()
      JasperExportManager.exportReportToPdfStream(print, out)
      out.toByteArray()
   }
   def compileReport(String reportPath) {
      def resource = Holders.grailsApplication.mainContext.getResource(reportPath)
      JasperCompileManager.compileReportToFile(resource.file.path)
   }
}

2 - Estou passando os parâmtros direto do grails, sem consulta no report, pra isso criei dentro da pasta src/main/groovy uma class, para cada report precisa ser criada uma!

package nomeDaPackage //Precisa ser a mesma pk do controller

class UserVO{ 
    String nome
    UserVO(){}
    UserVO(User user){ 
       this.nome = user.nome          
    }
}

3 - A chamada no controller ficou assim:

 def userRelacaoCompleta(){
        def user =User.get(2) //Recebo o valor, pode ser passado pela gsp também
        def parametrosVO = new UserVO(user)
    def bytes = jasperService.generateReport('/reports/user.jasper',[parametrosVO],null)
    response.setHeader('Content-Disposition', 'filename=${UUID.randomUUID().toString()}.pdf')
        response.contentType = 'application/pdf'
        response.outputStream << bytes
    }

4 - No report criei um novo campo (Add Field) como String (Mesmo tipo do campo nome da class UserVO) e coloquei dentro de um textField.

Tudo ok! Vlw mesmo!
28/01/2018 14:56



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto