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 (

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