miércoles, 30 de agosto de 2017

FPDF construir y mostrar textos HTML

Cuando se trabaja con la creación de fpdf en nuestra web lo primero que nos llega a la mente es FPDF, sin embargo es un lió crear un simple texto con esta herramienta, ya que su desplazamiento y cuadros de texto los maneja a través de celdas.

por ejemplo si quisiera crear un pequeño reporte:

habilidades-web.blogspot.com
30/08/2017


Se extiende la siguiente constancia a:
Ing. Alfonso Medina Duran

Por medio de la presente se informa que al empleado Alfonso Medina Duran con numero
de empleado 1234 le es autorizado salir de vacaciones un total de 10 dias, los cuales serán aplicados a partir del día 31/08/2017



_________________________________
Firma de quien autoriza


Para el cual primeramente pensaria en utilizar un multicell, sin embarco al momento de incluir la mezcla de fuente negrita con normal, no seria posible, tendríamos que utilizar cell normal e identificar las coordenadas donde irían las palabras en negritas.... un caos.

Con las siguientes funciones que nos provee los mismos tutoriales de fpdf este reporte se vuelve super sencillo solo construyendo el texto con las etiquetas correspondientes, este caso practico tenemos que usar <b>Alfonso Medina Duran</b> para que aparezca con letra negrita con la función WriteHTML.




<?php
require('fpdf.php');
class PDF extends FPDF{
protected $B = 0;
protected $I = 0;
protected $U = 0;
protected $HREF = '';


function WriteHTML($html){
// Intérprete de HTML
$html = str_replace("\n",' ',$html);
$a = preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
foreach($a as $i=>$e){
if($i%2==0){
// Text
if($this->HREF)
$this->PutLink($this->HREF,$e);
else
$this->Write(5,$e);
}else{
// Etiqueta
if($e[0]=='/')
$this->CloseTag(strtoupper(substr($e,1)));
else{
// Extraer atributos
$a2 = explode(' ',$e);
$tag = strtoupper(array_shift($a2));
$attr = array();
foreach($a2 as $v){
if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
$attr[strtoupper($a3[1])] = $a3[2];
}
$this->OpenTag($tag,$attr);
}
}
}
}


function OpenTag($tag, $attr){
// Etiqueta de apertura
if($tag=='B' || $tag=='I' || $tag=='U')
$this->SetStyle($tag,true);
if($tag=='A')
$this->HREF = $attr['HREF'];
if($tag=='BR')
$this->Ln(5);

}

function CloseTag($tag){
// Etiqueta de cierre
if($tag=='B' || $tag=='I' || $tag=='U')
$this->SetStyle($tag,false);
if($tag=='A')
$this->HREF = '';

}

function SetStyle($tag, $enable){
// Modificar estilo y escoger la fuente correspondiente
$this->$tag += ($enable ? 1 : -1);
$style = '';
foreach(array('B', 'I', 'U') as $s){
if($this->$s>0)
$style .= $s;
}
$this->SetFont('',$style);
}

function PutLink($URL, $txt){
// Escribir un hiper-enlace
$this->SetTextColor(0,0,255);
$this->SetStyle('U',true);
$this->Write(5,$txt,$URL);
$this->SetStyle('U',false);
$this->SetTextColor(0);
}
}


$html = 'Por medio de la presente se informa que al empleado <b>Alfonso Medina Duran</b> con numero de empleado <b>1234</b> le es autorizado salir de vacaciones un total de <b>10 dias</b>, los cuales serán aplicados a partir del día <b>31/08/2017</b>';


$pdf = new PDF();

$pdf->AddPage();
$pdf->SetLeftMargin(45);
$pdf->SetFontSize(14);
$pdf->WriteHTML($html);
$pdf->Output();

?>




Fuente

http://www.fpdf.org/es/tutorial/tuto6.htm




Cualquier duda o aclaración, estaré para servirte
Ing. Alfonso Medina

No hay comentarios.:

Publicar un comentario

Interfaz fpga - cloud computing

Interfaz fpga - cloud computing Ing. Alfonso Medina Duran 4lfonsomedina@gmail.com Proyecto para la materia de Sistemas Inteligent...