RSS

FPDF: Llenar formatos (Llenado 3/3)

10 Dic

Bueno, para concluir, se colocarán en las respectivas posiciones las celdas que contendrán la información que se recibe de la base de datos.

Para ello necesitaremos lo siguiente: haremos la llamada a la base de datos la cual nos regresará un arreglo asociativo con la información, en este caso de ejemplo, los datos de una persona. También requerimos otro arreglo asociativo de coordenadas (x, y). Una vez teniendo ambos arreglos, se pondrán en un ciclo y se extraerá un par de coordenadas que se le pasarán al método SetXY que colocará la celda en la posición que se asigne, y a su vez, se extraerá un dato de la persona y se la pasará al método Cell.

El arreglo de coordenadas, en este caso se me facilitó porque usé para colocar la información dentro del formato, líneas con el método Line. Cabe mencionar que el primer parámetro que requiere el método Line es donde comienza la línea. Así que, para saber dónde iría cada celda solo me fijé en este primer parámetro y aumenté 2 unidades a la derecha (coordenada X) y una unidad hacia arriba (coordenada Y) y este par es el que coloqué en el arreglo de coordenadas. Por ejemplo: Line(40, 50, 70, 50); <– para colocar la celda sería: SetXY(42, 49) Cell (parámetros…)

Quedará más claro viendo el código 🙂 Espero que los comentarios del código ayuden 😀

index.php

<?php
include_once('PDF.php');
include_once('myDBC.php');

$pdf = new PDF();

$pdf->AddPage();
$pdf->SetFont('Arial','B', 10);
//Margen decorativo iniciando en 0, 0
$pdf->Image('fondo.jpg', 0,0, 210, 295, 'JPG');

//Imagen izquierda
$pdf->Image('chico.png', 25, 25, 17, 25, 'PNG');

//Imagen derecha
$pdf->Image('vomito.jpg', 155, 27, 25, 22, 'JPG');

//Texto de Título
$pdf->SetXY(60, 25);
$pdf->MultiCell(65, 5, utf8_decode('AQUI PONDREMOS UN TÍTULO REPRESENTATIVO DE ALGUNA EMPRESA O INSTITUCIÓN'), 0, 'C');

//Texto Explicativo
$pdf->SetFont('Courier','', 7);
$pdf->SetXY(48, 45);
$pdf->MultiCell(100, 4, utf8_decode('AQUI PONDREMOS UN EXPLICACIÓN PARA DESCRIBIR ALGUN PROCESO O EL TIPO DE FORMATO QUE SE ESTA DEFINIENDO O CUALQUIER OTRA COSA :P'), 0, 'J');

//De aqui en adelante se colocan distintos métodos
//para diseñar el formato.

//Fecha
$pdf->SetFont('Arial','', 12);
$pdf->SetXY(145,60);
$pdf->Cell(15, 8, 'FECHA:', 0, 'L');
$pdf->Line(163, 65.5, 185, 65.5);

//Nombre //Apellidos //DNI //TELEFONO
$pdf->SetXY(25, 80);
$pdf->Cell(20, 8, 'NOMBRE(S):', 0, 'L');
$pdf->Line(52, 85.5, 120, 85.5);
//*****
$pdf->SetXY(25,100);
$pdf->Cell(19, 8, 'APELLIDOS:', 0, 'L');
$pdf->Line(52, 105.5, 180, 105.5);
//*****
$pdf->SetXY(25, 120);
$pdf->Cell(10, 8, 'DNI:', 0, 'L');
$pdf->Line(35, 125.5, 90, 125.5);
//*****
$pdf->SetXY(110, 120);
$pdf->Cell(10, 8, utf8_decode('TELÉFONO:'), 0, 'L');
$pdf->Line(135, 125.5, 170, 125.5);

//LICENCIATURA  //CARGO   //CÓDIGO POSTAL
$pdf->SetXY(25, 140);
$pdf->Cell(10, 8, 'LINCECIATURA EN:', 0, 'L');
$pdf->Line(27, 154, 65, 154);
//*****
$pdf->SetXY(80, 140);
$pdf->Cell(10, 8, 'CARGO:', 0, 'L');
$pdf->Line(75, 154, 115, 154);
//*****
$pdf->SetXY(125, 140);
$pdf->Cell(10, 8, utf8_decode('CÓDIGO POSTAL:'), 0, 'L');
$pdf->Line(120, 154, 170, 154);

//Creamos objeto de myDBC y se llama al método
//que traerá el arreglo con la información de
//una persona, y se guarda en $datosConsulta
$seleccion = new myDBC();
$datosConsulta = $seleccion->seleccionar_datos();

//Arreglo de coordenadas
//Basadas en la primera coordenada de Line
$misCoordenadas = array(
						array('x' => 165, 'y' => 58), //Fecha
						array('x' => 54, 'y' => 78), //Nombre
						array('x' => 54, 'y' => 98), //Apellidos
						array('x' => 37, 'y' => 118), //DNI
						array('x' => 137, 'y' => 118), //Teléfono
						array('x' => 29, 'y' => 148), //Licenciatura
						array('x' => 77, 'y' => 148), //Cargo
						array('x' => 135, 'y' => 148) //Código postal
				  );

//Este paso es un "truco" para poder iterar el arreglo
//de la consulta y recorrer uno a uno cada elemento.

//Crear un arreglo
$arreglo = array();
//Convertirlo en arreglo con índices
for($i = 0; $i < count($datosConsulta); $i++){
	foreach($datosConsulta[$i] as $clave=>$valor){
		$arreglo[] = $valor;
	}
}

//Ahora se usará este $arreglo junto con $mis Coordenadas
//Se obtiene un elemento de la consulta y un par de coordenadas
//que serán pasado a SetXY y Cell
for($i = 0; $i < count($misCoordenadas); $i++)
{
	$pdf->SetXY($misCoordenadas[$i]['x'], $misCoordenadas[$i]['y']);
	$pdf->Cell(40, 7, utf8_decode($arreglo[$i]), 0);
}

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

?>

Y la salida es la siguiente:

Formato lleno con información de la BD

Formato lleno con información de la BD

____________________________________________________________________________

Ahora los archivos de conexión a la base de datos:

dbconfig.php

<?php
	define("DB_SERVER", "localhost");
	define("DB_USER", "root");
	define("DB_PASS", "********"); //Poner su password
	define("DB_NAME", "empresa");
?>

myDBC.php

<?php
class myDBC {
	public $mysqli = null;

	public function __construct() {

		include_once "dbconfig.php";
    	$this->mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASS, DB_NAME);

		if ($this->mysqli->connect_errno) {
			echo "Error MySQLi: ("&nbsp. $this->mysqli->connect_errno.") " . $this->mysqli->connect_error;
			exit();
		}
		$this->mysqli->set_charset("utf8");
	}

	public function __destruct() {
		$this->CloseDB();
	}

    public function runQuery($qry) {
        $result = $this->mysqli->query($qry);
        return $result;
    }

    public function CloseDB() {
        $this->mysqli->close();
    }

    public function clearText($text) {
        $text = trim($text);
        return $this->mysqli->real_escape_string($text);
    }

	public function seleccionar_datos()
	{
		$q = 'select fecha, nombre, apellidos, dni, telefono, licenciatura, cargo, cod_postal from empleado where dni=123456';

		$result = $this->mysqli->query($q);

		//Array asociativo que contendrá los datos
		$valores = array();

		if( $result->num_rows == 0)
		{
			echo'<script type="text/javascript">
				alert("ningun registro");
				</script>';
		}

		else{
			while($row = mysqli_fetch_assoc($result))
			{
				//Se crea un arreglo asociativo
				array_push($valores, $row);
			}
		}
		//Regresa array asociativo
		return $valores;
	}
}
?>

En este caso usé una base de datos llamada ‘empresa’ y una tabla llamada ‘empleado’:

CREATE TABLE `empleado` (
`dni` VARCHAR( 10 ) NOT NULL ,
`nombre` VARCHAR( 25 ) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL ,
`apellidos` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_swedish_ci NOT NULL ,
`telefono` VARCHAR( 20 ) NOT NULL ,
`cod_postal` VARCHAR( 9 ) NOT NULL ,
`licenciatura` VARCHAR( 15 ) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL ,
`cargo` VARCHAR( 15 ) NOT NULL ,
`fecha` VARCHAR( 15 ) NOT NULL ,
`comentarios` VARCHAR( 300 ) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL
) ENGINE = MYISAM;

