%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/tjamichg/intranet.tjamich.gob.mx/intranet/sistemas/declaraciones/
Upload File :
Create Path :
Current File : /home/tjamichg/intranet.tjamich.gob.mx/intranet/sistemas/declaraciones/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!="&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