RSS

FPDF: posiciones (x, y)

15 Nov

Durante el proceso de diseño de tablas, reportes, formatos, texto y demás elementos dentro de un documento PDF generado con la librería FPDF, se llega a un punto en el que necesitas colocar dichos elementos en ciertas posiciones de la hoja.

Cuando yo inicié  a usar esta librería, no tenía idea cuáles valores poner para la pareja (X, Y), en cierto métodos que requieren está información o para asignar una posición que necesite una celda en particular.

En base a este ejercicio totalmente estático les muestro de una forma muy colorida  ^__^ varias posiciones de la hoja de tamaño A4 (conocida en México como ‘tamaño carta’), siendo ésta la más común para documentos.

Las medidas de la hoja tamaño A4 son las mostradas en la imagen (210 x 297). Las coordenada para un punto (x, y) se toman a partir de la esquina superior izquierda, siendo éste el origen: (0, 0). Viendo la imagen podemos deducir que el punto verde de la esquina inferior derecha es: (210, 297). En base a estas medidas, ya podemos colocar lo que queramos usando el método SetXY previamente a otro método (por ejemplo Cell) o en su caso, los métodos que requieren de parámetro el punto (X, Y).

Hoja tamaño A. Medidas generales.

Hoja tamaño A4: Medidas generales.

Ahora les muestro un ejercicio práctico para colocar rectángulos dentro la hoja y con ello ver mejor las posiciones, así mismo, se pueden dar una idea general de cómo diseñar un cierto documento.

<?php
require('fpdf.php');

class PDF extends FPDF
{

} // FIN Class PDF

$pdf = new PDF();

$pdf->AddPage();
$pdf->SetFont('Courier','',8);
//======================================
// Primer bloque - 3 rectángulos      =
//======================================
//Rectángulo Azul:
//Elegir color RGB que llevará Rect al tener el parametro 'F'
//Rect(x , y, ancho, alto, 'F') F rellena con el color elegido
//Line(x1, y1, x2, y2) que sale de la esquina superior izquierda
//cada rectángulo
//Elegir la posición de la celda para colocar el texto
//Usamos una celda para poner texto
$pdf->SetFillColor(80, 150, 200);
$pdf->Rect(10, 10, 95, 20, 'F');
$pdf->Line(10, 10, 15, 15);
$pdf->SetXY(15, 15);
$pdf->Cell(15, 6, '10, 10', 0 , 1); //Celda

//Amarillo
$pdf->SetFillColor(255, 215, 0);
$pdf->Rect(110, 10, 45 , 20, 'F');
$pdf->Line(110, 10, 115, 15);
$pdf->SetXY(115, 15);
$pdf->Cell(15, 6, '110, 10', 0 , 1);
//Verde
$pdf->SetFillColor(0, 128, 0);
$pdf->Rect(160, 10, 40 , 20, 'F');
$pdf->Line(160, 10, 165, 15);
$pdf->SetXY(165, 15	);
$pdf->Cell(15, 6, '160, 10', 0 , 1);
//========================================

//========================================
//  Segundo bloque - 1 rectángulo       ==
//========================================
//Salmón
$pdf->SetFillColor(255, 99, 71);
$pdf->Rect(10, 35, 190, 140, 'F');
$pdf->Line(10, 35, 15, 40);
$pdf->SetXY(15, 40);
$pdf->Cell(15, 6, '10, 35', 0 , 1);
//========================================

//========================================
//  Tercer bloque - 2 rectángulos       ==
//========================================
//Rosa
$pdf->SetFillColor(255, 20, 147);
$pdf->Rect(10, 180, 90, 50, 'F');
$pdf->Line(10, 180, 15, 185);
$pdf->SetXY(15, 185);
$pdf->Cell(15, 6, '10, 180', 0 , 1);
//Café
$pdf->SetFillColor(233, 150, 122);
$pdf->Rect(110, 180, 90, 50, 'F');
$pdf->Line(110, 180, 115, 185);
$pdf->SetXY(115, 185);
$pdf->Cell(15, 6, '110, 180', 0 , 1);
//========================================

//========================================
//  Cuarto bloque - 6 rectángulos       ==
//========================================
//Verde
$pdf->SetFillColor(124, 252, 0);
$pdf->Rect(10, 235, 40, 25, 'F');
$pdf->Line(10, 235, 15, 240);
$pdf->SetXY(15, 240);
$pdf->Cell(15, 6, '10, 235', 0 , 1);
//Café
$pdf->SetFillColor(160 ,82, 40);
$pdf->Rect(60, 235, 40, 25, 'F');
$pdf->Line(60, 235, 65, 240);
$pdf->SetXY(65, 240);
$pdf->Cell(15, 6, '60, 235', 0 , 1);
//Marrón
$pdf->SetFillColor(128, 0 ,0);
$pdf->Rect(10, 265, 40, 25, 'F');
$pdf->Line(10, 265, 15, 270);
$pdf->SetXY(15, 270);
$pdf->Cell(15, 6, '10, 265', 0 , 1);
//Morado
$pdf->SetFillColor(153, 50, 204);
$pdf->Rect(60, 265, 40, 25, 'F');
$pdf->Line(60, 265, 65, 270);
$pdf->SetXY(65, 270);
$pdf->Cell(15, 6, '60, 265', 0 , 1);
//Azul
$pdf->SetFillColor(0, 191, 255);
$pdf->Rect(110, 235, 90, 25, 'F');
$pdf->Line(110, 235, 115, 240);
$pdf->SetXY(115, 240);
$pdf->Cell(15, 6, '110, 235', 0 , 1);
//Verde
$pdf->SetFillColor(173, 255, 47);
$pdf->Rect(110, 265, 90, 25, 'F');
$pdf->Line(110, 265, 115, 270);
$pdf->SetXY(115, 270);
$pdf->Cell(15, 6, '110, 265', 0 , 1);

$pdf->Output(); //Salida al navegador
?>

Acá la salida en el navegador, cabe mencionar que es un solo archivo index.php  y la librería FPDF descomprimida en una carpeta de trabajo.

Posiciones en la hoja A4

Posiciones en la hoja A4

En lo personal, yo imprimí esta hoja y la tengo como referencia para cuando se ha de hacer un diseño y me es más fácil colocar las posiciones de lo que requiero en la hoja.

Ojalá sea de ayuda a muchos, como lo ha sido para mí. Pues bien, así lo hice 😀

Acá explico cómo generar desde una hoja en blanco hasta obtener datos de la BD con FPDF

@huguidugui || ringhugos@gmail.com

¿Quieres apoyar el blog?

Anuncios
 
5 comentarios

Publicado por en 15 noviembre, 2013 en FPDF, PHP

 

Etiquetas: ,

5 Respuestas a “FPDF: posiciones (x, y)

  1. Mauricio

    30 abril, 2014 at 04:18

    Gracias!! ciertamente es muy útil!

     
  2. coficksote

    30 diciembre, 2014 at 11:33

    como agrego un texto(cadena) a todas las hojas del pdf (ya existente) o solo a la ultima ??

     
    • huguidugui

      30 diciembre, 2014 at 12:04

      Hola cofick 😀 Bueno espero haber entendido bien tu duda. Para agregar texto a todas las hojas (ya sea en el encabezado o footer de la hoja), puedes usar los métodos Header() y/o Footer() (explicado en los post que tengo) y para agregar solo al final mmm … se me ocurre que cuando llames a tu método para generar la tabla, enseguida poner el texto que deseas seteando con SETxY() para que quede siempre al final de la última hoja.

      Saludos, gracias por leer el blog 😀

       
      • coficksote

        30 diciembre, 2014 at 12:36

        el problema es que cuando el documento tiene mas de dos hojas solo se guarda la primera (una sola hoja) pero si pinta la cadena

        require_once(‘fpdf17/fpdf.php’);
        require_once(‘FPDI-1.5.2/fpdi.php’);

        $f=$_GET[‘f’];//recibimos el nombre del formato .pdf

        $pdf =& new FPDI();
        $pdf->AddPage();

        $i=1;
        //Set the source PDF file
        $pagecount = $pdf->setSourceFile(“firmados/”.$_GET[‘f’]);

        //Import the first page of the file
        $tpl = $pdf->importPage($i);
        //Use this page as template
        $pdf->useTemplate($tpl);

        //Go to 1.5 cm from bottom

        class PDF extends FPDF
        {
        function Footer()
        {
        $pdf->SetY(-5);
        //Select Arial italic 8
        $pdf->SetFont(‘Arial’,’I’,8);
        //Print centered cell with a text in it
        //$pdf->Cell(0, 10, $cad , 0, 0, ‘C’);
        $pdf->MultiCell(0,5,$todo,1);
        }
        }

        $pdf->Output(“firmados/”.$_GET[‘ids’].’_’.$_GET[‘f’], “F”);

         
  3. coficksote

    30 diciembre, 2014 at 12:24

    intento usar footer() pero no pinta nada

    class PDF extends FPDF
    {
    function Footer()
    {
    $pdf->SetY(-5);
    //Select Arial italic 8
    $pdf->SetFont(‘Arial’,’I’,8);
    //Print centered cell with a text in it
    //$pdf->Cell(0, 10, $cad , 0, 0, ‘C’);
    $pdf->MultiCell(0,5,$todo,1);
    }
    }

     

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
A %d blogueros les gusta esto: