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).
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í:
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: (" . $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:
Otra salida:
Y bueno, así lo hice 🙂 Ojalá le sirva a alguien más, no olviden compartir y difundir 😉
@huguidugui || ringhugos@gmail.com
Gilberto
21 mayo, 2015 at 10:59
Gracias por subir este ejemplo
Gilberto
21 mayo, 2015 at 11:00
Mepodrias enviar todo el archivo comprimido porfavor exelente ejemplo sagi_leon@hotmail.com