Ojalá sea de mucha ayuda en sus proyectos 😀

@huguidugui || ringhugos@gmail.com

 
21 comentarios

Publicado por en 10 diciembre, 2013 en FPDF, PHP

 

Etiquetas: ,

21 Respuestas a “FPDF: Llenar formatos (Llenado 3/3)

  1. John Jairo

    24 enero, 2014 at 17:13

    Muchas gracias por el tuto. Aunque tengo un problema en especial, Cell me restringe a que debo acomodar el tamaño de la celda para que contenga toda la linea del registro y si el registro es muy largo sobrepasara la linea de la celda y se sobrepondra a la siguiente celda.

    El tema es que Multicell puede ajustar el texto al tamaño de la Celda pero inmediatamente inserta dicho registro en la celda y lo ajusta hace un salto de linea y no es posible pone “de manera facil” el siguiente registro en la siguiente celda inmediatamente despues.

    He encontrado que FPDF lo soluciono creando una libreria adicional llamada mc_table.php pero la verdad por la complejidad del codigo que manejo esta bien complicado aplicarlo, asi que si tienes un ejemplo de como poder realizar esto seria estupendo.

    Gracias

     
    • Elvin

      25 marzo, 2014 at 18:13

      Gracias por los Tutoriales es muy bueno, quería hacerte una pregunta, como tu creaste un ajuste de texto pero en una tabla, mi pregunta es como sería ajustar un texto en un llenado de formato en la clase PDF, te lo agradecería bastante 😀

       
  2. huguidugui

    8 febrero, 2014 at 01:00

    Hola Gilberto, me agradaría que me enviaras tu código para ver mejor que está sucediendo en el archivo donde estás haciendo el delete, a ringhugos@gmail.com. Saludos.

     
  3. huguidugui

    21 marzo, 2014 at 01:50

    Hola Adonay:
    Con mucho gusto te puedo ayudar, compárteme el código que estás trabajando y así será más fácil ver en qué te puedo ayudar. ringhugos@gmail.com
    Saludos y gracias por comentar 😀

     
  4. luis

    29 mayo, 2014 at 03:09

    buenas amigo, muy bueno el tutorial, pero veo q estas utilizando (mysqli) y no (mysql) yo no tengo conocimientos de mysqli solo de mysql, me interesa este codigo ya q es exactamente lo q necesito de verdad, pero como lo trabajo a MYSQL?? agradeceria tu respuesta

     
    • huguidugui

      29 mayo, 2014 at 11:38

      Hola Luis:
      De entrada debo decirte que las funciones de MySQL estarán obsoletas en poco tiempo, incluso el propio manual de PHP te recomienda empezar a usar MySQLi (https://php.net/manual/es/function.mysql-fetch-row.php ). Pero no creas que es más difícil, simplemente cambiaron la estructura de las funciones que ya conoces, a programación orientada a objetos. De este modo el rendimiento a niveles grandes de datos, es mucho mejor que las funciones procedurales que tiene MySQL (que fue buena en su tiempo).

      En lo personal te recomiendo que, si seguirás por el camino de programación web y motor de base de datos MySQL, comiences a hacer ejemplos con su extensión MySQLi (i improved==mejorada). La clase que yo uso está muy fácil de comprender, en el myDBC.php al final, escribes tus métodos de lo que se necesite (SELECT, INSERT, DELETE etc).

      Saludos. (Y)

      P.D.(Cualquiera que lea esto, si quieren que los agregue a DROPBOX o GoogleDrive envíenme un correo a ringhugos@gmail.com y digan en cual los agrego :D)

       
  5. luis

    29 mayo, 2014 at 13:35

    gracias huguidugui por tus consejos, lo tomare en cuenta, muy bueno este post me esta ayudando mucho, sabes me gustaria saber si tiene un post ya hecho de un sistema de comentarios asi como el tuyo o parecido pero que por lo menos tenga estas mismas funciones, es q llevo meses buscando y no consigo nada que me ayude, si puedes ayudarme te lo agradeceria, este es mi correo. sarsgaard95@outlook.com.. por si necesitas comunicarte

     
  6. jesus

    29 mayo, 2014 at 16:38

    me da este error.
    Fatal error: Class ‘PDF’ not found in C:\wamp\www\pdf llenado\index.php on line 12
    que sera si la libreria ya la tengo??

     
    • huguidugui

      30 mayo, 2014 at 01:43

      Son las rutas… checa bien desde donde estás llamando a tu clase con los métodos

       
      • jesus

        30 mayo, 2014 at 01:58

        La ruta de la libreria esta bien, creo q la solucione fue asi
        Class pdf extends fpdf { }eso faltaba, pero ahora el error q muestra son las tres imagenes q tienes tu en el pdf y es la de fondo, vomito y chico.

        Nota: o a q ruta te refieres?

         
  7. huguidugui

    10 junio, 2014 at 11:28

    Te puede servir el post de una tabla dinámica (o estática) http://wp.me/p24DD5-dd
    http://wp.me/p24DD5-bW y es cuestión de quitarle los estilo redondeados a las celdas y listo, puedes tener una tabla con encabezados y datos.

    Si ya tienes algo hecho y tienes dudas, envíame tu código a ringhugos@gmail.com y con gusto te ayudo

    Saludos.

     
  8. Roly

    25 junio, 2014 at 02:36

    Hola huguidugui, gracias por el tutorial, muy bueno..!!. Bueno en muchas de esas te quise preguntar, pero la respuesta ya estaba en los comentarios anteriores, y por esa razon no fue necesario. SALUDOS..!!!

     
    • huguidugui

      25 junio, 2014 at 11:47

      Me alegro que te haya servido. Y sigo convencido que para engrandecer el conocimiento, hay que compartirlo 😀 Muchas gracias por leer el blog.

      Saludos

       
  9. jose guardia

    2 julio, 2014 at 16:59

    ME SALE ESTE ERROR , AYUDA PORQ SERA .. FPDF error: Some data has already been output, can’t send PDF file..

     
    • huguidugui

      2 julio, 2014 at 17:03

      Este error a veces es muy común cuando hay espacios en blanco al inicio o final del archivo donde se está generando el PDF. Envíame estos archivos: donde tienes tus métodos de PDF y donde lo estás generando a ringhugos@gmail.com y te ayudo a ver dónde es.

      Saludos _:D

       
  10. jose guardia

    6 julio, 2014 at 09:06

    ya lo solucione gracias, era mi archivo de conexion que tenia un espacio, como hago para hacer una busqueda pero no como sale ahi q dice en el select dni=’12345′ , sino que yo quiero hacer una busqueda de una variable especifica ejemplo (“select nombre,apellido,cedula from autorizacion where id=’$id’ “). espero su pronta respuesta.

     
  11. Sofy

    30 octubre, 2014 at 16:04

    Hola! muchas gracias por el tuto, me encanta tu idea de compartir el conocimiento.. te admiro mucho. Continua así

     
  12. Asahel

    29 septiembre, 2015 at 08:45

    Hola huguidugui!!.
    Me podrias ayudar con el siguiente problema: lo que pasa es necesito imprimir una tabla que tiene varias columnas y el contenido de las celdas se enciman a la siguiente con el uso de Cell, eh leido un poco y todo a punta que para solucionar este detalle se tiene que hacer uso de MultiCell pero no eh logrado implementarlo. Podrias ayudarme a solucionar mi problema. Gracias!!

     
    • huguidugui

      29 septiembre, 2015 at 20:12

      Hola Asahel, con mucho gusto te puedo ayudar solo que necesito ver el código para poder ver qué pasa. Así con solo una explicación no podría saber lo que está pasando. Además, como sugerencia, te recomiendo que uses HTML2PDF que es el otro tuto que tengo para generar un PDF porque es mucho más sencillo de usar para el diseño de tu hoja y tablas.

      Envía tú código y algunas capturas de pantalla a mi correo, ringhugos@gmail.com y con mucho gusto te ayudo. Saludos

       

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: