miércoles, 9 de febrero de 2011

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!

Sueños de Informáticos!!

A veces... bueno no... siempre me he preguntado porque elegimos algo, la carrera, tu pareja, tus amig@s, mentir o decir la verdad, bueno siempre elegiges... para que???ahora he comprendido que los sueños son los responsables... elegiges algo porque quieres algo, elegiges no engañar porque no quieres que hagan lo mismo contigo, eliges estar con alguien porque crees y sientes que vas a pasar bien junto a su lado, y bueno, eliges tu carrera para ser alguien... no verdad??? eliges porque tu sueño es el de crear, diseñar construir algo mejor, mas sofisticado... y por eso eres un informático porque analizas todo y sabes lo importante que es escalar paso a paso....

Sistemas 2009

Sistemas 2009
disfrutnado con mis amig@s en la cena de sistemas...