lunes, 19 de agosto de 2013

Exportar archivos pdf en CodeIgniter

En este post vamos a ver cómo podemos exportar los registros de una de una tabla
de la base de datosen formato pdf  desde CodeIgniter,  con la versión 0.09 de librería Ezpdf.

La web del autor de esta libreria: http://www.ros.co.nz/pdf.

Para descargar la última versión: http://sourceforge.net/projects/pdf-php

Paso 1

Descargar CodeIgniter y descomprimirlo en nuestro servidor renombrándolo como cipdf.

Paso 2

Ir a la carpeta cipdf/application/config/ para colocar los datos de la BD en database.php. Debemos verificar
que correspondan.

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'cipdf';

Paso 3


Ir a phpmyadmin y crear una base datos llamada cipdf, entrar a la misma y en la pestaña SQL ejecutar el
siguiente código:

CREATE TABLE IF NOT EXISTS `productos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nombre` varchar(150) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
  `cantidad` int(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;


INSERT INTO `productos` (`id`, `nombre`, `cantidad`) VALUES
(1, 'Queso Manchego La Pastora', 30),
(2, 'Mermelada de Sir Rodneys', 50),
(3, 'Queso gorgonzola Telino', 100),
(4, 'Algas Konbu', 45),
(5, 'Arenque blanco del noroeste', 55),
(6, 'Cordero Alice Springs', 120);


Paso 4

 

Descargar aquí la versión 0.09 de la librería Ezpdf y descomprimirla en cipdf/application/third_party

En CodeIgniter podemos crear nuestras propia librerías o como en este caso utilizar una librería externa;
la documentación de CI aconseja colocar las librerías que no pertenecen a CodeIgniter en el directorio third_party.

Paso 5

 

Ir a cipdf/application/ y crear un archivo llamado pdf.php; este archivo es el que va a extender a
la clase ezpdf, y el que además vamos a cargar en el controlador para la creación del archivo pdf


Codigo de pdf.php


<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
require_once(APPPATH."/third_party/ezpdf/class.ezpdf.php");

class Pdf extends Cezpdf {
    public function __construct() {
       
            parent::__construct();
       

    }
}

paso 6

 


crear un modelo llamado pdf_model.php en cipdf/application/models/

Codigo de pdf_model.php


<?php

class Pdf_Model extends CI_Model {
   
  public function get_products(){
                                 
    $query = $this->db->get('productos');
    return $query->result();
   
      }   
 
}


paso 7

 


crear un controlador llamado pdf_controller.php en cipdf/application/controllers/

Código de pdf_controller.php



<?php

class Pdf_Controller extends CI_Controller {

    function __construct() {
        parent::__Construct();
       
        $this->load->helper(array('html','url'));
        $this->load->library(array('table','pdf'));
        $this->load->database();
        $this ->load->model('Pdf_Model');
       }
   
    public function index(){   
             
        $data['title']='Uso de Ezpdf con CodeIgniter';
        $data['content']= $this->Pdf_Model->get_products();
           
        $this->load->view('pdf_view',$data);
       
    }
   
    public function export(){   
                 
        $data['title']='Uso de Ezpdf con CodeIgniter';
        $data['author']='Admin';
        $data['subject']='Listado de Productos';
       
        $data['content']= $this->Pdf_Model->get_products();
           
        $this->load->view('export_pdf',$data);
   
   }   

}

Paso 8

 


Aquí creamos 2 vistas, una es para mostrar los datos que se van a exportar a pdf y la otra espara crear el documento pdf. La vista en la que mostramos los registros a exportar la llamamos pdf_view.php

Código de pdf_view.php


<!DOCTYPE html>
<html>
<head>
    <title><?=$title?></title>
</head>   
<body>
<div align="center">
<?=heading($title, 3);

echo anchor('pdf_controller/export','Exportar a pdf').br(2);

$this->table->set_heading('Nombre', 'Cantidad');
   
     foreach ($content as $results) {
          $this->table->add_row($results->nombre, $results->cantidad);   
     }

$tmpl = array ('table_open'=>'<table border="1" cellpadding="2" cellspacing="1">');
$this->table->set_template($tmpl);
echo $this->table->generate();
?>
</div>   
</body>
</html>


La vista en la que se crea el archivo pdf la llamamos export_pdf.php

Código de export.php


<?php
$this->pdf->selectFont(APPPATH.'/third_party/ezpdf/fonts/Helvetica-Oblique.afm'); // Tipo de letra

$pdf_info = array ('Title'=>$title,'Author'=>$author,'Subject'=>$subject,);
$this->pdf->addInfo($pdf_info);   

foreach ($content as $results) {
    $contenido[]=array
    (
        'Nombre'=>utf8_decode($results->nombre),
        'Cantidad'=>$results->cantidad
    );
   
}
$options = array(
              'shadeCol'=>array(0.8,0.8,0.8),                                       
              'width'=>400   //Ancho de la Tabla.
            );
$this->pdf->ezText($title."\n",10,array('justification'=>'center'));   
$this->pdf->ezTable($contenido);
$this->pdf->ezStream();

Últimos 2 pasos


vamos a cipdf/application/config/ y definimos la base url en config.php; Más o menos por la 17

$config['base_url'] = 'http://localhost/cipdf/';

el último paso es definir el controlador que cargará por defecto; en el mismo directorio config/ abrimos autoload.php y más o menos por la linea 41 lo determinamos.

$route['default_controller'] = "pdf_controller";
Descargar archivos