%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/tjamichg/intranet.tjamich.gob.mx/intranet/pdf/
Upload File :
Create Path :
Current File : /home/tjamichg/intranet.tjamich.gob.mx/intranet/pdf/flowing_blockv5.php

<?php



// ini_set('display_errors', 1);

// ini_set('display_startup_errors', 1);

// error_reporting(E_ALL);





//FUNCION FECHA A TEXTO

//FUNCION FECHA A TEXTO

//FUNCION FECHA A TEXTO

//FUNCION FECHA A TEXTO

//FUNCION FECHA A TEXTO

/*------------------------------------------------------------------

 * hug0

 * Blog Kiuvox

 * funcion para generar la fecha en letras

 * http://blog.kiuvox.com

 * ----------------------------------------------------------------

 */

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,'MFHO/AIVN/JJHAA - '.$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 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!="&nbsp;") {

//                     $this->Cell($this->tdwidth,$this->tdheight,$e,$this->tableborder,'',$this->tdalign,$this->tdbgcolor);

//                 }

//                 elseif($e=="&nbsp;") {

//                     $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);

// }

// }

?>

Zerion Mini Shell 1.0