%PDF- %PDF-
| Direktori : /home/tjamichg/intranet.tjamich.gob.mx/intranet/sistemas/recursoshumanos/ |
| Current File : /home/tjamichg/intranet.tjamich.gob.mx/intranet/sistemas/recursoshumanos/flowing_blockv5.php |
<?php
// ini_set('display_errors', 1);
// ini_set('display_startup_errors', 1);
// error_reporting(E_ALL);
function fechaATexto($fecha)
{
$fecha_separada = explode("-", $fecha);
$dia = strtolower(numtoletras($fecha_separada[0]));
switch ($fecha_separada[1]) {
case "01":
$mes = "ENERO";
break;
case "02":
$mes = "FEBRERO";
break;
case "03":
$mes = "MARZO";
break;
case "04":
$mes = "ABRIL";
break;
case "05":
$mes = "MAYO";
break;
case "06":
$mes = "JUNIO";
break;
case "07":
$mes = "JULIO";
break;
case "08":
$mes = "AGOSTO";
break;
case "09":
$mes = "SEPTIEMBRE";
break;
case "10":
$mes = "OCTUBRE";
break;
case "11":
$mes = "NOVIEMBRE";
break;
case "12":
$mes = "DICIEMBRE";
break;
default:
break;
}
$anio = strtolower(numtoletras($fecha_separada[2]));
return "$dia DE $mes DEL $anio.";
}
//FUNCION DIA A POSICIÓN
//FUNCION DIA A POSICIÓN
//FUNCION DIA A POSICIÓN
//FUNCION DIA A POSICIÓN
//FUNCION DIA A POSICIÓN
function convertirdia($numero)
{
$valor = array('primero', 'segundo', 'tercero', 'cuarto', 'quinto', 'sexto', 'séptimo', 'octavo', 'noveno', 'décimo', 'undécimo', 'duodécimo', 'decimotercero', 'decimocuarto', 'decimoquinto ', 'decimosexto', 'decimoséptimo ', 'decimoctavo', 'decimonoveno', 'vigésimo', 'vigésimo primero', 'vigésimo segundo', 'vigésimo tercero', 'vigésimo cuarto', 'vigésimo quinto', 'vigésimo sexto', 'vigésimo séptimo', 'vigésimo octavo', 'vigésimo noveno', 'trigésimo', 'trigésimo primero');
return $valor[$numero - 1];
}
//FUNCION MES A TEXTO
//FUNCION MES A TEXTO
//FUNCION MES A TEXTO
//FUNCION MES A TEXTO
//FUNCION MES A TEXTO
function mesATexto($fecha)
{
switch ($fecha) {
case "01":
$mes = "ENERO";
break;
case "02":
$mes = "FEBRERO";
break;
case "03":
$mes = "MARZO";
break;
case "04":
$mes = "ABRIL";
break;
case "05":
$mes = "MAYO";
break;
case "06":
$mes = "JUNIO";
break;
case "07":
$mes = "JULIO";
break;
case "08":
$mes = "AGOSTO";
break;
case "09":
$mes = "SEPTIEMBRE";
break;
case "10":
$mes = "OCTUBRE";
break;
case "11":
$mes = "NOVIEMBRE";
break;
case "12":
$mes = "DICIEMBRE";
break;
default:
break;
}
return "$mes";
}
//FUNCION NUMERO A TEXTO
//FUNCION NUMERO A TEXTO
//FUNCION NUMERO A TEXTO
//FUNCION NUMERO A TEXTO
//FUNCION NUMERO A TEXTO
//------ Máxima cifra soportada: 18 dígitos con 2 decimales
//------ 999,999,999,999,999,999.99
// NOVECIENTOS NOVENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y NUEVE BILLONES
// NOVECIENTOS NOVENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y NUEVE MILLONES
// NOVECIENTOS NOVENTA Y NUEVE MIL NOVECIENTOS NOVENTA Y NUEVE PESOS 99/100 M.N.
//------ Creada por: ---------------
//------ ULTIMINIO RAMOS GALÁN ---------------
//------ uramos@gmail.com ---------------
//------ 10 de junio de 2009. México, D.F. ---------------
//------ PHP Version 4.3.1 o mayores (aunque podría funcionar en versiones anteriores, tendrías que probar)
function numtoletras($xcifra)
{
$xarray = array(
0 => "Cero",
1 => "UNO",
"DOS",
"TRES",
"CUATRO",
"CINCO",
"SEIS",
"SIETE",
"OCHO",
"NUEVE",
"DIEZ",
"ONCE",
"DOCE",
"TRECE",
"CATORCE",
"QUINCE",
"DIECISEIS",
"DIECISIETE",
"DIECIOCHO",
"DIECINUEVE",
"VEINTI",
30 => "TREINTA",
40 => "CUARENTA",
50 => "CINCUENTA",
60 => "SESENTA",
70 => "SETENTA",
80 => "OCHENTA",
90 => "NOVENTA",
100 => "CIENTO",
200 => "DOSCIENTOS",
300 => "TRESCIENTOS",
400 => "CUATROCIENTOS",
500 => "QUINIENTOS",
600 => "SEISCIENTOS",
700 => "SETECIENTOS",
800 => "OCHOCIENTOS",
900 => "NOVECIENTOS"
);
//
$xcifra = trim($xcifra);
$xlength = strlen($xcifra);
$xpos_punto = strpos($xcifra, ".");
$xaux_int = $xcifra;
$xdecimales = "00";
if (!($xpos_punto === false)) {
if ($xpos_punto == 0) {
$xcifra = "0" . $xcifra;
$xpos_punto = strpos($xcifra, ".");
}
$xaux_int = substr($xcifra, 0, $xpos_punto); // obtengo el entero de la cifra a covertir
$xdecimales = substr($xcifra . "00", $xpos_punto + 1, 2); // obtengo los valores decimales
}
$XAUX = str_pad($xaux_int, 18, " ", STR_PAD_LEFT); // ajusto la longitud de la cifra, para que sea divisible por centenas de miles (grupos de 6)
$xcadena = "";
for ($xz = 0; $xz < 3; $xz++) {
$xaux = substr($XAUX, $xz * 6, 6);
$xi = 0;
$xlimite = 6; // inicializo el contador de centenas xi y establezco el límite a 6 dígitos en la parte entera
$xexit = true; // bandera para controlar el ciclo del While
while ($xexit) {
if ($xi == $xlimite) { // si ya llegó al límite máximo de enteros
break; // termina el ciclo
}
$x3digitos = ($xlimite - $xi) * -1; // comienzo con los tres primeros digitos de la cifra, comenzando por la izquierda
$xaux = substr($xaux, $x3digitos, abs($x3digitos)); // obtengo la centena (los tres dígitos)
for ($xy = 1; $xy < 4; $xy++) { // ciclo para revisar centenas, decenas y unidades, en ese orden
switch ($xy) {
case 1: // checa las centenas
if (substr($xaux, 0, 3) < 100) { // si el grupo de tres dígitos es menor a una centena ( < 99) no hace nada y pasa a revisar las decenas
} else {
$key = (int) substr($xaux, 0, 3);
if (TRUE === array_key_exists($key, $xarray)) { // busco si la centena es número redondo (100, 200, 300, 400, etc..)
$xseek = $xarray[$key];
$xsub = subfijo($xaux); // devuelve el subfijo correspondiente (Millón, Millones, Mil o nada)
if (substr($xaux, 0, 3) == 100)
$xcadena = " " . $xcadena . " CIEN " . $xsub;
else
$xcadena = " " . $xcadena . " " . $xseek . " " . $xsub;
$xy = 3; // la centena fue redonda, entonces termino el ciclo del for y ya no reviso decenas ni unidades
} else { // entra aquí si la centena no fue numero redondo (101, 253, 120, 980, etc.)
$key = (int) substr($xaux, 0, 1) * 100;
$xseek = $xarray[$key]; // toma el primer caracter de la centena y lo multiplica por cien y lo busca en el arreglo (para que busque 100,200,300, etc)
$xcadena = " " . $xcadena . " " . $xseek;
} // ENDIF ($xseek)
} // ENDIF (substr($xaux, 0, 3) < 100)
break;
case 2: // checa las decenas (con la misma lógica que las centenas)
if (substr($xaux, 1, 2) < 10) {
} else {
$key = (int) substr($xaux, 1, 2);
if (TRUE === array_key_exists($key, $xarray)) {
$xseek = $xarray[$key];
$xsub = subfijo($xaux);
if (substr($xaux, 1, 2) == 20)
$xcadena = " " . $xcadena . " VEINTE " . $xsub;
else
$xcadena = " " . $xcadena . " " . $xseek . " " . $xsub;
$xy = 3;
} else {
$key = (int) substr($xaux, 1, 1) * 10;
$xseek = $xarray[$key];
if (20 == substr($xaux, 1, 1) * 10)
$xcadena = " " . $xcadena . " " . $xseek;
else
$xcadena = " " . $xcadena . " " . $xseek . " Y ";
} // ENDIF ($xseek)
} // ENDIF (substr($xaux, 1, 2) < 10)
break;
case 3: // checa las unidades
if (substr($xaux, 2, 1) < 1) { // si la unidad es cero, ya no hace nada
} else {
$key = (int) substr($xaux, 2, 1);
$xseek = $xarray[$key]; // obtengo directamente el valor de la unidad (del uno al nueve)
$xsub = subfijo($xaux);
$xcadena = " " . $xcadena . " " . $xseek . " " . $xsub;
} // ENDIF (substr($xaux, 2, 1) < 1)
break;
} // END SWITCH
} // END FOR
$xi = $xi + 3;
} // ENDDO
if (substr(trim($xcadena), -5, 5) == "ILLON") // si la cadena obtenida termina en MILLON o BILLON, entonces le agrega al final la conjuncion DE
$xcadena .= " DE";
if (substr(trim($xcadena), -7, 7) == "ILLONES") // si la cadena obtenida en MILLONES o BILLONES, entoncea le agrega al final la conjuncion DE
$xcadena .= " DE";
// ----------- esta línea la puedes cambiar de acuerdo a tus necesidades o a tu país -------
if (trim($xaux) != "") {
switch ($xz) {
case 0:
if (trim(substr($XAUX, $xz * 6, 6)) == "1")
$xcadena .= "UN BILLON ";
else
$xcadena .= " BILLONES ";
break;
case 1:
if (trim(substr($XAUX, $xz * 6, 6)) == "1")
$xcadena .= "UN MILLON ";
else
$xcadena .= " MILLONES ";
break;
case 2:
if ($xcifra < 1) {
//$xcadena = "CERO PESOS $xdecimales/100 M.N.";
}
if ($xcifra >= 1 && $xcifra < 2) {
//$xcadena = "UN PESO $xdecimales/100 M.N. ";
}
if ($xcifra >= 2) {
//$xcadena.= " PESOS $xdecimales/100 M.N. "; //
}
break;
} // endswitch ($xz)
} // ENDIF (trim($xaux) != "")
// ------------------ en este caso, para México se usa esta leyenda ----------------
$xcadena = str_replace("VEINTI ", "VEINTI", $xcadena); // quito el espacio para el VEINTI, para que quede: VEINTICUATRO, VEINTIUN, VEINTIDOS, etc
$xcadena = str_replace(" ", " ", $xcadena); // quito espacios dobles
$xcadena = str_replace("UN UN", "UN", $xcadena); // quito la duplicidad
$xcadena = str_replace(" ", " ", $xcadena); // quito espacios dobles
$xcadena = str_replace("BILLON DE MILLONES", "BILLON DE", $xcadena); // corrigo la leyenda
$xcadena = str_replace("BILLONES DE MILLONES", "BILLONES DE", $xcadena); // corrigo la leyenda
$xcadena = str_replace("DE UN", "UN", $xcadena); // corrigo la leyenda
$xcadena = str_replace("DIECISEIS", "DIECISÉIS", $xcadena); // corrigo la leyenda
$xcadena = str_replace("VEINTIUN", "VEINTIÚN", $xcadena); // corrigo la leyenda
$xcadena = str_replace("VEINTISEIS", "VEINTISÉIS", $xcadena); // corrigo la leyenda
} // ENDFOR ($xz)
return trim($xcadena);
}
// END FUNCTION
function subfijo($xx)
{ // esta función regresa un subfijo para la cifra
$xx = trim($xx);
$xstrlen = strlen($xx);
if ($xstrlen == 1 || $xstrlen == 2 || $xstrlen == 3)
$xsub = "";
//
if ($xstrlen == 4 || $xstrlen == 5 || $xstrlen == 6)
$xsub = "MIL";
//
return $xsub;
}
// END FUNCTION
// REQUIRED Y FUNCIONES HEXADECIMALES
// REQUIRED Y FUNCIONES HEXADECIMALES
// REQUIRED Y FUNCIONES HEXADECIMALES
// REQUIRED Y FUNCIONES HEXADECIMALES
// REQUIRED Y FUNCIONES HEXADECIMALES
// REQUIRED Y FUNCIONES HEXADECIMALES
require 'fpdf/fpdf.php';
//function hex2dec
//returns an associative array (keys: R,G,B) from
//a hex html code (e.g. #3FE5AA)
function hex2dec($couleur = "#000000")
{
$R = substr($couleur, 1, 2);
$rouge = hexdec($R);
$V = substr($couleur, 3, 2);
$vert = hexdec($V);
$B = substr($couleur, 5, 2);
$bleu = hexdec($B);
$tbl_couleur = array();
$tbl_couleur['R'] = $rouge;
$tbl_couleur['V'] = $vert;
$tbl_couleur['B'] = $bleu;
return $tbl_couleur;
}
//conversion pixel -> millimeter at 72 dpi
function px2mm($px)
{
return $px * 25.4 / 72;
}
function txtentities($html)
{
$trans = get_html_translation_table(HTML_ENTITIES);
$trans = array_flip($trans);
return strtr($html, $trans);
}
// FUNCIONES PARA BLOQUES FLOTANTES
// FUNCIONES PARA BLOQUES FLOTANTES
// FUNCIONES PARA BLOQUES FLOTANTES
// FUNCIONES PARA BLOQUES FLOTANTES
// FUNCIONES PARA BLOQUES FLOTANTES
// FUNCIONES PARA BLOQUES FLOTANTES
class PDF_FlowingBlock extends FPDF
{
//FFFUNCIONES DE CELDA FLOTANTE
//FFFUNCIONES DE CELDA FLOTANTE
//FFFUNCIONES DE CELDA FLOTANTE
//FFFUNCIONES DE CELDA FLOTANTE
//FFFUNCIONES DE CELDA FLOTANTE
// NOTA: SOLO PUEDEN ESTAR COLOCADAS A LA IZQUIERDA
var $flowingBlockAttr;
function saveFont()
{
$saved = array();
$saved['family'] = $this->FontFamily;
$saved['style'] = $this->FontStyle;
$saved['sizePt'] = $this->FontSizePt;
$saved['size'] = $this->FontSize;
$saved['curr'] = &$this->CurrentFont;
return $saved;
}
function restoreFont($saved)
{
$this->FontFamily = $saved['family'];
$this->FontStyle = $saved['style'];
$this->FontSizePt = $saved['sizePt'];
$this->FontSize = $saved['size'];
$this->CurrentFont = &$saved['curr'];
if ($this->page > 0)
$this->_out(sprintf('BT /F%d %.2F Tf ET', $this->CurrentFont['i'], $this->FontSizePt));
}
function newFlowingBlock($w, $h, $b = 0, $a = 'J', $f = 0)
{
// cell width in points
$this->flowingBlockAttr['width'] = $w * $this->k;
// line height in user units
$this->flowingBlockAttr['height'] = $h;
$this->flowingBlockAttr['lineCount'] = 0;
$this->flowingBlockAttr['border'] = $b;
$this->flowingBlockAttr['align'] = $a;
$this->flowingBlockAttr['fill'] = $f;
$this->flowingBlockAttr['font'] = array();
$this->flowingBlockAttr['content'] = array();
$this->flowingBlockAttr['contentWidth'] = 0;
}
function finishFlowingBlock()
{
$maxWidth = &$this->flowingBlockAttr['width'];
$lineHeight = &$this->flowingBlockAttr['height'];
$border = &$this->flowingBlockAttr['border'];
$align = &$this->flowingBlockAttr['align'];
$fill = &$this->flowingBlockAttr['fill'];
$content = &$this->flowingBlockAttr['content'];
$font = &$this->flowingBlockAttr['font'];
// set normal spacing
$this->_out(sprintf('%.3F Tw', 0));
// print out each chunk
// the amount of space taken up so far in user units
$usedWidth = 0;
foreach ($content as $k => $chunk) {
$b = '';
if (is_int(strpos($border, 'B')))
$b .= 'B';
if ($k == 0 && is_int(strpos($border, 'L')))
$b .= 'L';
if ($k == count($content) - 1 && is_int(strpos($border, 'R')))
$b .= 'R';
$this->restoreFont($font[$k]);
// if it's the last chunk of this line, move to the next line after
if ($k == count($content) - 1)
$this->Cell(($maxWidth / $this->k) - $usedWidth + 2 * $this->cMargin, $lineHeight, $chunk, $b, 1, $align, $fill);
else
$this->Cell($this->GetStringWidth($chunk), $lineHeight, $chunk, $b, 0, $align, $fill);
$usedWidth += $this->GetStringWidth($chunk);
}
}
function WriteFlowingBlock($s)
{
// width of all the content so far in points
$contentWidth = &$this->flowingBlockAttr['contentWidth'];
// cell width in points
$maxWidth = &$this->flowingBlockAttr['width'];
$lineCount = &$this->flowingBlockAttr['lineCount'];
// line height in user units
$lineHeight = &$this->flowingBlockAttr['height'];
$border = &$this->flowingBlockAttr['border'];
$align = &$this->flowingBlockAttr['align'];
$fill = &$this->flowingBlockAttr['fill'];
$content = &$this->flowingBlockAttr['content'];
$font = &$this->flowingBlockAttr['font'];
$font[] = $this->saveFont();
$content[] = '';
$currContent = &$content[count($content) - 1];
// where the line should be cutoff if it is to be justified
$cutoffWidth = $contentWidth;
// for every character in the string
for ($i = 0; $i < strlen($s); $i++) {
// extract the current character
$c = $s[$i];
// get the width of the character in points
$cw = $this->CurrentFont['cw'][$c] * ($this->FontSizePt / 1000);
if ($c == ' ') {
$currContent .= ' ';
$cutoffWidth = $contentWidth;
$contentWidth += $cw;
continue;
}
// try adding another char
if ($contentWidth + $cw > $maxWidth) {
// won't fit, output what we have
$lineCount++;
// contains any content that didn't make it into this print
$savedContent = '';
$savedFont = array();
// first, cut off and save any partial words at the end of the string
$words = explode(' ', $currContent);
// if it looks like we didn't finish any words for this chunk
if (count($words) == 1) {
// save and crop off the content currently on the stack
$savedContent = array_pop($content);
$savedFont = array_pop($font);
// trim any trailing spaces off the last bit of content
$currContent = &$content[count($content) - 1];
$currContent = rtrim($currContent);
}
// otherwise, we need to find which bit to cut off
else {
$lastContent = '';
for ($w = 0; $w < count($words) - 1; $w++)
$lastContent .= "{$words[$w]} ";
$savedContent = $words[count($words) - 1];
$savedFont = $this->saveFont();
// replace the current content with the cropped version
$currContent = rtrim($lastContent);
}
// update $contentWidth and $cutoffWidth since they changed with cropping
$contentWidth = 0;
foreach ($content as $k => $chunk) {
$this->restoreFont($font[$k]);
$contentWidth += $this->GetStringWidth($chunk) * $this->k;
}
$cutoffWidth = $contentWidth;
// if it's justified, we need to find the char spacing
if ($align == 'J') {
// count how many spaces there are in the entire content string
$numSpaces = 0;
foreach ($content as $chunk)
$numSpaces += substr_count($chunk, ' ');
// if there's more than one space, find word spacing in points
if ($numSpaces > 0)
$this->ws = ($maxWidth - $cutoffWidth) / $numSpaces;
else
$this->ws = 0;
$this->_out(sprintf('%.3F Tw', $this->ws));
}
// otherwise, we want normal spacing
else
$this->_out(sprintf('%.3F Tw', 0));
// print out each chunk
$usedWidth = 0; foreach ($content as $k => $chunk) {
$this->restoreFont($font[$k]);
$stringWidth = $this->GetStringWidth($chunk) + ($this->ws * substr_count($chunk, ' ') / $this->k);
// determine which borders should be used
$b = '';
if ($lineCount == 1 && is_int(strpos($border, 'T')))
$b .= 'T';
if ($k == 0 && is_int(strpos($border, 'L')))
$b .= 'L';
if ($k == count($content) - 1 && is_int(strpos($border, 'R')))
$b .= 'R';
// if it's the last chunk of this line, move to the next line after
if ($k == count($content) - 1)
$this->Cell(($maxWidth / $this->k) - $usedWidth + 2 * $this->cMargin, $lineHeight, $chunk, $b, 1, $align, $fill);
else {
$this->Cell($stringWidth + 2 * $this->cMargin, $lineHeight, $chunk, $b, 0, $align, $fill);
$this->x -= 2 * $this->cMargin;
}
$usedWidth += $stringWidth;
}
// move on to the next line, reset variables, tack on saved content and current char
$this->restoreFont($savedFont);
$font = array($savedFont);
$content = array($savedContent . $s[$i]);
$currContent = &$content[0];
$contentWidth = $this->GetStringWidth($currContent) * $this->k;
$cutoffWidth = $contentWidth;
}
// another character will fit, so add it on
else {
$contentWidth += $cw;
$currContent .= $s[$i];
}
}
}
//FFFUNCIONES DE WRITE-HTML
//FFFUNCIONES DE WRITE-HTML
//FFFUNCIONES DE WRITE-HTML
//FFFUNCIONES DE WRITE-HTML
//FFFUNCIONES DE WRITE-HTML
var $B;
var $I;
var $U;
var $HREF;
var $fontlist;
var $issetfont;
var $issetcolor;
function __construct($orientation = 'P', $unit = 'mm', $format = 'A4')
{
//Call parent constructor
parent::__construct($orientation, $unit, $format);
//Initialization
$this->B = 0;
$this->I = 0;
$this->U = 0;
$this->HREF = '';
$this->fontlist = array('arial', 'times', 'courier', 'helvetica', 'symbol');
$this->issetfont = false;
$this->issetcolor = false;
}
// Esta WirteHTML hasta justo antes de Justify permite cargar texto en html para cargar estilos de texto y otras funciones
function WriteHTML($html)
{
//HTML parser
$html = strip_tags($html, "<b><u><i><a><img><p><br><strong><em><font><tr><blockquote>"); //supprime tous les tags sauf ceux reconnus
$html = str_replace("\n", ' ', $html); //remplace retour à la ligne par un espace
$a = preg_split('/<(.*)>/U', $html, -1, PREG_SPLIT_DELIM_CAPTURE); //éclate la chaîne avec les balises
foreach ($a as $i => $e) {
if ($i % 2 == 0) {
//Text
if ($this->HREF)
$this->PutLink($this->HREF, $e);
else
$this->Write(5, stripslashes(txtentities($e)));
} else {
//Tag
if ($e[0] == '/')
$this->CloseTag(strtoupper(substr($e, 1)));
else {
//Extract attributes
$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)
{
//Opening tag
switch ($tag) {
case 'STRONG':
$this->SetStyle('B', true);
break;
case 'EM':
$this->SetStyle('I', true);
break;
case 'B':
case 'I':
case 'U':
$this->SetStyle($tag, true);
break;
case 'A':
$this->HREF = $attr['HREF'];
break;
case 'IMG':
if (isset($attr['SRC']) && (isset($attr['WIDTH']) || isset($attr['HEIGHT']))) {
if (!isset($attr['WIDTH']))
$attr['WIDTH'] = 0;
if (!isset($attr['HEIGHT']))
$attr['HEIGHT'] = 0;
$this->Image($attr['SRC'], $this->GetX(), $this->GetY(), px2mm($attr['WIDTH']), px2mm($attr['HEIGHT']));
}
break;
case 'TR':
case 'BLOCKQUOTE':
case 'BR':
$this->Ln(5);
break;
case 'P':
$this->Ln(10);
break;
case 'FONT':
if (isset($attr['COLOR']) && $attr['COLOR'] != '') {
$coul = hex2dec($attr['COLOR']);
$this->SetTextColor($coul['R'], $coul['V'], $coul['B']);
$this->issetcolor = true;
}
if (isset($attr['FACE']) && in_array(strtolower($attr['FACE']), $this->fontlist)) {
$this->SetFont(strtolower($attr['FACE']));
$this->issetfont = true;
}
break;
}
}
function CloseTag($tag)
{
//Closing tag
if ($tag == 'STRONG')
$tag = 'B';
if ($tag == 'EM')
$tag = 'I';
if ($tag == 'B' || $tag == 'I' || $tag == 'U')
$this->SetStyle($tag, false);
if ($tag == 'A')
$this->HREF = '';
if ($tag == 'FONT') {
if ($this->issetcolor == true) {
$this->SetTextColor(0);
}
if ($this->issetfont) {
$this->SetFont('arial');
$this->issetfont = false;
}
}
}
// function SetStyle($tag, $enable)
// {
// //Modify style and select corresponding font
// $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)
{
//Put a hyperlink
$this->SetTextColor(0, 0, 255);
$this->SetStyle('U', true);
$this->Write(5, $txt, $URL);
$this->SetStyle('U', false);
$this->SetTextColor(0);
}
//FFFUNCIÓN JUSTIFY SOLO SIN FORMATO HMTL NI ESTILOS
//FFFUNCIÓN JUSTIFY SOLO SIN FORMATO HMTL NI ESTILOS
//FFFUNCIÓN JUSTIFY SOLO SIN FORMATO HMTL NI ESTILOS
//FFFUNCIÓN JUSTIFY SOLO SIN FORMATO HMTL NI ESTILOS
//FFFUNCIÓN JUSTIFY SOLO SIN FORMATO HMTL NI ESTILOS
function Justify($text, $w, $h)
{
$tab_paragraphe = explode("\n", $text);
$nb_paragraphe = count($tab_paragraphe);
$j = 0;
while ($j < $nb_paragraphe) {
$paragraphe = $tab_paragraphe[$j];
$tab_mot = explode(' ', $paragraphe);
$nb_mot = count($tab_mot);
// Handle strings longer than paragraph width
$tab_mot2 = array();
$k = 0;
$l = 0;
while ($k < $nb_mot) {
$len_mot = strlen($tab_mot[$k]);
if ($len_mot < ($w - 5)) {
$tab_mot2[$l] = $tab_mot[$k];
$l++;
} else {
$m = 0;
$chaine_lettre = '';
while ($m < $len_mot) {
$lettre = substr($tab_mot[$k], $m, 1);
$len_chaine_lettre = $this->GetStringWidth($chaine_lettre . $lettre);
if ($len_chaine_lettre > ($w - 7)) {
$tab_mot2[$l] = $chaine_lettre . '-';
$chaine_lettre = $lettre;
$l++;
} else {
$chaine_lettre .= $lettre;
}
$m++;
}
if ($chaine_lettre) {
$tab_mot2[$l] = $chaine_lettre;
$l++;
}
}
$k++;
}
// Justified lines
$nb_mot = count($tab_mot2);
$i = 0;
$ligne = '';
while ($i < $nb_mot) {
$mot = $tab_mot2[$i];
$len_ligne = $this->GetStringWidth($ligne . ' ' . $mot);
if ($len_ligne > ($w - 5)) {
$len_ligne = $this->GetStringWidth($ligne);
$nb_carac = strlen($ligne);
$ecart = (($w - 2) - $len_ligne) / $nb_carac;
$this->_out(sprintf('BT %.3F Tc ET', $ecart * $this->k));
$this->MultiCell($w, $h, $ligne);
$ligne = $mot;
} else {
if ($ligne) {
$ligne .= ' ' . $mot;
} else {
$ligne = $mot;
}
}
$i++;
}
// Last line
$this->_out('BT 0 Tc ET');
$this->MultiCell($w, $h, $ligne);
$j++;
}
}
//FUNCION CELL FORZAR JUSTIFICACIÓN
//FUNCION CELL FORZAR JUSTIFICACIÓN
//FUNCION CELL FORZAR JUSTIFICACIÓN
//FUNCION CELL FORZAR JUSTIFICACIÓN
//FUNCION CELL FORZAR JUSTIFICACIÓN
function Cell($w, $h = 0, $txt = '', $border = 0, $ln = 0, $align = '', $fill = false, $link = '')
{
$k = $this->k;
if ($this->y + $h > $this->PageBreakTrigger && !$this->InHeader && !$this->InFooter && $this->AcceptPageBreak()) {
$x = $this->x;
$ws = $this->ws;
if ($ws > 0) {
$this->ws = 0;
$this->_out('0 Tw');
}
$this->AddPage($this->CurOrientation);
$this->x = $x;
if ($ws > 0) {
$this->ws = $ws;
$this->_out(sprintf('%.3F Tw', $ws * $k));
}
}
if ($w == 0)
$w = $this->w - $this->rMargin - $this->x;
$s = '';
if ($fill || $border == 1) {
if ($fill)
$op = ($border == 1) ? 'B' : 'f';
else
$op = 'S';
$s = sprintf('%.2F %.2F %.2F %.2F re %s ', $this->x * $k, ($this->h - $this->y) * $k, $w * $k, -$h * $k, $op);
}
if (is_string($border)) {
$x = $this->x;
$y = $this->y;
if (is_int(strpos($border, 'L')))
$s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $x * $k, ($this->h - $y) * $k, $x * $k, ($this->h - ($y + $h)) * $k);
if (is_int(strpos($border, 'T')))
$s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $x * $k, ($this->h - $y) * $k, ($x + $w) * $k, ($this->h - $y) * $k);
if (is_int(strpos($border, 'R')))
$s .= sprintf('%.2F %.2F m %.2F %.2F l S ', ($x + $w) * $k, ($this->h - $y) * $k, ($x + $w) * $k, ($this->h - ($y + $h)) * $k);
if (is_int(strpos($border, 'B')))
$s .= sprintf('%.2F %.2F m %.2F %.2F l S ', $x * $k, ($this->h - ($y + $h)) * $k, ($x + $w) * $k, ($this->h - ($y + $h)) * $k);
}
if ($txt != '') {
if ($align == 'R')
$dx = $w - $this->cMargin - $this->GetStringWidth($txt);
elseif ($align == 'C')
$dx = ($w - $this->GetStringWidth($txt)) / 2;
elseif ($align == 'FJ') {
//Set word spacing
$wmax = ($w - 2 * $this->cMargin);
$this->ws = ($wmax - $this->GetStringWidth($txt)) / substr_count($txt, ' ');
$this->_out(sprintf('%.3F Tw', $this->ws * $this->k));
$dx = $this->cMargin;
} else
$dx = $this->cMargin;
$txt = str_replace(')', '\\)', str_replace('(', '\\(', str_replace('\\', '\\\\', $txt)));
if ($this->ColorFlag)
$s .= 'q ' . $this->TextColor . ' ';
$s .= sprintf('BT %.2F %.2F Td (%s) Tj ET', ($this->x + $dx) * $k, ($this->h - ($this->y + .5 * $h + .3 * $this->FontSize)) * $k, $txt);
if ($this->underline)
$s .= ' ' . $this->_dounderline($this->x + $dx, $this->y + .5 * $h + .3 * $this->FontSize, $txt);
if ($this->ColorFlag)
$s .= ' Q';
if ($link) {
if ($align == 'FJ')
$wlink = $wmax;
else
$wlink = $this->GetStringWidth($txt);
$this->Link($this->x + $dx, $this->y + .5 * $h - .5 * $this->FontSize, $wlink, $this->FontSize, $link);
}
}
if ($s)
$this->_out($s);
if ($align == 'FJ') {
//Remove word spacing
$this->_out('0 Tw');
$this->ws = 0;
}
$this->lasth = $h;
if ($ln > 0) {
$this->y += $h;
if ($ln == 1)
$this->x = $this->lMargin;
} else
$this->x += $w;
}
// FUNCION FOOTER - (AUTOMATIZADO)
// FUNCION FOOTER - (AUTOMATIZADO)
// FUNCION FOOTER - (AUTOMATIZADO)
// FUNCION FOOTER - (AUTOMATIZADO)
// FUNCION FOOTER - (AUTOMATIZADO)
//USAR : $pdf->AliasNbPages(); ANTES DE : $pdf->AddPage();
function Footer()
{
// Position at 1.5 cm from bottom
$this->SetY(-15);
// Arial italic 8
$this->SetFont('Arial', 'I', 12);
// Page number
// $this->Cell(0,10,'Pagina '.$this->PageNo().'/{nb}',0,0,'C');
$this->Cell(0, 10, ' ' . $this->PageNo() . '', 0, 0, 'L');
}
// CABECERA AUTOMATICA CON LOGO
// CABECERA AUTOMATICA CON LOGO
// CABECERA AUTOMATICA CON LOGO
// CABECERA AUTOMATICA CON LOGO
// CABECERA AUTOMATICA CON LOGO
/*function Header()
{
// Logo
$this->Image('logo.png',10,6,30);
// Arial bold 15
$this->SetFont('Arial','B',15);
// Move to the right
$this->Cell(80);
// Title
$this->Cell(30,10,'Title',1,0,'C');
// Line break
$this->Ln(20);
}*/
// FUNCION GIRAR TEXTO
// FUNCION GIRAR TEXTO
// FUNCION GIRAR TEXTO
// FUNCION GIRAR TEXTO
// FUNCION GIRAR TEXTO
// EJEMPLO DE USOS
// $pdf->TextWithRotation(50,65,'Hello',45,-45);
// $pdf->SetFontSize(30);
// $pdf->TextWithDirection(110,50,'world!','L');
// $pdf->TextWithDirection(110,50,'world!','U');
// $pdf->TextWithDirection(110,50,'world!','R');
// $pdf->TextWithDirection(110,50,'world!','D');
function TextWithDirection($x, $y, $txt, $direction = 'R')
{
if ($direction == 'R')
$s = sprintf('BT %.2F %.2F %.2F %.2F %.2F %.2F Tm (%s) Tj ET', 1, 0, 0, 1, $x * $this->k, ($this->h - $y) * $this->k, $this->_escape($txt));
elseif ($direction == 'L')
$s = sprintf('BT %.2F %.2F %.2F %.2F %.2F %.2F Tm (%s) Tj ET', -1, 0, 0, -1, $x * $this->k, ($this->h - $y) * $this->k, $this->_escape($txt));
elseif ($direction == 'U')
$s = sprintf('BT %.2F %.2F %.2F %.2F %.2F %.2F Tm (%s) Tj ET', 0, 1, -1, 0, $x * $this->k, ($this->h - $y) * $this->k, $this->_escape($txt));
elseif ($direction == 'D')
$s = sprintf('BT %.2F %.2F %.2F %.2F %.2F %.2F Tm (%s) Tj ET', 0, -1, 1, 0, $x * $this->k, ($this->h - $y) * $this->k, $this->_escape($txt));
else
$s = sprintf('BT %.2F %.2F Td (%s) Tj ET', $x * $this->k, ($this->h - $y) * $this->k, $this->_escape($txt));
if ($this->ColorFlag)
$s = 'q ' . $this->TextColor . ' ' . $s . ' Q';
$this->_out($s);
}
function TextWithRotation($x, $y, $txt, $txt_angle, $font_angle = 0)
{
$font_angle += 90 + $txt_angle;
$txt_angle *= M_PI / 180;
$font_angle *= M_PI / 180;
$txt_dx = cos($txt_angle);
$txt_dy = sin($txt_angle);
$font_dx = cos($font_angle);
$font_dy = sin($font_angle);
$s = sprintf('BT %.2F %.2F %.2F %.2F %.2F %.2F Tm (%s) Tj ET', $txt_dx, $txt_dy, $font_dx, $font_dy, $x * $this->k, ($this->h - $y) * $this->k, $this->_escape($txt));
if ($this->ColorFlag)
$s = 'q ' . $this->TextColor . ' ' . $s . ' Q';
$this->_out($s);
}
//FUNCION TRANSPARENCIA DE TEXTO/IMAGEN ALPHA
//FUNCION TRANSPARENCIA DE TEXTO/IMAGEN ALPHA
//FUNCION TRANSPARENCIA DE TEXTO/IMAGEN ALPHA
//FUNCION TRANSPARENCIA DE TEXTO/IMAGEN ALPHA
//FUNCION TRANSPARENCIA DE TEXTO/IMAGEN ALPHA
protected $extgstates = array();
// alpha: real value from 0 (transparent) to 1 (opaque)
// bm: blend mode, one of the following:
// Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn,
// HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity
function SetAlpha($alpha, $bm = 'Normal')
{
// set alpha for stroking (CA) and non-stroking (ca) operations
$gs = $this->AddExtGState(array('ca' => $alpha, 'CA' => $alpha, 'BM' => '/' . $bm));
$this->SetExtGState($gs);
}
function AddExtGState($parms)
{
$n = count($this->extgstates) + 1;
$this->extgstates[$n]['parms'] = $parms;
return $n;
}
function SetExtGState($gs)
{
$this->_out(sprintf('/GS%d gs', $gs));
}
function _enddoc()
{
if (!empty($this->extgstates) && $this->PDFVersion < '1.4')
$this->PDFVersion = '1.4';
parent::_enddoc();
}
function _putextgstates()
{
for ($i = 1; $i <= count($this->extgstates); $i++) {
$this->_newobj();
$this->extgstates[$i]['n'] = $this->n;
$this->_put('<</Type /ExtGState');
$parms = $this->extgstates[$i]['parms'];
$this->_put(sprintf('/ca %.3F', $parms['ca']));
$this->_put(sprintf('/CA %.3F', $parms['CA']));
$this->_put('/BM ' . $parms['BM']);
$this->_put('>>');
$this->_put('endobj');
}
}
function _putresourcedict()
{
parent::_putresourcedict();
$this->_put('/ExtGState <<');
foreach ($this->extgstates as $k => $extgstate)
$this->_put('/GS' . $k . ' ' . $extgstate['n'] . ' 0 R');
$this->_put('>>');
}
function _putresources()
{
$this->_putextgstates();
parent::_putresources();
}
// WRITETAG PARA JUSTIFICAR HTML
// WRITETAG PARA JUSTIFICAR HTML
// WRITETAG PARA JUSTIFICAR HTML
// WRITETAG PARA JUSTIFICAR HTML
// WRITETAG PARA JUSTIFICAR HTML
// WRITETAG PARA JUSTIFICAR HTML
protected $wLine; // Maximum width of the line
protected $hLine; // Height of the line
protected $Text; // Text to display
protected $border;
protected $align; // Justification of the text
protected $fill;
protected $Padding;
protected $lPadding;
protected $tPadding;
protected $bPadding;
protected $rPadding;
protected $TagStyle; // Style for each tag
protected $Indent;
protected $Bullet; // Bullet character
protected $Space; // Minimum space between words
protected $PileStyle;
protected $Line2Print; // Line to display
protected $NextLineBegin; // Buffer between lines
protected $TagName;
protected $Delta; // Maximum width minus width
protected $StringLength;
protected $LineLength;
protected $wTextLine; // Width minus paddings
protected $nbSpace; // Number of spaces in the line
protected $Xini; // Initial position
protected $href; // Current URL
protected $TagHref; // URL for a cell
protected $LastLine;
// ESTILOS PARA WRITE TAG
// (tag, tipo_letra, estilo, tamaño, color, espaciado)
// $pdf->SetStyle("h1","helvetica","B",14,"0,0,0",0);
// $pdf->SetStyle("p","helvetica","N",11,"0,0,0");
// $pdf->SetStyle("i","helvetica","I",11,"0,0,0");
// $pdf->SetStyle("em","helvetica","I",11,"0,0,0");
// $pdf->SetStyle("b","helvetica","B",11,"0,0,0");
// $pdf->SetStyle("strong","helvetica","B",11,"0,0,0");
// $pdf->SetStyle("u","helvetica","U",11,"0,0,0");
// $pdf->SetStyle("under","helvetica","U",11,"0,0,0");
// $pdf->SetStyle("li","helvetica","N",11,"0,0,0",15,'-');
// $contenidoresult = iconv('UTF-8', 'windows-1252', html_entity_decode("$contenido"));
// $pdf->WriteTag(0,5,$contenidoresult,0,"J",0,1);
// Public Functions
function WriteTag($w, $h, $txt, $border = 0, $align = "J", $fill = false, $padding = 0)
{
$this->wLine = $w;
$this->hLine = $h;
$this->Text = trim($txt);
$this->Text = preg_replace("/\n|\r|\t/", "", $this->Text);
$this->border = $border;
$this->align = $align;
$this->fill = $fill;
$this->Padding = $padding;
$this->Xini = $this->GetX();
$this->href = "";
$this->PileStyle = array();
$this->TagHref = array();
$this->LastLine = false;
$this->NextLineBegin = array();
$this->SetSpace();
$this->Padding();
$this->LineLength();
$this->BorderTop();
while ($this->Text != "") {
$this->MakeLine();
$this->PrintLine();
}
$this->BorderBottom();
}
function SetStyle($tag, $family, $style, $size, $color, $indent = -1, $bullet = '')
{
$tag = trim($tag);
$this->TagStyle[$tag]['family'] = trim($family);
$this->TagStyle[$tag]['style'] = trim($style);
$this->TagStyle[$tag]['size'] = trim($size);
$this->TagStyle[$tag]['color'] = trim($color);
$this->TagStyle[$tag]['indent'] = $indent;
$this->TagStyle[$tag]['bullet'] = $bullet;
}
// Private Functions
function SetSpace() // Minimal space between words
{
$tag = $this->Parser($this->Text);
$this->FindStyle($tag[2], 0);
$this->DoStyle(0);
$this->Space = $this->GetStringWidth(" ");
}
function Padding()
{
if (preg_match("/^.+,/", $this->Padding)) {
$tab = explode(",", $this->Padding);
$this->lPadding = $tab[0];
$this->tPadding = $tab[1];
if (isset($tab[2]))
$this->bPadding = $tab[2];
else
$this->bPadding = $this->tPadding;
if (isset($tab[3]))
$this->rPadding = $tab[3];
else
$this->rPadding = $this->lPadding;
} else {
$this->lPadding = $this->Padding;
$this->tPadding = $this->Padding;
$this->bPadding = $this->Padding;
$this->rPadding = $this->Padding;
}
if ($this->tPadding < $this->LineWidth)
$this->tPadding = $this->LineWidth;
}
function LineLength()
{
if ($this->wLine == 0)
$this->wLine = $this->w - $this->Xini - $this->rMargin;
$this->wTextLine = $this->wLine - $this->lPadding - $this->rPadding;
}
function BorderTop()
{
$border = 0;
if ($this->border == 1)
$border = "TLR";
$this->Cell($this->wLine, $this->tPadding, "", $border, 0, 'C', $this->fill);
$y = $this->GetY() + $this->tPadding;
$this->SetXY($this->Xini, $y);
}
function BorderBottom()
{
$border = 0;
if ($this->border == 1)
$border = "BLR";
$this->Cell($this->wLine, $this->bPadding, "", $border, 0, 'C', $this->fill);
}
function DoStyle($ind) // Applies a style
{
if (!isset($this->TagStyle[$ind]))
return;
$this->SetFont(
$this->TagStyle[$ind]['family'],
$this->TagStyle[$ind]['style'],
$this->TagStyle[$ind]['size']
);
$tab = explode(",", $this->TagStyle[$ind]['color']);
if (count($tab) == 1)
$this->SetTextColor($tab[0]);
else
$this->SetTextColor($tab[0], $tab[1], $tab[2]);
}
function FindStyle($tag, $ind) // Inheritance from parent elements
{
$tag = trim($tag);
// Family
if ($this->TagStyle[$tag]['family'] != "")
$family = $this->TagStyle[$tag]['family'];
else {
foreach ($this->PileStyle as $val) {
$val = trim($val);
if ($this->TagStyle[$val]['family'] != "") {
$family = $this->TagStyle[$val]['family'];
break;
}
}
}
// Style
$style = "";
$style1 = strtoupper($this->TagStyle[$tag]['style']);
if ($style1 != "N") {
$bold = false;
$italic = false;
$underline = false;
foreach ($this->PileStyle as $val) {
$val = trim($val);
$style1 = strtoupper($this->TagStyle[$val]['style']);
if ($style1 == "N")
break;
else {
if (strpos($style1, "B") !== false)
$bold = true;
if (strpos($style1, "I") !== false)
$italic = true;
if (strpos($style1, "U") !== false)
$underline = true;
}
}
if ($bold)
$style .= "B";
if ($italic)
$style .= "I";
if ($underline)
$style .= "U";
}
// Size
if ($this->TagStyle[$tag]['size'] != 0)
$size = $this->TagStyle[$tag]['size'];
else {
foreach ($this->PileStyle as $val) {
$val = trim($val);
if ($this->TagStyle[$val]['size'] != 0) {
$size = $this->TagStyle[$val]['size'];
break;
}
}
}
// Color
if ($this->TagStyle[$tag]['color'] != "")
$color = $this->TagStyle[$tag]['color'];
else {
foreach ($this->PileStyle as $val) {
$val = trim($val);
if ($this->TagStyle[$val]['color'] != "") {
$color = $this->TagStyle[$val]['color'];
break;
}
}
}
// Result
$this->TagStyle[$ind]['family'] = $family;
$this->TagStyle[$ind]['style'] = $style;
$this->TagStyle[$ind]['size'] = $size;
$this->TagStyle[$ind]['color'] = $color;
$this->TagStyle[$ind]['indent'] = $this->TagStyle[$tag]['indent'];
}
function Parser($text)
{
$tab = array();
// Closing tag
if (preg_match("|^(</([^>]+)>)|", $text, $regs)) {
$tab[1] = "c";
$tab[2] = trim($regs[2]);
}
// Opening tag
else if (preg_match("|^(<([^>]+)>)|", $text, $regs)) {
$regs[2] = preg_replace("/^a/", "a ", $regs[2]);
$tab[1] = "o";
$tab[2] = trim($regs[2]);
// Presence of attributes
if (preg_match("/(.+) (.+)='(.+)'/", $regs[2])) {
$tab1 = preg_split("/ +/", $regs[2]);
$tab[2] = trim($tab1[0]);
foreach ($tab1 as $i => $couple) {
if ($i > 0) {
$tab2 = explode("=", $couple);
$tab2[0] = trim($tab2[0]);
$tab2[1] = trim($tab2[1]);
$end = strlen($tab2[1]) - 2;
$tab[$tab2[0]] = substr($tab2[1], 1, $end);
}
}
}
}
// Space
else if (preg_match("/^( )/", $text, $regs)) {
$tab[1] = "s";
$tab[2] = ' ';
}
// Text
else if (preg_match("/^([^< ]+)/", $text, $regs)) {
$tab[1] = "t";
$tab[2] = trim($regs[1]);
}
$begin = strlen($regs[1]);
$end = strlen($text);
$text = substr($text, $begin, $end);
$tab[0] = $text;
return $tab;
}
function MakeLine()
{
$this->Text .= " ";
$this->LineLength = array();
$this->TagHref = array();
$Length = 0;
$this->nbSpace = 0;
$i = $this->BeginLine();
$this->TagName = array();
if ($i == 0) {
$Length = $this->StringLength[0];
$this->TagName[0] = 1;
$this->TagHref[0] = $this->href;
}
while ($Length < $this->wTextLine) {
$tab = $this->Parser($this->Text);
$this->Text = $tab[0];
if ($this->Text == "") {
$this->LastLine = true;
break;
}
if ($tab[1] == "o") {
array_unshift($this->PileStyle, $tab[2]);
$this->FindStyle($this->PileStyle[0], $i + 1);
$this->DoStyle($i + 1);
$this->TagName[$i + 1] = 1;
if ($this->TagStyle[$tab[2]]['indent'] != -1) {
$Length += $this->TagStyle[$tab[2]]['indent'];
$this->Indent = $this->TagStyle[$tab[2]]['indent'];
$this->Bullet = $this->TagStyle[$tab[2]]['bullet'];
}
if ($tab[2] == "a")
$this->href = $tab['href'];
}
if ($tab[1] == "c") {
array_shift($this->PileStyle);
if (isset($this->PileStyle[0])) {
$this->FindStyle($this->PileStyle[0], $i + 1);
$this->DoStyle($i + 1);
}
$this->TagName[$i + 1] = 1;
if ($this->TagStyle[$tab[2]]['indent'] != -1) {
$this->LastLine = true;
$this->Text = trim($this->Text);
break;
}
if ($tab[2] == "a")
$this->href = "";
}
if ($tab[1] == "s") {
$i++;
$Length += $this->Space;
$this->Line2Print[$i] = "";
if ($this->href != "")
$this->TagHref[$i] = $this->href;
}
if ($tab[1] == "t") {
$i++;
$this->StringLength[$i] = $this->GetStringWidth($tab[2]);
$Length += $this->StringLength[$i];
$this->LineLength[$i] = $Length;
$this->Line2Print[$i] = $tab[2];
if ($this->href != "")
$this->TagHref[$i] = $this->href;
}
}
trim($this->Text);
if ($Length > $this->wTextLine || $this->LastLine == true)
$this->EndLine();
}
function BeginLine()
{
$this->Line2Print = array();
$this->StringLength = array();
if (isset($this->PileStyle[0])) {
$this->FindStyle($this->PileStyle[0], 0);
$this->DoStyle(0);
}
if (count($this->NextLineBegin) > 0) {
$this->Line2Print[0] = $this->NextLineBegin['text'];
$this->StringLength[0] = $this->NextLineBegin['length'];
$this->NextLineBegin = array();
$i = 0;
} else {
preg_match("/^(( *(<([^>]+)>)* *)*)(.*)/", $this->Text, $regs);
$regs[1] = str_replace(" ", "", $regs[1]);
$this->Text = $regs[1] . $regs[5];
$i = -1;
}
return $i;
}
function EndLine()
{
if (end($this->Line2Print) != "" && $this->LastLine == false) {
$this->NextLineBegin['text'] = array_pop($this->Line2Print);
$this->NextLineBegin['length'] = end($this->StringLength);
array_pop($this->LineLength);
}
while (end($this->Line2Print) === "")
array_pop($this->Line2Print);
$this->Delta = $this->wTextLine - end($this->LineLength);
$this->nbSpace = 0;
for ($i = 0; $i < count($this->Line2Print); $i++) {
if ($this->Line2Print[$i] == "")
$this->nbSpace++;
}
}
function PrintLine()
{
$border = 0;
if ($this->border == 1)
$border = "LR";
$this->Cell($this->wLine, $this->hLine, "", $border, 0, 'C', $this->fill);
$y = $this->GetY();
$this->SetXY($this->Xini + $this->lPadding, $y);
if ($this->Indent > 0) {
if ($this->Bullet != '')
$this->SetTextColor(0);
$this->Cell($this->Indent, $this->hLine, $this->Bullet);
$this->Indent = -1;
$this->Bullet = '';
}
$space = $this->LineAlign();
$this->DoStyle(0);
for ($i = 0; $i < count($this->Line2Print); $i++) {
if (isset($this->TagName[$i]))
$this->DoStyle($i);
if (isset($this->TagHref[$i]))
$href = $this->TagHref[$i];
else
$href = '';
if ($this->Line2Print[$i] == "")
$this->Cell($space, $this->hLine, " ", 0, 0, 'C', false, $href);
else
$this->Cell($this->StringLength[$i], $this->hLine, $this->Line2Print[$i], 0, 0, 'C', false, $href);
}
$this->LineBreak();
if ($this->LastLine && $this->Text != "")
$this->EndParagraph();
$this->LastLine = false;
}
function LineAlign()
{
$space = $this->Space;
if ($this->align == "J") {
if ($this->nbSpace != 0)
$space = $this->Space + ($this->Delta / $this->nbSpace);
if ($this->LastLine)
$space = $this->Space;
}
if ($this->align == "R")
$this->Cell($this->Delta, $this->hLine);
if ($this->align == "C")
$this->Cell($this->Delta / 2, $this->hLine);
return $space;
}
function LineBreak()
{
$x = $this->Xini;
$y = $this->GetY() + $this->hLine;
$this->SetXY($x, $y);
}
function EndParagraph()
{
$border = 0;
if ($this->border == 1)
$border = "LR";
$this->Cell($this->wLine, $this->hLine / 2, "", $border, 0, 'C', $this->fill);
$x = $this->Xini;
$y = $this->GetY() + $this->hLine / 2;
$this->SetXY($x, $y);
}
}
// EXPANSIÓN PARA WRITE HTML
// EXPANSIÓN PARA WRITE HTML
// EXPANSIÓN PARA WRITE HTML
// EXPANSIÓN PARA WRITE HTML
// EXPANSIÓN PARA WRITE HTML
// function hex2dec($couleur = "#000000"){
// $R = substr($couleur, 1, 2);
// $rouge = hexdec($R);
// $V = substr($couleur, 3, 2);
// $vert = hexdec($V);
// $B = substr($couleur, 5, 2);
// $bleu = hexdec($B);
// $tbl_couleur = array();
// $tbl_couleur['R']=$rouge;
// $tbl_couleur['G']=$vert;
// $tbl_couleur['B']=$bleu;
// return $tbl_couleur;
// }
// //conversion pixel -> millimeter in 72 dpi
// function px2mm($px){
// return $px*25.4/72;
// }
// function txtentities($html){
// $trans = get_html_translation_table(HTML_ENTITIES);
// $trans = array_flip($trans);
// return strtr($html, $trans);
// }
// ////////////////////////////////////
// class PDF extends FPDF
// {
// //variables of html parser
// protected $B;
// protected $I;
// protected $U;
// protected $HREF;
// protected $fontList;
// protected $issetfont;
// protected $issetcolor;
// function __construct($orientation='P', $unit='mm', $format='A4')
// {
// //Call parent constructor
// parent::__construct($orientation,$unit,$format);
// //Initialization
// $this->B=0;
// $this->I=0;
// $this->U=0;
// $this->HREF='';
// $this->tableborder=0;
// $this->tdbegin=false;
// $this->tdwidth=0;
// $this->tdheight=0;
// $this->tdalign="L";
// $this->tdbgcolor=false;
// $this->oldx=0;
// $this->oldy=0;
// $this->fontlist=array("arial","times","courier","helvetica","symbol");
// $this->issetfont=false;
// $this->issetcolor=false;
// }
// //////////////////////////////////////
// //html parser
// function WriteHTML($html)
// {
// $html=strip_tags($html,"<b><u><i><a><img><p><br><strong><em><font><tr><blockquote><hr><td><tr><table><sup>"); //remove all unsupported tags
// $html=str_replace("\n",'',$html); //replace carriage returns with spaces
// $html=str_replace("\t",'',$html); //replace carriage returns with spaces
// $a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE); //explode the string
// foreach($a as $i=>$e)
// {
// if($i%2==0)
// {
// //Text
// if($this->HREF)
// $this->PutLink($this->HREF,$e);
// elseif($this->tdbegin) {
// if(trim($e)!='' && $e!=" ") {
// $this->Cell($this->tdwidth,$this->tdheight,$e,$this->tableborder,'',$this->tdalign,$this->tdbgcolor);
// }
// elseif($e==" ") {
// $this->Cell($this->tdwidth,$this->tdheight,'',$this->tableborder,'',$this->tdalign,$this->tdbgcolor);
// }
// }
// else
// $this->Write(5,stripslashes(txtentities($e)));
// }
// else
// {
// //Tag
// if($e[0]=='/')
// $this->CloseTag(strtoupper(substr($e,1)));
// else
// {
// //Extract attributes
// $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)
// {
// //Opening tag
// switch($tag){
// case 'SUP':
// if( !empty($attr['SUP']) ) {
// //Set current font to 6pt
// $this->SetFont('','',6);
// //Start 125cm plus width of cell to the right of left margin
// //Superscript "1"
// $this->Cell(2,2,$attr['SUP'],0,0,'L');
// }
// break;
// case 'TABLE': // TABLE-BEGIN
// if( !empty($attr['BORDER']) ) $this->tableborder=$attr['BORDER'];
// else $this->tableborder=0;
// break;
// case 'TR': //TR-BEGIN
// break;
// case 'TD': // TD-BEGIN
// if( !empty($attr['WIDTH']) ) $this->tdwidth=($attr['WIDTH']/4);
// else $this->tdwidth=40; // Set to your own width if you need bigger fixed cells
// if( !empty($attr['HEIGHT']) ) $this->tdheight=($attr['HEIGHT']/6);
// else $this->tdheight=6; // Set to your own height if you need bigger fixed cells
// if( !empty($attr['ALIGN']) ) {
// $align=$attr['ALIGN'];
// if($align=='LEFT') $this->tdalign='L';
// if($align=='CENTER') $this->tdalign='C';
// if($align=='RIGHT') $this->tdalign='R';
// }
// else $this->tdalign='L'; // Set to your own
// if( !empty($attr['BGCOLOR']) ) {
// $coul=hex2dec($attr['BGCOLOR']);
// $this->SetFillColor($coul['R'],$coul['G'],$coul['B']);
// $this->tdbgcolor=true;
// }
// $this->tdbegin=true;
// break;
// case 'HR':
// if( !empty($attr['WIDTH']) )
// $Width = $attr['WIDTH'];
// else
// $Width = $this->w - $this->lMargin-$this->rMargin;
// $x = $this->GetX();
// $y = $this->GetY();
// $this->SetLineWidth(0.2);
// $this->Line($x,$y,$x+$Width,$y);
// $this->SetLineWidth(0.2);
// $this->Ln(1);
// break;
// case 'STRONG':
// $this->SetStyle('B',true);
// break;
// case 'EM':
// $this->SetStyle('I',true);
// break;
// case 'B':
// case 'I':
// case 'U':
// $this->SetStyle($tag,true);
// break;
// case 'A':
// $this->HREF=$attr['HREF'];
// break;
// case 'IMG':
// if(isset($attr['SRC']) && (isset($attr['WIDTH']) || isset($attr['HEIGHT']))) {
// if(!isset($attr['WIDTH']))
// $attr['WIDTH'] = 0;
// if(!isset($attr['HEIGHT']))
// $attr['HEIGHT'] = 0;
// $this->Image($attr['SRC'], $this->GetX(), $this->GetY(), px2mm($attr['WIDTH']), px2mm($attr['HEIGHT']));
// }
// break;
// case 'BLOCKQUOTE':
// case 'BR':
// $this->Ln(5);
// break;
// case 'P':
// $this->Ln(10);
// break;
// case 'FONT':
// if (isset($attr['COLOR']) && $attr['COLOR']!='') {
// $coul=hex2dec($attr['COLOR']);
// $this->SetTextColor($coul['R'],$coul['G'],$coul['B']);
// $this->issetcolor=true;
// }
// if (isset($attr['FACE']) && in_array(strtolower($attr['FACE']), $this->fontlist)) {
// $this->SetFont(strtolower($attr['FACE']));
// $this->issetfont=true;
// }
// if (isset($attr['FACE']) && in_array(strtolower($attr['FACE']), $this->fontlist) && isset($attr['SIZE']) && $attr['SIZE']!='') {
// $this->SetFont(strtolower($attr['FACE']),'',$attr['SIZE']);
// $this->issetfont=true;
// }
// break;
// }
// }
// function CloseTag($tag)
// {
// //Closing tag
// if($tag=='SUP') {
// }
// if($tag=='TD') { // TD-END
// $this->tdbegin=false;
// $this->tdwidth=0;
// $this->tdheight=0;
// $this->tdalign="L";
// $this->tdbgcolor=false;
// }
// if($tag=='TR') { // TR-END
// $this->Ln();
// }
// if($tag=='TABLE') { // TABLE-END
// $this->tableborder=0;
// }
// if($tag=='STRONG')
// $tag='B';
// if($tag=='EM')
// $tag='I';
// if($tag=='B' || $tag=='I' || $tag=='U')
// $this->SetStyle($tag,false);
// if($tag=='A')
// $this->HREF='';
// if($tag=='FONT'){
// if ($this->issetcolor==true) {
// $this->SetTextColor(0);
// }
// if ($this->issetfont) {
// $this->SetFont('arial');
// $this->issetfont=false;
// }
// }
// }
// function SetStyle($tag, $enable)
// {
// //Modify style and select corresponding font
// $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)
// {
// //Put a hyperlink
// $this->SetTextColor(0,0,255);
// $this->SetStyle('U',true);
// $this->Write(5,$txt,$URL);
// $this->SetStyle('U',false);
// $this->SetTextColor(0);
// }
// }
?>