Como integrar la libreria fpdf con el framework codeigniter

Stay hungry, stay foolish

Steve Jobs

En el post del dia de hoy voy a explicar como se puede integrar la librería fpdf con el framework CodeIgniter si se desean generar reportes en PDF,  en el ejercicio se va a crear un reporte sencillo, si quieres profundizar un poco mas sobre la librería fpdf echarle un vistazo a nuestro post Crear un reporte con FPDF usando PHP y MySQL  o revisar la documentación de esta librería.

El ejemplo consiste en generar un archivo pdf que muestre la lista completa de alumnos, utilizando la siguiente tabla

Base de datos

--
-- Estructura de tabla para la tabla `tblalumno`
--

CREATE TABLE IF NOT EXISTS `tblalumno` (
  `idalumno` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `paterno` varchar(15) NOT NULL,
  `materno` varchar(15) NOT NULL,
  `nombre` varchar(15) NOT NULL,
  `grado` varchar(10) NOT NULL,
  `grupo` varchar(2) NOT NULL,
  `fec_nac` date NOT NULL,
  PRIMARY KEY (`idalumno`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Reporte de alumnos en pdf

Vamos a comenzar descargando la librería fpdf desde su página oficial, una vez que tengamos el archivo se descomprime y copia hacia la carpeta application/third_party de CodeIgniter

fpdf CodeIgniter

Nos vamos al directorio application/libraries y creamos un archivo llamado Pdf.php con el siguiente código

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    // Incluimos el archivo fpdf
    require_once APPPATH."/third_party/fpdf/fpdf.php";

    //Extendemos la clase Pdf de la clase fpdf para que herede todas sus variables y funciones
    class Pdf extends FPDF {
        public function __construct() {
            parent::__construct();
        }
        // El encabezado del PDF
        public function Header(){
            $this->Image('imagenes/logo.png',10,8,22);
            $this->SetFont('Arial','B',13);
            $this->Cell(30);
            $this->Cell(120,10,'ESCUELA X',0,0,'C');
            $this->Ln('5');
            $this->SetFont('Arial','B',8);
            $this->Cell(30);
            $this->Cell(120,10,'INFORMACION DE CONTACTO',0,0,'C');
            $this->Ln(20);
       }
       // El pie del pdf
       public function Footer(){
           $this->SetY(-15);
           $this->SetFont('Arial','I',8);
           $this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
      }
    }
?>;

Ahora creamos nuestro modelo por lo tanto nos vamos al directorio application/models y creamos un archivo llamado alumno_modelo.php dentro del cual vamos a crear una función que se llame obtenerListaAlumnos() la cual se va a encargar de obtener la lista completa de registros que se encuentran almacenados en la tabla tblalumno.

<?php
class Alumno_modelo extends CI_Model {

    function __construct()
    {
        parent::__construct();
    }

    /* Devuelve la lista de alumnos que se encuentran en la tabla tblalumno */
    function obtenerListaAlumnos()
    {
    	$this->load->database();
        $alumnos = $this->db->get('tblalumno');
        return $alumnos->result();
    }
}
?>;

Ahora solo nos queda crear el controlador, para ello accedemos al directorio application/controllers y creamos un archivo llamado reporte.php, dicho archivo es el encargado de llamar al modelo, generar el pdf y mandarlo al navegador para su descarga.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Reporte extends CI_Controller {

	public function index()
	{
		// Se carga el modelo alumno
		$this->load->model('alumno_modelo');
		// Se carga la libreria fpdf
		$this->load->library('pdf');

		// Se obtienen los alumnos de la base de datos
		$alumnos = $this->alumno_modelo->obtenerListaAlumnos();

		// Creacion del PDF

		/*
		 * Se crea un objeto de la clase Pdf, recuerda que la clase Pdf
		 * heredó todos las variables y métodos de fpdf
		 */
		$this->pdf = new Pdf();
		// Agregamos una página
		$this->pdf->AddPage();
		// Define el alias para el número de página que se imprimirá en el pie
		$this->pdf->AliasNbPages();

		/* Se define el titulo, márgenes izquierdo, derecho y
		 * el color de relleno predeterminado
		 */
		$this->pdf->SetTitle("Lista de alumnos");
		$this->pdf->SetLeftMargin(15);
		$this->pdf->SetRightMargin(15);
		$this->pdf->SetFillColor(200,200,200);

		// Se define el formato de fuente: Arial, negritas, tamaño 9
		$this->pdf->SetFont('Arial', 'B', 9);
		/*
		 * TITULOS DE COLUMNAS
		 *
		 * $this->pdf->Cell(Ancho, Alto,texto,borde,posición,alineación,relleno);
		 */

		$this->pdf->Cell(15,7,'NUM','TBL',0,'C','1');
		$this->pdf->Cell(25,7,'PATERNO','TB',0,'L','1');
		$this->pdf->Cell(25,7,'MATERNO','TB',0,'L','1');
		$this->pdf->Cell(25,7,'NOMBRE','TB',0,'L','1');
		$this->pdf->Cell(40,7,'FECHA DE NACIMIENTO','TB',0,'C','1');
		$this->pdf->Cell(25,7,'GRADO','TB',0,'L','1');
		$this->pdf->Cell(25,7,'GRUPO','TBR',0,'C','1');
		$this->pdf->Ln(7);
		// La variable $x se utiliza para mostrar un número consecutivo
		$x = 1;
		foreach ($alumnos as $alumno) {
			// se imprime el numero actual y despues se incrementa el valor de $x en uno
			$this->pdf->Cell(15,5,$x++,'BL',0,'C',0);
			// Se imprimen los datos de cada alumno
			$this->pdf->Cell(25,5,$alumno->paterno,'B',0,'L',0);
			$this->pdf->Cell(25,5,$alumno->materno,'B',0,'L',0);
			$this->pdf->Cell(25,5,$alumno->nombre,'B',0,'L',0);
			$this->pdf->Cell(40,5,$alumno->fec_nac,'B',0,'C',0);
			$this->pdf->Cell(25,5,$alumno->grado,'B',0,'L',0);
			$this->pdf->Cell(25,5,$alumno->grupo,'BR',0,'C',0);
			//Se agrega un salto de linea
			$this->pdf->Ln(5);
		}
		/*
		 * Se manda el pdf al navegador
		 *
		 * $this->pdf->Output(nombredelarchivo, destino);
		 *
		 * I = Muestra el pdf en el navegador
		 * D = Envia el pdf para descarga
		 *
		 */
		$this->pdf->Output("Lista de alumnos.pdf", 'I');
	}
}

Listo, ya nos debe mostrar el reporte en pdf. Para más información puedes revisar la documentación de CodeIgniter, documentación de fpdf o dejar un comentario.

Si la información de este post te fue de ayuda dale me gusta a nuestra pagina de Facebook, añádenos a tus círculos o recomienda nuestro blog.