Instalar la libreria FPDF y algunos comandos básicos

FPDF (Free PDF)

Esta libreria nos permite crear de una manera muy cómoda y sencilla un documento PDF bastante personalizado: cabeceras, pies de página, colores, imágenes (jpeg, png, gif), saltos de línea, saltos de página y diferentes fonts y codificaciones entre otras cosas.
Podemos realizar incluso referencias al propio documento y poderosas tablas, las cuales pueden venir muy bien para resultados de consultas en bases de datos.

  • Instalación

Descargamos la versión más reciente desde su página oficial, en la cual nos encontraremos un archivo comprimido zip con tutoriales y explicaciones de cada función en particular (también disponibles en la página oficial). El archivo más importante del zip es el llamado fpdf.php aunque también necesitaremos tener en nuestro directorio local, el archivo fpdf.css y la carpeta de font.

  • Errores comunes

Antes de empezar a jugar con esta libreria, comentaré un error que puede aparecernos, para de esta manera, poder evitarlo. Puede que nos saltase un error que nos dijera “Cannot modify header information – headers already sent by …”. Esto es solucionable si en el script en donde vamos a realizar el pdf no introducimos nada antes ni después de los tags de inicio y fin de php, es decir, nada antes ni después de “, , , o cualquier otro). Esto puede ser debido a que esta libreria toca la cabecera de nuestro documento, por lo que no debe de haber nada antes de tal.
Otro error común, sobre todo para los castellano parlantes, puede ser el uso de terminadas letras, como la ñ o las vocales acentuadas. Para ello, suponiendo que nuestro texto se encuentre en una variable, la parsearemos de la siguiente manera:

$str = utf8_decode($str);

Por otra parte, puede que sea un caracter “extraño” como el símbolo del euro. Por ello, para estos casos, los definiremos de la siguiente forma:

define('EURO', chr(128));

$str = "Ejemplo de € y " . EURO;
// En nuestro PDF nos muestra lo siguiente: "Ejemplo de ? Y €"

  • Introducción

Para indicar que estamos usando esta libreria, tenemos que hacer referencia al archivo fpdf.php de la siguiente forma:

require("fpdf.php");

Por otra parte, para iniciar la creación del documento PDF, tenemos que indicarlo del siguiente modo:

$pdf=new FPDF();

El funcionamiento a grosso modo es muy simple. Vamos añadiendo páginas y en cada una añadimos lo que queramos. Cuando queramos editar propiedades del tipo colores o fuentes de texto, tenemos que declararlas justo antes de usarlas. Es decir, si queremos hacer dos líneas de texto con fuentes distintas, primero tenemos que declarar las propiedades de la primera fuente, luego escribir la primera línea, declarar las propiedades de la segunda y escribirla.
De igual modo, si alguna vez escribimos algo que ocupe más de una página, esta se añade automáticamente, aunque disponemos de una función (Addpage) para añadir páginas, la cual nos permite acabar de escribir en una página o poner páginas en blanco.
Hay algunas propiedades también, como las cabeceras o los piés de página, que no basta con declarar lo que queremos, sino que hay que realizar la propia función como veremos más adelante. De la misma forma que anteriormente hemos indicado que se iniciaba la configuración del documento pdf, para exportarlo y que salga como tal, dispondremos de otra función que tendremos que aplicar al final (Output).

  • Funciones básicas

Addpage (añade una página), Cell (crea una celda), setFont (declaramos un estilo de fuente), Ln (salto de línea), Image (añade una imagen), setFillColor (establece un color de relleno), setTextColor (establece un color para el texto), SetX (posicionar en el eje X), SetY (posicionar en el eje Y), GetX (obtener posición en el eje X), GetY (obtener posición en el eje Y). Ejemplo:

AddPage();
//Añadimos una página.

$pdf->Addpage();
//Añadimos otra página. De esta manera, la primera quedará en blanco.

$pdf->SetFont('Arial','B',16);
//Seleccionamos la font de nuestros textos. Serial Arial, Bold, de tamaño 16. Ver fonts permitidas en la línea
//104 del archivo fpdf.php. Los estilos permitidos son B (negrita), U (subrayado), I (cursiva), vacio (normal).

$pdf->Cell(10, 20, "Texto interior", 1);
//Creamos una celda de 10 de ancho, 20 de alto, con ese texto en su interior, y 1 de borde.


$pdf->setFillColor(10, 200, 14);
//Declaramos un color de relleno RGB (verde claro).

$pdf->Ln(30);
//Salto de línea de tamaño 30.

