RSS

Generar gafetes en PDF desde PHP

04 Jul

Ya que tenemos la funcionalidad de subir imágenes en el post anterior, acá  vamos a hacer que se generen en PDF los gafetes/credenciales/identificaciones de los registrados en la base de datos

Acá les dejo el enlace de descarga a googleDrive del directorio completo de trabajo de este ejemplo (solo salta la publicidad y listo)

El diseño consta de lo siguiente:

El mini-sistema funciona de la siguiente de la manera: dentro del index.php está la opción de registrar usuarios con un formulario que captura el nick, mail, edad y una foto, una vez guardada la información, regresa al index y muestra en la sección de abajo las miniaturas de las imágenes que se han subido. Dentro del index se agregó un botón con imagen que se encargará de generar los gafetes en una pestaña nueva del navegador. Así se ve el index:

index.php

index.php

Cuando se clicka sobre “Generar Gafetes” éste llama a crearPDF.php que se encarga de crear un objeto que trae todos los registros de la BD y en seguida va generando cada gafete con ayuda de un switch-case, en el siguiente orden (ya se verá en el código)

Posiciones en que se va generando cada gafete

Posiciones en que se va generando cada gafete

Veamos el código de los archivos que se agregaron a este directorio:

index.php

<?php
error_reporting(0);
include_once('php/myDBC.php');

$objeto = new myDBC();
$imagenes = $objeto->seleccionar_images();
?>

<!DOCTYPE html>
<html>
	<head>
        <title>huguidugui.wordpress.com</title>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" type="text/css" href="css/bootstrap.css">
        <link rel="stylesheet" type="text/css" href="css/estilos.css">
        <script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
    </head>
	<body>
        <div class="wrap">
            <header>
                Subir Archivos con PHP y MySQL
            </header>

            <section id="generar">
				<nav>
					<div id="generarPDF">
						<a href="php/creaPDF.php" target="_blank">
							<img src="images/generar.jpg">
						</a>
						<center>Generar <br> Gafetes</center>
					</div>
				</nav>
            </section>

			<section id="principal">
				<form id="formulario" action="php/subir.php" method="POST" enctype="multipart/form-data">
					<div class="campos">
						<label > Nick </label>
						<input type="text" name="nick" required/>
					</div>

					<div class="campos">
						<label> Mail </label>
						<input type="email" name="email" required/>
					</div>

					<div class="campos">
						<label> Edad </label>
						<input type="number" min="15" max="70" name="edad" required/>
					</div>

					<div class="campos">
						<label for="imagen">Imagen:</label>
						<input type="file" name="hugo" id="imagen" />
						<input type="submit" name="subir" value="Subir"/>
					</div>
				</form>

			</section> 

			<section id="mostrar_imagenes">
				<?php
					foreach($imagenes as  $imagen){
						echo '<div class="todas">';
						echo '<img src="'.$imagen['ruta'].'"/>';
						echo '</div>';
					}
				?>
			</section>
		</div>
	</body>
</html>

PDF.php

<?php
include_once('../libFPDF/fpdf.php');
class PDF extends FPDF{

	function designUp($espejo = 0){
		$this->Rect( (13 + $espejo), 13, 90, 100); //Marco exterior
		$this->Rect( (18 + $espejo), 18, 25, 30); //Marco foto

		//Nombre y su recuadro
		$this->setXY((50 + $espejo), 20);
		$this->Cell(29, 7, 'Nombre');

		$this->setXY((50 + $espejo), 28);
		$this->Cell(50, 7, '', 1);

		//Mail y su recuadro
		$this->setXY((50 + $espejo), 45);
		$this->Cell(29, 7, 'Mail');

		$this->setXY((50 + $espejo), 53);
		$this->Cell(50, 7, '', 1);

		//Edad y su recuadro
		$this->setXY( (18 + $espejo), 53);
		$this->Cell(13, 7, 'Edad');

		$this->setXY((31 + $espejo), 53);
		$this->Cell(12, 7, '', 1);

		//Imagen de expo
		$this->Image('../images/expo.jpg', (18 + $espejo), 65, 80 ,45);

	}

