1.- Descargamos TCPDF de la página oficial (para el ejemplo descargue tcpdf_5_9_165.zip).
2.- Creamos una carpeta en la raÃz de nuestro proyecto de CodeIgniter, con el nombre de plugins.
CodeIgniter
-> application
-> system
-> plugins (la nueva carpeta)
-> imagenes
3.- Descomprimimos el archivo descargado(TCPDF) en la carpeta plugins.-> application
-> system
-> plugins (la nueva carpeta)
-> imagenes
4.- Usando el plugin:
a.- creamos nuestro controlador(index_c.php):
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Index_c extends CI_Controller { public function __construct(){ parent::__construct(); $this->load->model('index_m','modelo'); } function index(){ $this->load->view('index_v'); } public function generar_pdf(){ // enviamos el cabezal de la tabla $arrHeading = array('Id', 'Campo'); // obtenemos los datos resultantes de la consulta $arrData = $this->modelo->get_data_pdf(); // enviaremos el titulo $sTitulo = 'Ejemplo PDF Export en CodeIgniter'; // generamos el pdf generar_pdf($arrHeading,$arrData,$sTitulo); } }
b.- creamos nuestro modelo(index_m.php):
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Index_m extends CI_Model { public function __construct(){ parent::__construct(); } function get_data_pdf(){ $result = $this->db ->query('SELECT idtabla1, campo1 FROM tabla1'); // recuerda que puiedes hacer cualquier filtro usando SQL // como limitar el numero de registros, mostrar todo en mayúscula, etc.. $arrDatos=array(); foreach ($result->result_array() as $row){ $arrDatos[] = array( htmlspecialchars($row['idtabla1'],ENT_QUOTES), htmlspecialchars($row['campo1'],ENT_QUOTES), ); } $result->free_result(); $this->db->close(); return($arrDatos); } }
c.- nuestra vista (index_v.php):
<?php echo '<a title="Click aquà para exportar a PDF" href="' .base_url() . '/index.php/index_c/generar_pdf"><img src="' .base_url() . 'imagenes/pdf.png" alt="PDF" width="16" height="16" /></a>';
d.- ahora debemos crear la función que se encarga de generar el PDF, lo ideal es tener esa función disponible siempre que deseemos hacer uso de ella y que sea una sola y no que este repetida en cada controlador, asà que la guardaremos en nuestro propio helper. Nos vamos a CodeIgniter --> system -->helpers y creamos un archivo con el nombre mod_ppal_helper.php y agregamos lo siguiente:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); if ( ! function_exists('generar_pdf')) { function generar_pdf($arrHeading,$arrData,$sTitulo){ // validamos los priemros dos parametros if(!is_array($arrHeading) or !is_array($arrData)){ return 0; } // seteamos el titulo, si es necesario $sTitulo = empty($sTitulo) ? 'NO SE HA DEFINIDO EL TITULO..' : $sTitulo; //instanciamos al objeto codeigniter $CI =& get_instance(); $CI->load->library('table'); // configuraciones de la tabla $tmpl = array('table_open' => '<table border="0" cellpadding="2" cellspacing="1">'); $CI->table->set_template($tmpl); $CI->table->set_heading($arrHeading); // iniciamos el HTML que enviaremos para generar el PDF $html = "<html><head> <style> h1{ font-family: times new roman; font-size: 50px; text-align:center; } table { color: #fff; font-weight: bold; font-family: Arial Black; font-size: 28px; background-color: #B10020; border: red 0px solid; } table td { font-weight: none; color: #000; background-color: #FAFAFA; font-size: 26px; font-family: times new roman; } </style> </head><body><h1>$sTitulo</h1>"; $html .= $CI->table->generate($arrData); $html .= '</body></html>'; // para evitar errores, limpiamos, // deshabilitamos los búferes de salida if(ob_get_contents()){ ob_end_clean(); } // incluimos el plugin require_once('./plugins/tcpdf/config/lang/spa.php'); require_once('./plugins/tcpdf/tcpdf.php'); // estas son las configuraciones para la generacion del PDF // los detalles los encuentras en la pagina oficial $pdf = new TCPDF(PDF_PAGE_ORIENTATION,PDF_UNIT,PDF_PAGE_FORMAT,true,'UTF-8',false); $pdf->SetCreator(PDF_CREATOR); $pdf->SetAuthor('aqui_tu_nombre'); $pdf->SetTitle($sTitulo); $pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001'); $pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); $pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); $pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED); $pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); $pdf->SetHeaderMargin(PDF_MARGIN_HEADER); $pdf->SetFooterMargin(PDF_MARGIN_FOOTER); $pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); $pdf->setLanguageArray($l); $pdf->setFontSubsetting(true); $pdf->SetFont('dejavusans', '', 12, '', true); $pdf->AddPage(); $pdf->writeHTML($html, true, false, true, false, ''); $pdf->Output('','D'); } } # END Mod Ppal Class /* End of file mod_ppal_helper.php */ /* Location: ./system/libraries/Mod_ppal.php */
e.- La configuración de la base de datos no tiene mayor misterio (CodeIgniter --> appliction --> config --> database.php):
$db['default']['hostname'] = 'localhost'; $db['default']['username'] = 'tu_usuario'; $db['default']['password'] = 'tu_password'; $db['default']['database'] = 'el_nombre_de_tu_base_de_datos';
Las librerÃas y los helpers los cargas como mejor te parezca, ya sea desde cada controlador o el autoload (CodeIgniter --> appliction --> config --> autoload.php):
// para la base de datos $autoload['libraries'] = array('database'); // url: para base_url() // mod_ppal: para generar_pdf() $autoload['helper'] = array('url','mod_ppal');
El código está lo suficientemente comentado, por lo que no veo la necesidad de explicar más, cualquier duda no dudes en consultar. No olvides agregar la imagen () a utilizar en (CodeIgniter --> imagenes).
Amigo lo probaré espero que sea de ayuda :D
ResponderEliminarUn exito muchas gracias me salvaste la vida, de forma local funciono perfectamente, si lo monto en un servidor funciona de igual manera???
ResponderEliminarsaludos y gracias!!
Si amigo, no deberÃas tener mayor problema.
ResponderEliminarHola amigo estoy tratando de hacer filtrando una tabla (Ejemplo: codigo, nombre, sexo) con un combobox, y solo quiero exportarlo al PDF los de sexo Masculino y no me sale, me podria ayudar porfavor
ResponderEliminarHola. Prueba cambiando la consulta directamente en la función get_data_pdf() del modelo, si todo es correcto deberÃa mostrarte el pdf y una vez verifiques que funciona, modifica esa función para pasarle los parámetros que recibes de tu formulario y asà vas armando la consulta según sea el caso.
ResponderEliminarUsa el Active Record de CodeIgniter: http://ellislab.com/codeigniter/user-guide/database/active_record.html