iReports y php: word, excel, html, cvs, pdf, txt, xml

hola a tod@s. Bueno quisiera compartir con ustedes algo que he estado aprendiendo y es a generar reportes desde php utilizando iReportes mediante la libreria JavaBridge, comparto con ustedes el código generado, me he basado en la informacion encontrada aqui: http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=GeneracionJasperReportsPHP
funcionesFormatosExportacion


Este seria mi archivo de funcionesFormatosExportacion.php Abarca las funciones que se deben ejecutar dependiendo * del formato en el que se desee presentar (PDF, HTML, DOCX, EXCEL, CVS, XML, TEXTO PLANO) */ //incluimos librerias require_once("C:\\xampp\\htdocs\\Basico_001\\dependencias\\JavaBridge\\java\\Java.inc"); //include_once 'conexionBD'; class jasperReport { public function iniciar(){ $this--->javaOutputStream = new java("java.io.ByteArrayOutputStream"); }


public function rellenarReporte($reporte, $direccionReporte, $parametros){ $this->reporteC = $reporteC; $Conn = new java("org.altic.jasperReports.JdbcConnection"); $Conn->setDriver("com.mysql.jdbc.Driver"); $Conn->setConnectString("jdbc:mysql://127.0.0.1/encuestas"); $Conn->setUser("root"); $Conn->setPassword(""); if (is_string($reporte)) { $this->reportC = $reporte; $reporte = $direccionReporte . "/". $reporte . ".jasper"; } $parametrosMap = new Java("java.util.HashMap"); $parametrosMap->put("parameter1", new Java('java.lang.String', "$parametros" )); $objRellenar = new JavaClass("net.sf.jasperreports.engine.JasperFillManager"); $salida = $objRellenar->fillReport($reporte,$parametrosMap,$Conn->getConnection()); return $salida; }


//funcion para el formato pdf

public function formatoPDF($reporte) { java_set_file_encoding("UTF-8"); $exportador = new java("net.sf.jasperreports.engine.export.JRPdfExporter"); $parametrosExportados = java("net.sf.jasperreports.engine.JRExporterParameter"); $exportador->setParameter($parametrosExportados->JASPER_PRINT, $reporte); $exportador->setParameter($parametrosExportados->OUTPUT_STREAM, $this->javaOutputStream); $exportador->exportReport(); //Este código sirve para abrir el archivo generado desde el explorador header('Content-Type: application/pdf'); header('Content-disposition: attachment; filename="'.$this->reportC.'.pdf"');//forzar almacenar o abrir automaticamente header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Expires: 0"); echo java_cast($this->javaOutputStream->toByteArray(),"S");//se escribe en el formato la informacion del reporte }


//funcion para el formato docx

public function formatoWord($reporte) { java_set_file_encoding("UTF-8"); $exportador = new java("net.sf.jasperreports.engine.export.JRRtfExporter");//libreria para rtf documentos word $parametrosExportados = java("net.sf.jasperreports.engine.JRExporterParameter"); $exportador->setParameter($parametrosExportados->JASPER_PRINT, $reporte); $exportador->setParameter($parametrosExportados->OUTPUT_STREAM, $this->javaOutputStream); $exportador->exportReport(); //Este código sirve para abrir el archivo generado desde el explorador header('Content-Type: application/rtf');//tipo de archivo header('Content-disposition: attachment; filename="'.$this->reportC.'.rtf"');//como mostrarlo header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header("Expires: 0"); echo java_cast($this->javaOutputStream->toByteArray(),"S");//se escribe en el formato la informacion del reporte }


//funcion para el formato excel

public function formatoExcel($reporte) { java_set_file_encoding("UTF-8"); $exportador = new java("net.sf.jasperreports.engine.export.JExcelApiExporter"); $parametrosExportados = java("net.sf.jasperreports.engine.JRExporterParameter"); $exportadorParametrosExcel = java("net.sf.jasperreports.engine.export.JRXlsExporterParameter"); $exportador->setParameter($parametrosExportados->JASPER_PRINT, $reporte); $exportador->setParameter($parametrosExportados->OUTPUT_STREAM, $this->javaOutputStream); $exportador->setParameter($exportadorParametrosExcel->IS_ONE_PAGE_PER_SHEET, true); $exportador->setParameter($exportadorParametrosExcel->IS_DETECT_CELL_TYPE, true); $exportador->exportReport(); //Este código sirve para abrir el archivo generado desde el explorador header('Content-Type: application/xls'); header('Content-Transfer-Encoding: binary'); header('Content-disposition: attachment; filename="'.$this->reportC.'.xls"'); header("Pragma: no-cache"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Expires: 0"); echo java_cast($this->javaOutputStream->toByteArray(),"S");//se escribe en el formato la informacion del reporte }


//funcion para el formato html

public function formatoHtml($reporte) { java_set_file_encoding("UTF-8"); $exportador = new java("net.sf.jasperreports.engine.export.JRHtmlExporter");//libreria para html $parametrosExportados = java("net.sf.jasperreports.engine.JRExporterParameter"); $exportador->setParameter($parametrosExportados->JASPER_PRINT, $reporte); $exportador->setParameter($parametrosExportados->OUTPUT_STREAM, $this->javaOutputStream); $exportador->exportReport(); //Este código sirve para abrir el archivo generado desde el explorador header('Content-Type: application/html'); header('Content-disposition: attachment; filename="'.$this->reportC.'.html"'); header("Pragma: no-cache"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Expires: 0"); echo java_cast($this->javaOutputStream->toByteArray(),"S");//se escribe en el formato la informacion del reporte }


//funcion para el formato CSV (formato en donde los valores son separados por comas)

public function formatoCsv($reporte) { java_set_file_encoding("UTF-8"); $exportador = new java("net.sf.jasperreports.engine.export.JRCsvExporter");//libreria para rtf documentos word $parametrosExportados = java("net.sf.jasperreports.engine.JRExporterParameter"); $exportador->setParameter($parametrosExportados->JASPER_PRINT, $reporte); $exportador->setParameter($parametrosExportados->OUTPUT_STREAM, $this->javaOutputStream); $exportador->exportReport(); //Este código sirve para abrir el archivo generado desde el explorador header('Content-Type: application/csv'); header('Content-disposition: attachment; filename="'.$this->reportC.'.csv"'); header("Pragma: no-cache"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Expires: 0"); echo java_cast($this->javaOutputStream->toByteArray(),"S");//se escribe en el formato la informacion del reporte }


//funcion para el formato texto plano

public function formatoTextoPlano($reporte) { java_set_file_encoding("UTF-8"); $exportador = new java("net.sf.jasperreports.engine.export.JRTextExporter");//libreria para rtf documentos word $parametrosExportados = java("net.sf.jasperreports.engine.JRExporterParameter"); $exportadorParametrosTxt = java("net.sf.jasperreports.engine.export.JRTextExporterParameter"); $exportador->setParameter($parametrosExportados->JASPER_PRINT, $reporte); $exportador->setParameter($parametrosExportados->OUTPUT_STREAM, $this->javaOutputStream); $exportador->setParameter($exportadorParametrosTxt->CHARACTER_WIDTH, 5); $exportador->setParameter($exportadorParametrosTxt->CHARACTER_HEIGHT, 5); $exportador->exportReport(); //Este código sirve para abrir el archivo generado desde el explorador header('Content-Type: application/txt'); header('Content-disposition: attachment; filename="'.$this->reportC.'.txt"'); header("Pragma: no-cache"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Expires: 0"); echo java_cast($this->javaOutputStream->toByteArray(),"S");//se escribe en el formato la informacion del reporte }


//funcion para el formato xml

public function formatoXml($reporte) { //utililiza la libreria DTD para generar reportes en XML java_set_file_encoding("UTF-8"); $exportador = new java("net.sf.jasperreports.engine.export.JRXmlExporter");//libreria para reportes en xml $parametrosExportados = java("net.sf.jasperreports.engine.JRExporterParameter"); $exportador->setParameter($parametrosExportados->JASPER_PRINT, $reporte); $exportador->setParameter($parametrosExportados->OUTPUT_STREAM, $this->javaOutputStream); $exportador->exportReport(); //Este código sirve para abrir el archivo generado desde el explorador header('Content-Type: application/jrpxml'); header('Content-disposition: attachment; filename="'.$this->reportC.'.xml"'); header("Pragma: no-cache"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Expires: 0"); echo java_cast($this->javaOutputStream->toByteArray(),"S");//se escribe en el formato la informacion del reporte } } ?>
REPORTERIA


este seria la parte en donde llamo a las funciones del archivo anterior dependiendo del tipo de archivo en el que se desee exportar iniciar();


$print = $objetoReport->rellenarReporte($_REQUEST['reporte'], $dirReporte, $_REQUEST['param']);//llamo a mi funcion rellenar Reporte en donde se llenara la plantilla switch ($_REQUEST['tipo']){ case "pdf": $objetoReport->formatoPDF($print); break; case "docx": $objetoReport->formatoWord($print); break; case "xls": $objetoReport->formatoExcel($print); break; case "txt": $objetoReport->formatoTextoPlano($print); break; case "html": $objetoReport->formatoHtml($print); break; case "xml": $objetoReport->formatoXml($print); break; case "csv": $objetoReport->formatoCsv($print); break; default : throw new Exception("tipo incorrecto"); break; } } catch (JavaException $ex) { $trace = new Java("java.io.ByteArrayOutputStream"); $ex->printStackTrace(new Java("java.io.PrintStream", $trace)); print "java stack trace: $trace\n"; } ?>


Saludos y espero que les sirva, yo sufrí mucho intentando sacar todos estos formatos. Gracias a la coloración de otras investigaciones como las que mencione anteriormente (aqui) he podido generar todo esto. La clave esta en las librerías. Exitos siempre!

Comentarios

Anónimo dijo…
me gusta.. gracias
Anónimo dijo…
hola soy eduardo de sistemas de perru muchas gracias es justo lo que ando buscado , ojala todos compartiran tambein sus conocimientos sobre codeigniter jaja seria genial saludos desde peru
Katty Landacay dijo…
Hola chic@s!! gracias por sus comentarios, me alegra mucho que les haya servido, ahora ya esta mas presentadito para mayor entendimiento, he hecho unas mejoras en cuanto a las querys que no generan ningun resultado para que no les salga el error "documento sin paginas" o algo así, pueden revisar lo posteare, con cosillas sacandole el jugo al iReport con JavaBridge!!


Eduardo que es codeigniter??... si me ayudas con alguna pista. Y si me gusta programar jejeje... Saludos desde Ecuador!!

Exitos Siempre! Ktyk
@marcocevallos dijo…
Este comentario ha sido eliminado por el autor.
@marcocevallos dijo…
Interesante, ahora porque no lo actualizas con una entrada sobre la automatización de pruebas de QA? sería muy útil.

saludos
lcevallo dijo…
Hola perdona que te pregunte se ve interesante pero si tu reporte necesita parametros que se le deben de enviar al query que usa internamente como lo haria.

Por fis tu ayuda.

Muchas Gracias
lcevallo dijo…
Hola disculpa yo tambien soy de Ecuador soy de Guayaquil la verdad que me vendria mucho algun tipo de tutoria de tu parte se interesante lo que haces y me gustaria hacerlo en mis aplicativos por fis si me puedes ayudar.

Entradas populares