	function designDown($espejo = 0){
		$this->Rect((13 + $espejo), 150, 90, 100); //Marco exterior
		$this->Rect( (18 + $espejo), 155 , 25, 30); //Marco foto

		//Nombre
		$this->setXY((50 + $espejo), 160);
		$this->Cell(29, 7, 'Nombre');

		$this->setXY((50 + $espejo), 168);
		$this->Cell(50, 7, '', 1);

		//Mail
		$this->setXY((50 + $espejo), 185);
		$this->Cell(29, 7, 'Mail');

		$this->setXY((50 + $espejo), 193);
		$this->Cell(50, 7, '', 1);

		//Edad
		$this->setXY((18 + $espejo), 193);
		$this->Cell(13, 7, 'Edad');

		$this->setXY((31 + $espejo), 193);
		$this->Cell(12, 7, '', 1);

		//Imagen de expo
		$this->Image('../images/expo.jpg', (18 + $espejo), 203, 80 ,45);

	}
}//fin clase PDF
?>

creaPDF.php

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

	$db = new myDBC();

	//Carpeta imágenes está un directorio arriba
	$directorioPadre = '../';

	$infoUsuario = $db->seleccionar_datos();
	$registros = $db->contar_registros(); //Total de registros obtenidos

	$pdf = new PDF();
	$pdf->AddPage('P', 'Letter'); //Vertical, Carta
	$pdf->SetFont('Arial','B',12); //Arial, negrita, 12 puntos

	//Nos ayuda a saber qué posición está haciendo
	//Posición 0 || 1 || 2 || 3
	$posicion = 0;

	for($i = 0; $i < $registros; $i++)
	{
		switch($posicion)
		{
			case 0:
				$pdf->designUp();

				//Imagen del usuario
				$pdf->Image($directorioPadre.$infoUsuario[$i]['ruta'], 19, 19, 23, 28 );

				//Nombre del usuario
				$pdf->setXY(50, 28);
				$pdf->Cell(40, 7, utf8_decode($infoUsuario[$i]['nombre']), 0);

				//Email del usuario
				$pdf->setXY(50, 53);
				$pdf->Cell(40, 7, utf8_decode($infoUsuario[$i]['email']), 0);

				//Edad del usuario
				$pdf->setXY(31, 53);
				$pdf->Cell(40, 7, utf8_decode($infoUsuario[$i]['edad']), 0);

				$posicion++; //Aumenta posición
			break;

			case 1:
				$pdf->designUp(100);

				$pdf->setXY(150, 28);
				$pdf->Image($directorioPadre.$infoUsuario[$i]['ruta'], 119, 19, 23, 28 );

				$pdf->Cell(40, 7, utf8_decode($infoUsuario[$i]['nombre']), 0);

				$pdf->setXY(150, 53);
				$pdf->Cell(40, 7, utf8_decode($infoUsuario[$i]['email']), 0);

				$pdf->setXY(131, 53);
				$pdf->Cell(40, 7, utf8_decode($infoUsuario[$i]['edad']), 0);

				$posicion++;
			break;

			case 2:
				$pdf->designDown();

				$pdf->Image($directorioPadre.$infoUsuario[$i]['ruta'], 19, 156, 23, 28 );

				$pdf->setXY(50, 168);
				$pdf->Cell(40, 7, utf8_decode($infoUsuario[$i]['nombre']), 0);

				$pdf->setXY(50, 193);
				$pdf->Cell(40, 7, utf8_decode($infoUsuario[$i]['email']), 0);

				$pdf->setXY(31, 193);
				$pdf->Cell(40, 7, utf8_decode($infoUsuario[$i]['edad']), 0);

				$posicion++;
			break;

			case 3:
				//Setear la posición a cero de nuevo
				$posicion = 0;

				$pdf->designDown(100);

				$pdf->Image($directorioPadre.$infoUsuario[$i]['ruta'], 119, 156, 23, 28 );

				$pdf->setXY(150, 168);
				$pdf->Cell(40, 7, utf8_decode($infoUsuario[$i]['nombre']), 0);

				$pdf->setXY(150, 193);
				$pdf->Cell(40, 7, utf8_decode($infoUsuario[$i]['email']), 0);

				$pdf->setXY(131, 193);
				$pdf->Cell(40, 7, utf8_decode($infoUsuario[$i]['edad']), 0);

				//Esta condición asegura que se agregue una hoja necesaria
				//para seguir con los registros
				if($i != ($registros - 1))
				{
					$pdf->AddPage('P', 'Letter');
				}

			break;
		}
	}

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

y finalmente, 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 subirTodo($nick, $mail, $edad, $ruta){

		$q = "INSERT INTO imagenes (nombre, email, edad, ruta) VALUES ('$nick', '$mail', '$edad', '$ruta')";
		$result = $this->mysqli->query($q);

		if($result){ //Si resultado es true, se agregó correctamente
					echo'<script type="text/javascript">
						alert("Agregado Exitosamente a la BD");
						window.location="http://localhost/subirArchivos/index.php"
						</script>';
		}
		else{ //Si hubo error al insertar, se avisa
				echo'<script type="text/javascript">
					 alert("Chispas... Algo anda mal");
					 window.location="http://localhost/subirArchivos/index.php"
					 </script>';
		}

	}

    public function seleccionar_images(){
        $q = "select ruta from imagenes";

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

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

		//Si no hay resultados
		//Se avisa al usuario y se redirige al index de la aplicación
        if( $result->num_rows == 0)
        {
            echo'<script type="text/javascript">
              alert("Ningun registro");
            </script>';
            return false;
        }
	  //En otro caso, se recibe la información y se
	  //se regresa un array con los datos de la consulta
      else{
            while($row = mysqli_fetch_assoc($result)){
                //Se agrega cada valor en el array
                array_push($valores, $row);
            }
	  }
        //Regresa array asociativo
        return $valores;
    }

     public function seleccionar_datos(){
        $q = "SELECT ruta, nombre, email, edad FROM imagenes";

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

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

		//Si no hay resultados
		//Se avisa al usuario y se redirige al index de la aplicación
        if( $result->num_rows == 0)
        {
            echo'<script type="text/javascript">
              alert("Ningun registro");
            </script>';
            return false;
        }
	  //En otro caso, se recibe la información y se
	  //se regresa un array con los datos de la consulta
      else{
            while($row = mysqli_fetch_assoc($result)){
                //Se agrega cada valor en el array
                array_push($valores, $row);
            }
	  }
        //Regresa array asociativo
        return $valores;
    }

    public function contar_registros(){
        $q = "SELECT nombre FROM imagenes";

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

        return $this->mysqli->affected_rows;
    }
}
?>

Y la salida se ve así:

salida1 salida2 salida3

 

Cualquier duda sobre este código, mucho gusto les atiendo en ringhugos@gmail.com y para bajar el directorio completo de trabajo, el link de descarga directa del ejemplo aquí o si quieres todos los ejemplos del blog y libros de programación, acá la carpeta de googleDrive

ringhugos@gmail.com || @huguidugui

 

Anuncios
 
7 comentarios

Publicado por en 4 julio, 2014 en FPDF, PHP

 

Etiquetas: , , , ,

7 Respuestas a “Generar gafetes en PDF desde PHP

  1. Dan

    29 septiembre, 2014 at 10:31

    Hola no sé cómo hacer una credencial desde los datos ya almacenados de una tabla. ¿me podrías explicar paso por paso?

    ¡Gracias!

     
    • huguidugui

      29 septiembre, 2014 at 16:24

      Hola Dan!
      Pues los pasos para hacer cuatro credenciales por hoja está explicado en este tuto… Entonces para hacer solo 1 pues, solo haz para 1 😀
      Yo te ayudo en base a código que tengas hecho, envíame tu código a ringhugos@gmail.com y con gusto te ayudo (Y)

      Saludos y gracias por leer el blog 😀

       
  2. Miguel Angel Espinoza Riveroguel

    8 marzo, 2016 at 20:09

    hola descarge la el zip que contiene los archivos pero cuando entro por localhost me sale Dbr`0 1@a” pueden decirme porque me sale eso?

     
    • huguidugui

      8 marzo, 2016 at 20:59

      Hola, sí, es ópor la base de datos que no la tienes.
      Envíame un correo a ringhugos@gmail.com, y con gusto te envío la bd que usé para el ejemplo.

      Saludos y gracias por leer el blog.

       
  3. gaby

    17 noviembre, 2016 at 13:44

    Hola descargue el zip pero me aparece esto al abrirlo en el servidor Dbr`0 9Dh* ( me puedes pasar la base de datos 😀 😀 😀 por favor

     
    • huguidugui

      19 noviembre, 2016 at 18:37

      Hola Gabý, tienes que cambiar la información de tu BD,user y password en el archivo config con los datos de tu servidor local.

      Saludos

       
      • gaby

        21 noviembre, 2016 at 21:12

        a ok gracias 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: