JasperReports con Jruby y Rails
Carlos Barbiero publicó esto el 29/07/10 en Herramientas, Java, Lenguajes de Programación, Noticias, Open Source, Ruby. 6 comentariosUno de los grandes problemas en el desarrollo con Ruby on Rails son los reportes multipágina. Debido a que el HTML (inclusive HTML 5) no soporta multipágina, si utilizamos Jruby tenemos la posibilidad de usar cualquier librería Java en nuestro desarrollo.
Afortunadamente en Java tenemos JasperReports (http://jasperforge.org/), una excelente solución al problema antes mencionado.
Para poder incluir un reporte realizado con JasperReports en nuestra aplicación Jruby necesitamos:
1) Descargar I-Report, la herramienta de administracion de reportes de JasperReports. http://jasperforge.org/projects/ireport y descomprimirlo.
2) Dentro del directorio del i-report, ir a modules/ext/ y copiar todos los archivos .jar (si, todos
) al directorio lib de la instalación de JRuby. De esta manera, ya incluimos las librerías necesarias y tenemos preparado nuestro JRuby para utilizar JasperReports.
3) Nos resta crear un reporte para prueba, si nunca hiciste un reporte con i-report: http://jasperforge.org//website/ireportwebsite/IR%20Website/ir_design_a_report.html?header=project&target=ireport
4) Finalmente el código para correr nuestro reporte es el siguiente:
require 'java'
import 'oracle.jdbc.OracleDriver' #Aqui necesitas Utilizar el Driver de la Base de datos que estas usando, en mi caso es oracle
import 'net.sf.jasperreports.engine.JasperCompileManager'
import 'org.apache.commons.dbcp.BasicDataSource'
import'java.util.HashMap'
import'net.sf.jasperreports.engine.JasperFillManager'
import'net.sf.jasperreports.engine.JasperExportManager'
#Creo el datasource
basicdatasource = BasicDataSource.new
basicdatasource.driver_class_name = 'oracle.jdbc.OracleDriver'
basicdatasource.username = 'usuario'
basicdatasource.password = 'password'
basicdatasource.url = 'jdbc:oracle:thin:@localhost:1521:XE'
basicdatasource.connection
conexion = basicdatasource.connection
#Compilamos el reporte
jasperReport = JasperCompileManager.compile_report('/url_de_tu_archivo_jrxml/reporte.jrxml')
#Para pasar los parámetros, definimos un objeto HashMap
m = HashMap.new
m.put('parametro_1','valor_parametro_1')
m.put('parametro_2','valor_parametro_2')
m.put('parametro_n','valor_parametro_n')
#Genero el reporte
jasperPrint = JasperFillManager.fill_report(jasperReport, m,conexion)
#Exporto el PDF
JasperExportManager.export_report_to_pdf_file(jasperprint, 'path_al_archivo_PDF.pdf')
Si deseamos generar reportes en Rails, podemos por ejemplo ubicar los reportes en el directorio public/reportes y utilizar send_file para enviarlos, por ejemplo:
JasperExportManager.export_report_to_pdf_file(jasperprint, RAILS_ROOT+"/public/reportes/reporte.pdf") send_file RAILS_ROOT+"/public/reportes/reporte.pdf"
Espero les sea de utilidad, cualquier cosa comenten y trataré de despejar dudas
6 comentarios
Trackbacks and Pingbacks
-
[...] This post was mentioned on Twitter by Carlos Mathiasen, IPCorp Blog. IPCorp Blog said: Post: JasperReports con Jruby y Rails http://bit.ly/9mI1Jx [...]
Hola, oye con esta herramienta puedo crear facturas electrónicas?
Gracias!
Publicado el 21 Octubre 2010 a las 12:33. Permalink.Hola Luisa, si, totalmente. Con JasperReports puedes hacer cualquier tipo de reporte inclusive facturas electrónicas.
Publicado el 22 Octubre 2010 a las 07:50. Permalink.Hola Carlos,
Primeramente te felicito por tu artículo, una pregunta sería que pueden enviarme el archivo con el ejemplo que has expuesto.
Muchas gracias
Publicado el 8 Junio 2011 a las 17:41. Permalink.Hola Gio, en ealidad no hace falta ningún archivo. Lo que puedes hacer es poner el código que te paso en un método en un controller y de alli correrlo si usas rails, por ejemplo:
#En esta sección ponés todos los import y requires
class ReportesController < ApplicationController
#Aqui defines variables de clase para que puedas usarlas en todos los métodos
@@username = 'usuario'
@@password = 'passwd'
@@url = 'jdbc:oracle:thin:@ip_servidor_bd:puerto:SID' #En el caso de oracle
#defino un método
def reporte_principal
basicdatasource = BasicDataSource.new
basicdatasource.driver_class_name = 'oracle.jdbc.OracleDriver'
basicdatasource.username = @@username
basicdatasource.password = @@password
basicdatasource.url = @@url
basicdatasource.connection
conexion = basicdatasource.connection
#Y acá por último lo que sigue para compilar el reporte y exportarlo
end
end
Espero te sirva, cualquier cosa no dudes en consultar.
Publicado el 13 Junio 2011 a las 09:26. Permalink.Pero que sucede si no uso JRuby, y simplemente estoy usando Ruby on Rails con RubyMine como IDE
Publicado el 11 Agosto 2011 a las 13:01. Permalink.