librería pdf

Upload: mauro-miguel-melo

Post on 30-May-2018

262 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 Librera PDF

    1/21

    EJEMPLO BSICO

    Comencemos con el clsico ejemplo:

    Despus de incluir el fichero de la clase, creamos el objeto FDPF. El constructorFPDF() se usa aqu con sus valores por defecto: las pginas son de tamao a4alargado y la unidad de medida es el milmetro. Se podra haber declaradoexplcitamente con: $pdf=new FPDF('P','mm','A4');

    Es posible usar el formato apaisado(L), otros formatos de pgina (como Carta yLegal) y otras unidades de medida (pt, cm, in).

    Por el momento no hemos creado ninguna pgina, as que aadiremos una conAddPage(). El origen de coordenadas est en la esquina superior izquierda y laposicin actual est por defecto situada a 1 cm de los bordes; los mrgenespueden cambiarse con SetMargins().

    Antes de que podamos imprimir texto, es obligatorio escoger una fuente con

    SetFont(), si no, el documento no ser vlido. Escogemos Arial en negrita detamao 16: $pdf->SetFont('Arial','B',16);

    Podramos haber especificado itlica con I, subrayado con U o normal con unacadena vaca (o cualquier combinacin de las anteriores). Observe que el tamaode la fuente se detemina en puntos, no en milmetros (ni en cualquier otra unidadestablecida por el usuario); es la nica excepcin. Las otras fuentes incorporadasson Times, Courier, Symbol y ZapfDingbats.

    Ahora podemos imprimir una celda con Cell(). Una celda es una superficie

    rectangular, con borde si se quiere, que contiene texto. Se imprime en la posicinactual. Especificamos sus dimensiones, el texto (centrado o alineado), si queremosdibujar o no los bordes, y dnde se ubicar la posicin actual despus de imprimirla celda (a la derecha, debajo o al principio de la siguiente lnea). Para aadir elborde, deberemos hacer esto: $pdf->Cell(40,10,'Hola, Mundo!',1);

    Para aadir una nueva celda a continuacin, con el texto centrado e ir a lasiguiente lnea, escribiremos: $pdf->Cell(60,10,'Hecho con FPDF.',0,1,'C');

    Nota: el salto de lnea puede provocarse tambin mediante Ln(). Este mtodo le

    permite especificar adems la altura del salto.

  • 8/14/2019 Librera PDF

    2/21

    Finalmente, el documento se cierra y se enva al navegador con Output(). Tambinpodramos haberlo guardado en un fichero pasando como parmetro el nombre delarchivo.

    Cuidado: en caso de que el PDF se enve al navegador, nada ms debe enviarse, niantes ni despus (el ms mnimo espacio en blanco o retorno de carro tambincuenta). Si se enva algn dato antes, obtendr el mensaje de error: "Some datahas already been output, can't send PDF file". Si se enva despus, su navegadorpuede que muestre nicamente una pgina en blanco.

    CABECERA, PIE, SALTO DE PGINA E IMAGEN

    Aqu tenemos un ejemplo de dos pginas con cabacera, pie de pgina y logotipo:

  • 8/14/2019 Librera PDF

    3/21

    $pdf->AddPage();$pdf->SetFont('Times','',12);for($i=1;$iCell(0,10,'Imprimiendo lnea nmero '.$i,0,1);$pdf->Output();?>

    Este ejemplo hace uso de los mtodos Header() y Footer() para procesar lascabeceras y pies de pginas. Se llaman automticamente. Ya existen en la claseFPDF origuinal, pero no hacen nada. Por ello, tenemos que heredar la clase ysobreescribirlos.

    El logotipo se imprime con el mtodo Image() especificando su esquina superiorizquierda y su anchura. La altura se calcula automticamente respetando lasproporciones de la imagen.

    Para imprimir el nmero de pgina, se le pasa un valor nulo (null) como ancho dela celda. Eso significa que la celda se extender hasta el margen derecho de lapgina; puede ser til centrar el texto. El nmero actual de la pgina se devuelvepor el mtodos PageNo(); mientras que el nmero total de pginas se obtienemediante un valor especial de {nb} que ser sustituido cuando se cierre eldocumento (suponiendo que usted antes utilizara AliasNbPages()).Observe el uso del mtodo SetY() que le permite especificar la posicin en unaubicacin absoluta respecto del origen de coordenadas de la pgina, empezandopor el principio o por el final.

    Otra caracterstica interesante se usa en el ejemplo: el salto automtico depgina. Tan pronto como una celda cruza el lmite mximo de la pgina (a 2 cmdel final, por defecto), se ejecuta un salto y se recupera la fuente. Aunque lacabecera y el pie usan su propia fuente (Arial), el cuerpo del documento continuacon Times. Este mecanismo automtico de recuperacin tambin se aplica a loscolores y al ancho de lnea. El lmite que fuerza los saltos de pgina puedeestablecerse con SetAutoPageBreak().

    SALTOS DE LNEA Y COLORES

    Continuemos con un ejemplo que imprime prrafos justificados. Tambin ilustra eluso de colores.

  • 8/14/2019 Librera PDF

    4/21

    //Calculamos ancho y posicin del ttulo.$w=$this->GetStringWidth($title)+6;$this->SetX((210-$w)/2);

    //Colores de los bordes, fondo y texto$this->SetDrawColor(0,80,180);$this->SetFillColor(230,230,0);$this->SetTextColor(220,50,50);

    //Ancho del borde (1 mm)$this->SetLineWidth(1);

    //Ttulo$this->Cell($w,9,$title,1,1,'C',true);

    //Salto de lnea$this->Ln(10);

    }

    function Footer(){

    //Posicin a 1,5 cm del final$this->SetY(-15);

    //Arial itlica 8$this->SetFont('Arial','I',8);

    //Color del texto en gris$this->SetTextColor(128);

    //Nmero de pgina$this->Cell(0,10,'Pgina '.$this->PageNo(),0,0,'C');

    }

    function ChapterTitle($num,$label){

    //Arial 12$this->SetFont('Arial','',12);

    //Color de fondo$this->SetFillColor(200,220,255);

    //Ttulo$this->Cell(0,6,"Captulo $num : $label",0,1,'L',true);

    //Salto de lnea$this->Ln(4);

    }

    function ChapterBody($file){

    //Leemos el fichero$f=fopen($file,'r');$txt=fread($f,filesize($file));fclose($f);

    //Times 12$this->SetFont('Times','',12);

    //Imprimimos el texto justificado$this->MultiCell(0,5,$txt);//Salto de lnea

  • 8/14/2019 Librera PDF

    5/21

    $this->Ln();//Cita en itlica$this->SetFont('','I');$this->Cell(0,5,'(fin del extracto)');

    }

    function PrintChapter($num,$title,$file){

    $this->AddPage();$this->ChapterTitle($num,$title);$this->ChapterBody($file);

    }}

    $pdf=new PDF();$title='20000 Leguas de Viaje Submarino';$pdf->SetTitle($title);

    $pdf->SetAuthor('Julio Verne');$pdf->PrintChapter(1,'UN RIZO DE HUIDA','20k_c1.txt');$pdf->PrintChapter(2,'LOS PROS Y LOS CONTRAS','20k_c2.txt');$pdf->Output();?>El mtodo GetStringWidth() le permite determinar la longitud de una cadena en eltipo de letra actual, y se usa aqu para calcular la posicin y ancho del borde querodea al ttulo. Despus se establecen los colores (mediante SetDrawColor(),SetFillColor() y SetTextColor()) y el borde de la lnea se establece en 1 mm (encontra de los 0,2 por defecto) con SetLineWidth(). Finalmente, imprimimos la

    celda (el ltimo parmetro a 1 indica que debe colorearse el fondo).

    El mtodo usado para imprimir los prrafos es MultiCell(). Cada vez que la lneallega al extremo derecho de la celda o aparece un carcter de fin de lnea, seejecuta un salto de lnea y se crea automticamente otra celda debajo de laactual. El texto se encuentra justificado por defecto.

    Se definen dos propiedades del documento: ttulo (SetTitle()) y autor(SetAuthor()). Las propiedades pueden verse de dos maneras. La primera es abrirel documento directamente con Acrobat Reader, vaya al men Archivo y

    seleccione la opcin Propiedades del documento. La segunda, tambin disponibledesde el plug-in, es hacer clic con el botn derecho y seleccione Propiedades deldocumento.

    SALTOS DE LNEA Y COLORES

    Continuemos con un ejemplo que imprime prrafos justificados. Tambin ilustra eluso de colores.

  • 8/14/2019 Librera PDF

    6/21

    class PDF extends FPDF{function Header(){

    global $title;

    //Arial bold 15$this->SetFont('Arial','B',15);

    //Calculamos ancho y posicin del ttulo.$w=$this->GetStringWidth($title)+6;$this->SetX((210-$w)/2);

    //Colores de los bordes, fondo y texto$this->SetDrawColor(0,80,180);$this->SetFillColor(230,230,0);$this->SetTextColor(220,50,50);

    //Ancho del borde (1 mm)

    $this->SetLineWidth(1);//Ttulo$this->Cell($w,9,$title,1,1,'C',true);

    //Salto de lnea$this->Ln(10);

    }

    function Footer(){

    //Posicin a 1,5 cm del final

    $this->SetY(-15);//Arial itlica 8$this->SetFont('Arial','I',8);

    //Color del texto en gris$this->SetTextColor(128);

    //Nmero de pgina$this->Cell(0,10,'Pgina '.$this->PageNo(),0,0,'C');

    }

    function ChapterTitle($num,$label)

    { //Arial 12$this->SetFont('Arial','',12);

    //Color de fondo$this->SetFillColor(200,220,255);

    //Ttulo$this->Cell(0,6,"Captulo $num : $label",0,1,'L',true);

    //Salto de lnea$this->Ln(4);

    }

    function ChapterBody($file){

  • 8/14/2019 Librera PDF

    7/21

    //Leemos el fichero$f=fopen($file,'r');$txt=fread($f,filesize($file));fclose($f);

    //Times 12$this->SetFont('Times','',12);

    //Imprimimos el texto justificado$this->MultiCell(0,5,$txt);

    //Salto de lnea$this->Ln();

    //Cita en itlica$this->SetFont('','I');$this->Cell(0,5,'(fin del extracto)');

    }

    function PrintChapter($num,$title,$file){

    $this->AddPage();$this->ChapterTitle($num,$title);$this->ChapterBody($file);

    }}

    $pdf=new PDF();$title='20000 Leguas de Viaje Submarino';$pdf->SetTitle($title);$pdf->SetAuthor('Julio Verne');

    $pdf->PrintChapter(1,'UN RIZO DE HUIDA','20k_c1.txt');$pdf->PrintChapter(2,'LOS PROS Y LOS CONTRAS','20k_c2.txt');$pdf->Output();?>

    [Demo]El mtodo GetStringWidth() le permite determinar la longitud de una cadena en eltipo de letra actual, y se usa aqu para calcular la posicin y ancho del borde querodea al ttulo. Despus se establecen los colores (mediante SetDrawColor(),

    SetFillColor() y SetTextColor()) y el borde de la lnea se establece en 1 mm (encontra de los 0,2 por defecto) con SetLineWidth(). Finalmente, imprimimos lacelda (el ltimo parmetro a 1 indica que debe colorearse el fondo).

    El mtodo usado para imprimir los prrafos es MultiCell(). Cada vez que la lneallega al extremo derecho de la celda o aparece un carcter de fin de lnea, seejecuta un salto de lnea y se crea automticamente otra celda debajo de laactual. El texto se encuentra justificado por defecto.

    Se definen dos propiedades del documento: ttulo (SetTitle()) y autor

    (SetAuthor()). Las propiedades pueden verse de dos maneras. La primera es abrirel documento directamente con Acrobat Reader, vaya al men Archivo yseleccione la opcin Propiedades del documento. La segunda, tambin disponible

  • 8/14/2019 Librera PDF

    8/21

    desde el plug-in, es hacer clic con el botn derecho y seleccione Propiedades deldocumento.

    COLUMNAS MLTIPLES

    Este ejemplo es una variante del anterior en el que se mostrar como disponertexto en varias columnas.

  • 8/14/2019 Librera PDF

    9/21

    }

    function AcceptPageBreak(){

    //Mtodo que acepta o no el salto automtico de pginaif($this->colSetCol($this->col+1);//Establecer la ordenada al principio$this->SetY($this->y0);//Seguir en esta pginareturn false;

    }else{

    //Volver a la primera columna

    $this->SetCol(0);//Salto de pginareturn true;

    }}

    function ChapterTitle($num,$label){

    //Ttulo$this->SetFont('Arial','',12);

    $this->SetFillColor(200,220,255);$this->Cell(0,6,"Captulo $num : $label",0,1,'L',true);$this->Ln(4);

    //Guardar ordenada$this->y0=$this->GetY();

    }

    function ChapterBody($fichier){

    //Abrir fichero de texto

    $f=fopen($fichier,'r');$txt=fread($f,filesize($fichier));fclose($f);

    //Fuente$this->SetFont('Times','',12);

    //Imprimir texto en una columna de 6 cm de ancho$this->MultiCell(60,5,$txt);$this->Ln();

    //Cita en itlica$this->SetFont('','I');

    $this->Cell(0,5,'(fin del extracto)');//Volver a la primera columna$this->SetCol(0);

  • 8/14/2019 Librera PDF

    10/21

    }

    function PrintChapter($num,$title,$file){

    //Aadir captulo$this->AddPage();$this->ChapterTitle($num,$title);$this->ChapterBody($file);

    }}

    $pdf=new PDF();$title='20000 Leguas de Viaje Submarino';$pdf->SetTitle($title);$pdf->SetAuthor('Julio Verne');$pdf->PrintChapter(1,'UN RIZO DE HUIDA','20k_c1.txt');$pdf->PrintChapter(2,'LOS PROS Y LOS CONTRAS','20k_c2.txt');

    $pdf->Output();?>El mtodo clave usado es AcceptPageBreak(). Permite aceptar o no el saltoautomtico de lnea. Evitndolo y alterando la posicin actual y el margen, seconsigue la disposicin deseada en columnas.Por lo dems, poco cambia; se han aadido dos propiedades (atributos) a la clasepara almacenar el nmero de columna y la posicin donde empiezan las columnas,y la llamada a MultiCell() incluye un ancho de 6 centmetros.TablasEste tutorial se explicar como crear tablas fcilmente.

  • 8/14/2019 Librera PDF

    11/21

    foreach($data as $row){

    foreach($row as $col)$this->Cell(40,6,$col,1);

    $this->Ln();}

    }

    //Una tabla ms completafunction ImprovedTable($header,$data){

    //Anchuras de las columnas$w=array(40,35,40,45);

    //Cabecerasfor($i=0;$iCell($w[$i],7,$header[$i],1,0,'C');$this->Ln();

    //Datosforeach($data as $row){

    $this->Cell($w[0],6,$row[0],'LR');$this->Cell($w[1],6,$row[1],'LR');$this->Cell($w[2],6,number_format($row[2]),'LR',0,'R');$this->Cell($w[3],6,number_format($row[3]),'LR',0,'R');$this->Ln();

    }//Lnea de cierre

    $this->Cell(array_sum($w),0,'','T');}

    //Tabla coloreadafunction FancyTable($header,$data){

    //Colores, ancho de lnea y fuente en negrita$this->SetFillColor(255,0,0);$this->SetTextColor(255);$this->SetDrawColor(128,0,0);

    $this->SetLineWidth(.3);$this->SetFont('','B');//Cabecera$w=array(40,35,40,45);for($i=0;$iCell($w[$i],7,$header[$i],1,0,'C',1);$this->Ln();

    //Restauracin de colores y fuentes$this->SetFillColor(224,235,255);$this->SetTextColor(0);

    $this->SetFont('');//Datos$fill=false;

  • 8/14/2019 Librera PDF

    12/21

    foreach($data as $row){

    $this->Cell($w[0],6,$row[0],'LR',0,'L',$fill);$this->Cell($w[1],6,$row[1],'LR',0,'L',$fill);$this->Cell($w[2],6,number_format($row[2]),'LR',0,'R',$fill);$this->Cell($w[3],6,number_format($row[3]),'LR',0,'R',$fill);$this->Ln();$fill=!$fill;

    }$this->Cell(array_sum($w),0,'','T');

    }}

    $pdf=new PDF();//Ttulos de las columnas$header=array('Pas','Capital','Superficie (km2)','Pobl. (en miles)');

    //Carga de datos

    $data=$pdf->LoadData('paises.txt');$pdf->SetFont('Arial','',14);$pdf->AddPage();$pdf->BasicTable($header,$data);$pdf->AddPage();$pdf->ImprovedTable($header,$data);$pdf->AddPage();$pdf->FancyTable($header,$data);$pdf->Output();?>

    Siendo una tabla un conjunto de celdas, lo natural es construirla de ellas. El primerejemplo es el ms bsico posible: celdas con bordes simples, todas del mismotamao y alineadas a la izquierda. El resultado es algo rudimentario, pero es muyrpido de conseguir.

    La segunda tabla tiene algunas mejoras: cada columna tiene su propio ancho, losttulos estn centrados y el texto se alinea a la derecha. Ms an, las lneashorizontales se han eliminado. Esto se consigue mediante el parmetro border delmtodo Cell(), que especifica qu bordes de la celda deben imprimirse. En estecaso, queremos que sean los de la izquierda (L) y los de la derecha (R). Seguimos

    teniendo el problema de la lnea horizontal de fin de tabla. Hay dos posibilidades:o comprobar si estamos en la ltima lnea en el bucle, en cuyo caso usaremos LRBpara el parmtro border; o, como hemos hecho aqu, aadir la lnea una vez queel bucle ha terminado.

    La tercera tabla es similar a la segunda, salvo por el uso de colores. Simplementehemos especificado los colores de relleno, texto y lnea. El coloreado alternativo delas filas se consigue alternando celdas transparentes y coloreadas.

    ENLACES Y TEXTO FLOTANTE

    Este tutorial explica cmo incluir enlaces (internos y externos) y muestra unanueva manera de imprimir texto. Tambin incluye un intrprete rudimentario deHTML.

  • 8/14/2019 Librera PDF

    13/21

    require('fpdf.php');

    class PDF extends FPDF{var $B;var $I;var $U;var $HREF;

    function PDF($orientation='P',$unit='mm',$format='A4'){

    //Llama al constructor de la clase padre$this->FPDF($orientation,$unit,$format);

    //Iniciacin de variables$this->B=0;$this->I=0;$this->U=0;

    $this->HREF='';}

    function WriteHTML($html){

    //Intrprete de HTML$html=str_replace("\n",' ',$html);$a=preg_split('//U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);foreach($a as $i=>$e){

    if($i%2==0){

    //Textif($this->HREF)

    $this->PutLink($this->HREF,$e);else

    $this->Write(5,$e);}else{

    //Etiquetaif($e[0]=='/')$this->CloseTag(strtoupper(substr($e,1)));

    else{

    //Extraer atributos$a2=explode(' ',$e);$tag=strtoupper(array_shift($a2));$attr=array();foreach($a2 as $v)

    { if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))$attr[strtoupper($a3[1])]=$a3[2];

  • 8/14/2019 Librera PDF

    14/21

    }$this->OpenTag($tag,$attr);

    }}

    }}

    function OpenTag($tag,$attr){

    //Etiqueta de aperturaif($tag=='B' || $tag=='I' || $tag=='U')

    $this->SetStyle($tag,true);if($tag=='A')

    $this->HREF=$attr['HREF'];if($tag=='BR')

    $this->Ln(5);}

    function CloseTag($tag){

    //Etiqueta de cierreif($tag=='B' || $tag=='I' || $tag=='U')

    $this->SetStyle($tag,false);if($tag=='A')

    $this->HREF='';}

    function SetStyle($tag,$enable){

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

    if($this->$s>0)$style.=$s;

    }

    $this->SetFont('',$style);}

    function PutLink($URL,$txt){

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

    $this->SetTextColor(0);}}

  • 8/14/2019 Librera PDF

    15/21

    $html='Ahora puede imprimir fcilmente texto mezclando diferentes estilos:negrita, itlica,subrayado, o todos a lavez!

    Tambin puede incluir enlaces en eltexto, como www.fpdf.org, o en una imagen:pulse en el logotipo.';

    $pdf=new PDF();//Primera pgina$pdf->AddPage();$pdf->SetFont('Arial','',20);$pdf->Write(5,'Para saber qu hay de nuevo en este tutorial, pulse ');$pdf->SetFont('','U');$link=$pdf->AddLink();$pdf->Write(5,'aqu',$link);$pdf->SetFont('');

    //Segunda pgina$pdf->AddPage();$pdf->SetLink($link);$pdf->Image('logo.png',10,12,30,0,'','http://www.fpdf.org');$pdf->SetLeftMargin(45);$pdf->SetFontSize(14);$pdf->WriteHTML($html);$pdf->Output();?>

    El nuevo mtodo para imprimir texto es Write(). Se parece mucho a MultiCell();las diferencias son:El lmite de la lnea est en el margen derecho y la siguiente lnea empieza en elizquierdoLa posicin actual se establece al final del textoAs que le permite escribir un texto, alterar el estilo de la fuente, y continuar en elpunto exacto donde lo dej. Sin embargo, no puede justificar el textosimultneamente a derecha y a izquierda.

    Este mtodo se usa en la primera pgina para aadir un enlace que apunta a la

    segunda pgina. El principio de la frase se escribe en un estilo normal, despuscambiamos a subrayado y la terminamos. El enlace se crea con AddLink(), quedevuelve el identificador del enlace. El identificador se pasa como tercer parmetroa Write(). Una vez que la segunda pgina se ha creado, usamos SetLink() parahacer que el enlace apunte al principio de la pgina actual.

    Deespus ponemos una imagen con un enlace en ella. Un enlace externo apunta auna URL (HTTP, mailto...). La URL se pasa como el ltimo parmetro de Image().

    Finalmente, el margen izquierdo se modifica despus de la imagen con

    SetLeftMargin() y se escribe texto en formato HTML. Se utiliza un intrprete HTMLpara esto, basado en les expresiones regulares. Las etiquetas reconocidas son, , , y
    ; las dems se ignoran. El intrprete tambin usa el

  • 8/14/2019 Librera PDF

    16/21

    mtodo Write(). Se pone un enlace externo de la misma manera que uno interno(como tercer parmetro de Write()). Observe que Cell() tambin permite incluirenlaces.Aadiendo nuevas fuentes y codificacionesEste tutorial explica cmo usar fuentes TrueType o Type1 de forma que usted nose vea limitado a las fuentes incorporadas en FPDF. El otro punto de inters es quepueda elegir la codificacin de la fuente, lo que le permitir usar otros idiomasaparte de los europeos occidentales (ya que las fuentes estndar tienen muypocos caracteres disponibles).

    Existen dos formas de usar una nueva fuente: incluirla en el PDF o no. Cuando unafuente no se incluye, se busca en el sistema. La ventaja es que el fichero PDF esms pequeo; sin embargo, si la fuente no est disponible en el sistema, se usaotra como sustituta. As que es aconsejable asegurarse de que la fuente encuestin est instalada en los sistemas de los clientes. Si el fichero est destinadoa una audiencia numerosas, es mejor incluir la fuente.

    Aadir una nueva fuente requiere tres pasos para las TrueType:Generacin del fichero de medidas (.afm)Generacin del fichero de definicin de la fuente (.php)Declaracin de la fuente en el scriptPara las fuentes Type1, el primer paso, tericamente, no es necesario porquesuelen venir acompaadas de un fichero AFM. En el caso de que usted slo tengaun fichero de medidas en formato PFM, use el conversor disponible aqu.Generacin del fichero de medidasEl primer paso para una TrueType consiste en generar el fichero AFM. Existe unaaplicacin para hacer esto: ttf2pt1. El ejecutable para Windows est disponible

    aqu. La instruccin para usarlo desde la lnea de comandos es:

    ttf2pt1 -a font.ttf font

    Por ejemplo, para la Comic Sans MS Regular:

    ttf2pt1 -a c:\windows\fonts\comic.ttf comic

    Se crearn dos ficheros; el archivo en el que estamos interesados en el comic.afm.Generacin del fichero de definicin de la fuente

    El segundo paso consiste en generar un fichero PHP que contenga toda lainformacin que necesita FPDF; adems, el fichero de la fuente debercomprimirse. Para hacer esto, se distribuye un script auxiliar en el directoriofont/makefont del paquete: makefont.php. Contiene la siguiente funcin:

    MakeFont(string fontfile, string afmfile [, string enc [, array patch [, string type]]])fontfile

    Ubicacin del fichero .ttf o .pfb.afmfile

    Ubicacin del fichero .afm.enc

  • 8/14/2019 Librera PDF

    17/21

    Nombre de la codificacin. Valor por defecto: cp1252.patch

    Modificacin opcionar de la codificacin. Vaco por defecto.type

    Tipo de la fuente (TrueType o Type1). Valor por defecto: TrueType.El primer parmetro es el nombre del fichero de la fuente. La extensin debe ser.ttf o .pfb y determina el tipo de fuente. Si tiene una fuente Type1 en formatoASCII (.pfa), puede convertirla a formato binario con t1utils.Si no quiere incluir la fuente en el documento, pase una cadena vaca. En estecaso, el tipo se determina mediante el parmetro type.Nota: en caso de que una fuente tenga el mismo nombre que una estndar, porejemplo arial.ttf, es obligatorio incluirla. Si no lo hace, Acrobat usar su propiafuente (la estndar).

    El fichero AFM es el que generamos anteriormente.

    La codificacin define la asociacin entre un cdigo (de 0 a 255) y un carcter. Losprimeros 123 son fijos y se corresponden con los caracteres ASCII; los siguientesson variables. Las codificaciones se almacenan en ficheros .map. Estndisponibles:cp1250 (Europa Central)cp1251 (cirlico)cp1252 (Europa Occidental)cp1253 (griego)

    cp1254 (turco)cp1255 (hebreo)cp1257 (bltico)cp1258 (vietnamita)cp874 (tailands)ISO-8859-1 (Europa Occidental)ISO-8859-2 (Europa Central)ISO-8859-4 (bltico)ISO-8859-5 (cirlico)ISO-8859-7 (griego)

    ISO-8859-9 (turco)ISO-8859-11 (tailands)ISO-8859-15 (Europa Occidental)ISO-8859-16 (Europa Central)KOI8-R (ruso)KOI8-U (ucraniano)Por supuesto, la fuente debe contener los caracteres aduecuados a la codificacinescogida.En el caso especial de una fuente de smbolos (esto es, que no contiene letras,como las fuentes Symbol o ZapfDingbats), pase una cadena vaca.

    Las codificaciones que empiezan con cp son usadas por Windows; los sistemasLinux usan por lo general codificaciones ISO.Nota: las fuentes estndar usan cp1252.

  • 8/14/2019 Librera PDF

    18/21

    El cuarto parmetro le da la posibilidad de alterar la codificacin. A veces puedeque quiera aadir caracteres. Por ejemplo, ISO-8859-1 no contiene el smbolopara el euro. Para aadirlo en la posicin 164, pase array(164=>'Euro').

    El ltimo parmetro se usa para definir el tipo de la fuenta en caso de que no sevaya a incluir (esto es, si el primer parmetro est vaco).

    Despus de llamar a la funcin (puede crear un nuevo fichero e incluirmakefont.php o simplemente aadir la llamada en el propio makefont.php), secrear un fichero .php con el mismo nombre que el .afm. Puede renombrarlo si lodesea. En caso de incluir la fuente, el fichero se comprime y da lugar a un segundofichero con extensin .z (excepto si la funcin de compresin no est disponible,puesto que requiere la biblioteca zlib para PHP). Tambin puede renombrarlo,pero, en este caso, tendr que modificar la variable $file en el fichero .phpconsecuentemente.

    Ejemplo: MakeFont('c:\\windows\\fonts\\comic.ttf','comic.afm','cp1252');

    que devuelve los ficheros comic.php y comic.z.

    Entonces tendr que copiar los ficheros generados en el directorio de fuentes. Si elfichero de la fuente no pudo ser comprimido, copie el .ttf o .pbf en lugar del .z.Declaracin de la fuente en el scriptEl ltimo paso es el ms simple. Slo necesita llamar al mtodo AddFont(). Porejemplo: $pdf->AddFont('Comic','','comic.php');

    o, simplemente, $pdf->AddFont('Comic');

    Y la fuente queda disponible (en los estilos normal y subrayado), lista para usarcomo las otras. Si hubiramos trabajado con la Comic Sans MS Bold (comicbd.ttf),hubisemos escrito: $pdf->AddFont('Comic','B','comicbd.php');

    EjemploVeamos ahora un pequeo ejemplo completo. La fuente usada es Calligrapher,disponible en www.abstractfonts.com (un sitio que ofrece un buen nmero defuentes TrueType gratuitas). El primer paso es generar el AFM:

    ttf2pt1 -a calligra.ttf calligra

    que nos devuelve calligra.afm (y calligra.t1a, que podemos borrar). Generamosentonces la definicin:

    La funcin nos devolver el siguiente informe:Warning: character Euro is missing

  • 8/14/2019 Librera PDF

    19/21

    Warning: character Zcaron is missingWarning: character zcaron is missingWarning: character eth is missingFont file compressed (calligra.z)Font definition file generated (calligra.php)

    El carcter del euro no est en la fuente (es muy antigua). Tambin faltan otrostres caracteres, pero no estamos interesados en ellos, as que da igual.Podemos copiar estos dos ficheros en el directorio de fuentes y escribir el script:

    Acerca del smbolo del euroEl carcter del euro no aparece en todas las codificaciones, y no siempre est en lamisma posicin: Codificacin Posicincp1250 128cp1251 136cp1252 128cp1253 128

    cp1254 128cp1255 128cp1257 128cp1258 128cp874 128ISO-8859-1 ausenteISO-8859-2 ausenteISO-8859-4 ausenteISO-8859-5 ausenteISO-8859-7 ausente

    ISO-8859-9 ausenteISO-8859-11 ausenteISO-8859-15 164ISO-8859-16 164KOI8-R ausenteKOI8-U ausente

    La codificacin ISO-8859-1 est muy extendida, pero no incluye el smbolo deleuro. Si lo necesita, la solucin ms simple consiste en usar cp1252 o ISO-8859-15, que son prcticamente iguales pero contienen el preciado smbolo.

    Para la ISO-8859-2, es posible sustituirla por la ISO-8859-16, pero contienemuchas diferencias. Por tanto, es ms sencillo apaar la codificacin para aadir elsmbolo, tal como se explica arriba. Lo mismo se aplica a las dems codificaciones.

  • 8/14/2019 Librera PDF

    20/21

    Sntesis de fuentes bajo WindowsCuando una fuente TrueType no est disponible en un estilo determinado,Windows es capaz de sintetizarla a partir de la versin normal. Por ejemplo, nohay Comic Sans MS en cursiva, pero puede ser construida a partir de la ComicSans MS regular (normal). Esta caracterstica puede ser empleada en un ficheroPDF pero, desgraciadamente, requiere que la fuente normal est instalada en elsistema (no debe incluirla en el documento). As es como se hace:Generar el fichero de definicin para la fuente normal sin incluirla en el documento(puede renombrarla para reflejar el estilo deseado)Abrirlo y aadir a la variable $name una coma (,) seguida del estilo deseado(Italic, Bold o BoldItalic)Por ejemplo, para el fichero comici.php:

    $name='ComicSansMS,Italic';

    A partir de entonces, podr usarse normalmente: $pdf->AddFont('Comic','I','comici.php');

    Reduciendo el tamao de las fuentes TrueTypeLos ficheros de fuentes son con frecuencia bastante voluminosos (ms de 100,incluso 200 KB); esto se debe a que contienen los caracteres correspondientes amuchas codificaciones. La compresin zlib los reduce, pero continan siendobastante grandes. Existe una tcnica para reducirlos an ms. Consiste enconvertir la fuente a formato Type1 con ttf2pt1 especificando la codificacin que leinteresa; todos los dems caracteres sern omitidos.Por ejemplo, la fuente arial.ttf que viene con Windows 98 tiene un tamao de 267KB (contiene 1296 caracteres). Despus de comprimirla, pesa 147 KB.

    Convirtmosla a Type1 manteniendo slo los caracteres cp1250:

    ttf2pt1 -b -L cp1250.map c:\windows\fonts\arial.ttf arial

    Los ficheros .map estn en el directorio font/makefont/ del paquete. El procesodevuelve arial.pfn y arial.afm. El fichero arial.pfb ocupa slo 35 KB, 30 KB despusde comprimirlo.

    Es incluso posible ir ms all. Si slo est usted interesado en un subconjunto dela codificacin (es probable que no necesite los 217 caracteres), puede abrir el

    fichero .map y quitar las lneas que no le interesen. Consecuentemente, el tamaodel fichero disminuir.

    FPDF 1.6 Manual de ReferenciaAcceptPageBreak - acepta o no un salto de pgina automtico

  • 8/14/2019 Librera PDF

    21/21

    AddFont - aade una nueva fuenteAddLink - crea una referencia internaAddPage - aade una nueva pginaAliasNbPages - define un alias para el nmero de pginasCell - imprime un celdaClose - termina el documentoError - error fatalFooter - pie de pginaFPDF - constructorGetStringWidth - calcula la longitud de la cadenaGetX - obtiene la posicin actual de xGetY - obtiene la posicin actual de yHeader - cabecera de pginaImage - imprime una imagenLine - dibuja un lneaLink - pone una referenciaLn - salto de lnea

    MultiCell - imprime texto con saltos de lneaOutput - guarda o enva el documentoPageNo - nmero de pginaRect - dibuja un rectanguloSetAuthor - establece el autor del documentoSetAutoPageBreak - establece el modo de salto de pagina automticoSetCompression - cambia la compresin en activo o inactivoSetCreator - establece el creador del documentoSetDisplayMode - establece el modo de presentacinSetDrawColor - establece el color de graficacin

    SetFillColor - establece el color de rellenoSetFont - establece la fuenteSetFontSize - establece el tamao de la fuenteSetKeywords - asocia las palabras claves con el documentoSetLeftMargin - establece el mrgen izquierdoSetLineWidth - establece el ancho de la lneaSetLink - establece el enlace de destinoSetMargins - establece los mrgenesSetRightMargin - establece el mrgen derechoSetSubject - establece el tema del documento

    SetTextColor - establece el color del textoSetTitle - establece el ttulo del documentoSetTopMargin - Establece el mrgen superiorSetX - establece la posicin actual de xSetXY - establece la posicin actual de x y ySetY - establece la posicin actual de yText - imprime una cadenaWrite - imprime el siguiente texto[traduccin de Hector Franco]