$pdf->Cell(50, 20, "Otro texto", 2, 2, L, true);
//50 de ancho, 20 de alto, con ese texto, 2 de borde, L de alineado (landscape), y true es el relleno definido antes
//El segundo 2, nos permite decidir dónde irá el elemento posterior a este. En caso de estar en 2, irá debajo.
// Si hay un 1, al comienzo de la línea siguiente. Si hay un 0, irá a la derecha.

$variable = $pdf->GetY();
// obtenemos la posición Y.

$pdf->SetX($variable);
//Declaro que quiero que el siguiente elemento tenga de posición X, lo que tenía de posición Y.

$pdf->Cell(5, 5, $variable, 1);
//Creamos esta celda.

$pdf->Image("google.jpg", 80, 0, 70, 40);
//Ponemos una imagen. El segundo y el tercer parámetro son las coordenadas X e Y, los dos siguientes 
//son la anchura y la altura respectivamente.

$pdf->Output();
//Función que nos permite obtener el PDF.
?>

  • Funciones más interesantes

En este apartado trataremos de hacer una cabecera y un pie de página para que salgan en todas las páginas. Para esto, hay que extender la clase FPHP como veremos posteriormente de manera que habrá que crear las funciones Footer y Header. Por otra parte, aprenderemos a referenciar objetos dentro del propio documento y establecer el número de páginas totales y actual.

SetFont('Arial','B',15);
    //Declaramos una fuente
    $this->Cell(30,10,'Titulo',1,0,'C');
    //Titulo
    $this->Ln(20);
	//Salto de línea
}

//Pie de página
function Footer()
{
    
    $this->SetY(-15);
    //Posición: a 1,5 cm del final
    $this->SetFont('Arial','I',8);
    
    $this->Cell(0,10,'Página '.$this->PageNo().'/{nb}',0,0,'C');
	//PageNo nos muestra el número de página actual
	//El "/{nb}" es para que nos muestre el número de páginas máximo
	//de tal forma que se quede del tipo "Página 1/2"
	//Esto es debido a la función posterior "AliasNbPages"
}
}

//Creación del objeto de la clase heredada
$pdf=new PDF();
$pdf->AliasNbPages();
//Es la función que nos declara un Alias por defecto para 
//obtener el número de páginas máximo

$pdf->AddPage();
$link = $pdf->AddLink();
//Establecemos el link

$pdf->Write(5, "Pulsar aquí", $link);
//Al pulsar en ese texto, nos linkeamos gracias al link declarado anteriormente

$pdf->AddPage();
$pdf->AddPage();
$pdf->SetLink($link, 70);
//Establecemos el link a 1,5 centímetros (eje Y)

$pdf->Output();
?>

Para finalizar, decir que hay multitud de funciones para un uso más intensivo y completo de esta libreria que se encuentran en la parte de “Manual” su página web. En estas breves páginas he intentado escribir las más importantes y útiles para un sencillo uso.

Saludos, lipman.

16 Replies to “Instalar la libreria FPDF y algunos comandos básicos”

  1. es decir cual es la estructura para traerme la base de datos al archivo pdf, lo necesito para poder imprimirlos, lo h intentado pero me sale este error:

    Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\siv\clases\prueba.php:1) in C:\xampp\htdocs\siv\clases\fpdf.php on line 1028
    FPDF error: Some data has already been output to browser, can’t send PDF file.

    espero me puedan ayudar!!

  2. No entiendo muy bien a qué te refieres.

    Te puedes conectar a la BD con las propias funciones de PHP y obtener los resultados de las consultas, solo que en lugar de sacarlas por pantalla con un echo o algo así, las pones en el PDF usando las funciones de FPDF.

    Igual el error ese lo puedes solucionar quitando las cabeceras del archivo php, es decir, que todo el archivo php empiece y acabe por < ? y ?> y no haya nada de .

    Un saludo

  3. Umm, bueno si estoy mostrando con un echo, este es mas o menos el ejemplo del codigo:

    Equipos Existentes

    Equipos Existentes

    Cod
    Nombre
    Descripcion
    Fecha de Ingreso

    addPage();

    $obj->setFont(“Arial”,”B”,13, “c”);

    $obj->cell(200, 5, “Listado de Equipos Existentes”);

    $obj->output();
    ?>

  4. Equipos Existentes

    Equipos Existentes

    Cod
    Nombre
    Descripcion
    Fecha de Ingreso

    addPage();

    $obj->setFont(“Arial”,”B”,13, “c”);

    $obj->cell(200, 5, “Listado de Equipos Existentes”);

    $obj->output();
    ?>

  5. No me toma el codigo pero lo que estoy hacien es haciendo la conexion en la parte de la cabecera y luego haciendole el llamado al pdf.

  6. Sigo sin entenderte demasiado, vamos a ver:

    -Te conectas a la base de datos
    -Obtienes los resultados (en variables por ejemplo)
    -Posteriormente, aplicas el resto del codigo:

    addPage();
    $obj->setFont(“Arial”,”B”,13, “c”);
    $obj->cell(200, 5, “Listado de Equipos Existentes”);
    $obj->cell(X, Y, $cod);
    $obj->cell(X, Y, $nombre);
    […]
    $obj->output();
    ?>

    Un saludo

  7. Buenas …, actualmente estoy usando FPDF y se ejecuta perfectamente, el problema es que en ocasiones cuando enciendo el servidor y las demás (clientes)computadoras envían impresiones a una impresora Epson LX 300+II que esta con el servidor, el PDF se gira 90º al momento de imprimir. Es muy raro tengo que reiniciar el servidor y recién funciona o en el caso de los clientes tengo q eliminar la impresora y agregarla nuevamente, la red está en sistema operativo Windows 7. Cuál es el problema
    SetMargins(0, 0,0);
    $pdf->AddFont(‘Calibri’,”,’calibrib.php’);
    $pdf->AddPage();
    $pdf->SetFont(‘Calibri’,”,11);

    $pdf->Text(25,20,’COMPROBANTE DE PAGO *’);

    $pdf->Text(95,80,’INGRESO’);

    $pdf->Text(80,20,’Nro:’.$nroBoucher);

    $pdf->Text(1,25,’PRESTAMO’);
    $pdf->Text(1,30,’CUENTA’);
    $pdf->Text(1,35,’MOVIMIENTO’);
    $pdf->Text(1,40,’SOCIO’);
    $pdf->Text(1,45,’CUOTA’);
    $pdf->Text(1,50,’M. FIJADO’);
    $pdf->Text(1,55,’F. FIJADA’);
    $pdf->Text(1,60,’M. PAGADO’);
    $pdf->Text(1,65,’F. PAGADO’);
    $pdf->Text(1,70,’OPERADOR’);

    //TITULOS DEL LADO DERECHO
    $pdf->Text(30,25,’:’.$tipoPrestamo);
    $pdf->Text(30,30,’:’.$codCuentaPrestamo);
    $pdf->Text(30,35,’:’.$nroPrestamo);
    $pdf->Text(30,40,’:’.$cliente);
    $pdf->Text(30,45,’:’.$nroCuota);
    $pdf->Text(30,50,’:’.$moneda.$montoProgamado);
    $pdf->Text(30,55,’:’.date(“d/m/Y”,strtotime( $fechaProgramado)));
    $pdf->Text(30,60,’:’.$moneda.$montoPagado);
    $pdf->Text(30,65,’:’.date(“d/m/Y – H:i”,strtotime( $fechaPagado)));
    $pdf->Text(30,70,’:’.$operador);

    $pdf->Output();

    ?>

  8. Te comento: en ese código no hay nada acerca de la orientación de la página en PDF. Esto quiere decir que probablemente el problema no sea de aquí. Puedes comprobarlo ejecutándolo en un navegador web, o en cualquier sitio que te permita previsualizarlo realmente.

    Yo apostaria a que es un problema de configuración de la impresora, que al agregarla, o al reiniciar, se reseteen algunas opciones y vuelva a estar como originalmente deberia. De la misma forma, ya todos sabemos que desde la propia impresora puedes elegir la forma de imprimir, asi que como te digo, apostaria a que el problema no viene de aquí.

    Un saludo.

  9. Buenos Dias
    Necesito la colaboración cuando utilizo $pdf->Output(); no me genera el pdf en el explorador que estoy utilizando, pero si lo Direcciono a una unidad del equipo me genera el pdf sin ningun problema por ejemplo $pdf->Output(“D:CitacionComite.pdf”);

  10. para solo mostrar la fecha actual usando fpdf mas un texto (ejemplo: En Santiago, a fecha)
    seria algo como esto
    $pdf->Text (“En Santiago, a)
    $pdf->Text(30,55,’:’.date(‘d/m/Y’)

  11. Hola, estoy empezando en este ambiente del fpdf no se si me puedan ayudar se los agradecere, requiero hacer un que al dar click en un boton aparezca un pdf con un cuestionario (plantilla no cambia) pero con cada respuesta que se conecte a mi bd mysql para obtener información del usuario que la contesto si me pueden ayudar me contactan, gracias

  12. Hola, quisiera porfavor si me pueden si existe alguna funcion para insertar listas como estas en un documento pdf y un ejemplo

    Documentos
    Archivos

    Les agradeceria su rpta, gracias!

Leave a Reply

Your email address will not be published. Required fields are marked *