RSS

PDF (2 de 2): Texto dinámico con llamada a la BD

12 Nov

Los archivos importantes para este ejemplo serán: index.php, en donde estará un combo box teniendo como opciones las matrículas (NOTA: puede llenarse el combo dinámicamente), creaPDF.php, encargado de generar el PDF y finalmente el dúo dbconfig.php y myDBC.php encargados de hacer llamada a la base de datos. (El CSS es el mismo del ejemplo anterior).

formulario

Veamos el código:

index.php

<!DOCTYPE html>
<html lang="es">
	<head>
		<title> Susticiones en cadenas </title>
		<link type="text/css" href="styles.css" rel="stylesheet"/>
	</head>

	<body>
		<div id="envoltura">
			<div id="contenedor">
				<div id="cuerpo">
					<form action="creaPDF.php" method="post">

						<fieldset>
							<legend align="left">Alumno</legend>
								<label>Elegir matricula:</label>
								<select name="matricula">
									<option value=20421234> 20421234 </option>
									<option value=20422398> 20422398 </option>
								</select>
						</fieldset>
						<p>
						<input type="submit" value="Crear PDF">
						</p>
					</form>

				</div> <!--Fin cuerpo-->
			</div> <!--Fin contenedor-->
		</div> <!--Fin envoltura-->
	</body>
</html>

Se verá así:

form

La conexión a la base de datos se hace con:

dbconfig.php

<?php
	define("DB_SERVER", "localhost");
	define("DB_USER", "root");
	define("DB_PASS", "**********");
	define("DB_NAME", "colegio");
?>

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 obtenerAlumno($matricula){
		//Buscamos en la tabla el registro coincidente con matricula obtenida
		$q = "select * from alumnos where matricula='$matricula'";

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

		$arreglo = array();

			$obj = mysqli_fetch_array($result);
			//En arreglo se guarda cada campo, utf8 para los acentos y ñ's
			$arreglo[0] = utf8_decode(strtoupper($obj['nombre']));
			$arreglo[1] = utf8_decode(strtoupper($obj['apellido']));
			$arreglo[2] = $obj['matricula'];
			$arreglo[3] = utf8_decode(strtoupper($obj['carrera']));
			$arreglo[4] = utf8_decode(strtoupper($obj['area']));
			$arreglo[5] = $obj['fecha_inicio'];
			$arreglo[6] = $obj['fecha_fin'];

		return $arreglo;
	}
}
?>

Creé una base de datos llamada “colegio” y dentro de ésta, una tabla llamada “alumnos”:

CREATE TABLE `alumnos` (
`nombre` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL ,
`apellido` VARCHAR( 25 ) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL ,
`matricula` VARCHAR( 8 ) NOT NULL ,
`carrera` VARCHAR( 35 ) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL ,
`area` VARCHAR( 35 ) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL ,
`fecha_inicio` VARCHAR( 12 ) NOT NULL ,
`fecha_fin` VARCHAR( 12 ) NOT NULL ,
PRIMARY KEY ( `matricula` )
) ENGINE = MYISAM ;

El archivo más importante, creaPDF.php

<?php
require_once('libFPDF/fpdf.php');
require_once('myDBC.php');

class PDF extends FPDF
{
	function Footer() // Pie de página
	{
    	$this->SetY(-15);
    	$this->SetFont('Arial','I',8);
    	$this->Cell(0,10,'Este es el pie de página creado con el método Footer() de la clase creada PDF que hereda de FPDF','T',0,'C');
	}

	function Header() //Encabezado
	{
		$this->SetFont('Arial','B',9);

		$this->Line(10,10,206,10);
		$this->Line(10,35.5,206,35.5);

		$this->Cell(30,25,'',0,0,'C',$this->Image('images/logo.png', 152,12, 19));
		$this->Cell(111,25,'ALGÚN TÍTULO DE ALGÚN LUGAR :D',0,0,'C', $this->Image('images/logoIzquierda.png',20,12,20));
    	$this->Cell(40,25,'',0,0,'C',$this->Image('images/logoDerecha.png', 175, 12, 19));

    	$this->Ln(25);
	}

	function ImprimirTexto($file)
	{
       	$txt = file_get_contents($file);
    	$this->SetFont('Arial','',12);
    	$this->MultiCell(0,5,$txt);

	}

}//fin clase PDF
			//Crear objeto y recibir la opción del combo box
			$baseDatos = new myDBC();
			$matriculaAlumno = $_POST['matricula'];
			//Se obtiene un arreglo con la información del alumno
			$info_alumno = $baseDatos->obtenerAlumno($matriculaAlumno);
			//Creamos los arrays para preg_replace
			$patrones = array();
			$sustituciones = array();
			//Obtenemos el texto para buscar y reemplazar dentro de éste
			$cadena = file_get_contents('machote.txt');
			//Patrones a buscar
			$patrones[0] = '/#1/';
			$patrones[1] = '/#2/';
			$patrones[2] = '/#3/';
			$patrones[3] = '/#4/';
			$patrones[4] = '/#5/';
			$patrones[5] = '/#6/';
			$patrones[6] = '/#7/';

			//Con estas líneas se cambian los índices. Necesario como
			//en el ejemplo anterior
			$dm = 7;
			foreach($info_alumno as $valor)
			{
				$sustituciones[$dm] = $valor;
				$dm--;
			}

			//Se hacen las sustituciones a la cadena
			$cadenaCambiada = preg_replace($patrones, $sustituciones, $cadena);

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

			$pdf->Ln();
			$pdf->ImprimirTexto('textoFijo.txt'); //imprime un texto fijo
			$pdf->Ln();
			$pdf->ImprimirTexto('machote.txt'); //Imprime el texto original
			$pdf->Ln();
			$pdf->MultiCell(0, 5, $cadenaCambiada); //Imprime el texto cambiado

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

?>

Acá unas pantallas de la ejecución:

Algunos registros de ejemplo

Algunos registros de ejemplo

Elegir matrícula 20421234

Elegir matrícula 20421234

Salida de PDF con la información de la matrícula elegida

Salida del PDF con la información de la matrícula elegida

Otra salida:

Mtr

Elegir matrícula 20422398

e

Salida del PDF con la información de la matrícula elegida

Y bueno, así lo hice 🙂 Ojalá le sirva a alguien más, no olviden compartir y difundir 😉

¿Quieres apoyar el blog?

@huguidugui || ringhugos@gmail.com

 
2 comentarios

Publicado por en 12 noviembre, 2013 en FPDF, PHP

 

Etiquetas: , ,

2 Respuestas a “PDF (2 de 2): Texto dinámico con llamada a la BD

  1. Gilberto

    21 mayo, 2015 at 10:59

    Gracias por subir este ejemplo

     
  2. Gilberto

    21 mayo, 2015 at 11:00

    Mepodrias enviar todo el archivo comprimido porfavor exelente ejemplo sagi_leon@hotmail.com

     

Deja un comentario

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: