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.

Te invito a mi sitio web donde está mi CV en línea así como los servicios freelance que puedo ofrecerte huguidugui.com

Puedes ver también http://huguidugui.com/blog

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?

 
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 a huguidugui Cancelar respuesta

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 )

Google photo

Estás comentando usando tu cuenta de Google. 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 )

Conectando a %s

 
A %d blogueros les gusta esto: