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
Eduardo que es codeigniter??... si me ayudas con alguna pista. Y si me gusta programar jejeje... Saludos desde Ecuador!!
Exitos Siempre! Ktyk
saludos
Por fis tu ayuda.
Muchas Gracias