Sunteți pe pagina 1din 3

Celdas múltiples, encabezados y pies de página

Celdas con
Encabezados, pies de página y saltos automáticos
saltos de línea
<?
# include y define idénticos a los anteriores
La función Cell, estudiada en la
página anterior, no interpreta los include("fpdf.php");
saltos de línea y, en el caso de que define('FPDF_FONTPATH','c:/Apache/htdocs/cursoPHP/fontsPDF/');
la cadena de texto sea más larga # creamos una clase extendida de la clase FPDF
que el ancho de la celda, escribirá class GranPDF extends FPDF {
fuera de sus márgenes. # incluimos la funcion Header (debe ser definida con este nombre)
# que se ejecuta cada vez que se añade una página, sea en forma
La clase FPDF dispone de la # manual o en forma automática.
función: # Nos permite insertar los encabezados de todas las páginas del
$obj->MuliCell(a,h,text,b,aln,r) # documento
function Header(){
donde a es el ancho de la celda (si #insertamos un salto de línea de 2 mm. a partir
se indica cero ocupará hasta el #del margen superior
margen derecho de la página), h $this->Ln(2);
es el alto de cada una de las # establecmos color y estilo de letra del encabezado
celdas aunque, en la práctica, se $this->SetTextColor(0,0,0);
comporta de forma idéntica al
$this->SetFont("Times","I", 11);
interlineado de un procesador de
textos), text es la cadena de texto
# establecemos una celda cuyo ancho es cero
(o variable que lo contiene) a # de esta forma se extenderá hasta el margen derecho
insertar. # ocupando toda la caja de texto de la página.
# le ponemos unicamente brode inferior, texto centrado
b es un parámetro que puede # sin relleno y le adjudicamos como parámetro de posición
valer: 0 (sin bordes); 1 (con # de la celda siguiente 1 de forma que comience en el margen
bordes), y también: L (borde por # izquierdo de una línea nueva
el lateral izquierdo de la celda); T $this->Cell(0,8,"La Regenta",'B',1,'C',0);
(borde por la parte superior), R
# colocamos un salto de línes de 3 milimetros para separar el
(línea de borde en el margen
# encabezado de los textos de la página
derecho), B (línea de borde en la
parte inferior) ó agrupaciones de $this->Ln(3);
estos últimos valores, en cualquier }
orden, tales como: LR ó TB, # incluimos la funcion Footer (debe ser definida con este nombre)
etcétera. # para insertar pies de página cada vez que cree una página nueva
function Footer(){
El parámetro aln indica la $this->Ln(2);
alineación horizontal que han de $this->SetTextColor(0,0,0);
tener los textos y permite los
$this->SetFont("Arial","I", 9);
valores: L (izquierda); C (centro);
# en este caso incluimos el número de página con un borde superior
R (derecha) ó J (justificado).
# de la celda, texto centrado y tambien activando la celda
Por último, el parámetro r siguiente
(relleno) especifica si a las celdas # de modo que se produzca un saldo de línea
se les aplicará (valor 1) un color $this->Cell(0,5,"Página ".$this->PageNo(),'T',1,'C',0);
de fondo o si se va a tratar (valor }
0) de un fondo transparente. }
# acabada la inserción de la clase extendida continuamos con el código
El comportamiento de esta función
tiene las siguientes
# establecemos las dimensiones del documento
particularidades: $dimensiones=array (140,200);
# creamos un nuevo objeto pero ¡cuidado! utilizaremos
• Inserta los saltos de línea # la clase extendida GranPDF
contenidos en el fichero origen y $MiPDF=new GranPDF('P','mm',$dimensiones);
los incluidos en la cadena de texto # ajustamos al 100% la visualización
mediante la secuencia de escape $MiPDF->SetDisplayMode('fullpage');
\n. # añadimos la primera página del documento. La ejecución de esta función
• Inserta saltos de línea # disparará la ejecución de las funciones Header() y Footer() de la
automáticos en el momento en # clase extendida y, por tanto, incluirá en el documento los encabezados
que el texto alcanza el borde # y pies de página allí establecidos
derecho de la celda. $MiPDF->Addpage();
# cambiamos el estilo de fuente a "normal"
• Si AutoPageBreak está activado $MiPDF->SetFont('Times','',12);
inserta saltos de página # leemos un fichero de texto y lo recogemos en una variables
automáticos en el momento en
$f1=fopen('regenta.txt','r');
que el texto alcanza el margen
$regenta1=fread($f1,filesize('regenta.txt'));
inferior de la página.
fclose($f1);
# insertamos el fichero mediante Multicell
Encabezados # el ancho 0 establece que la celda ocupará desde el margen
y pies de página # izquierdo hasta el derecho. La interlinea será de 4mm.
# el texto que se incluirá (con salto de línea automático
La clase FPDF contiene dos # e inserción automática de nuevas páginas) será el recogido
métodos (funciones) llamados: # del fichero de texto. La celda no tendrá bordes
Header() y Footer(). # el texto estará justificado y no tendrá relleno de fondo.
$MiPDF->Multicell(0,4,$regenta1,0,'J',0);
Si editamos el fichero fpdf.php # establecemos la visualización del documento
podemos ver que ambas están
$MiPDF->Output();?>
vacías (no contienen ninguna
instrucción) presentando una
sintaxis como esta: Ejemplo141.php
function Header(){
// comentario
} El ejemplo siguiente es una adaptación del ejemplo139 al uso de encabezados y pies de
y página.
function Footer(){ Ver código fuente ejemplo142.php
// comentario
}
Ambas son invocadas de forma
automática cada vez que se
<?
ejecuta la función AddPage() y,
# incluimos la clase fpdf.php y la constante FPDF_FONTPATH
eso permite crear otras funciones
include("fpdf.php");
a medida, con igual nombre, e
define('FPDF_FONTPATH','c:/Apache/htdocs/cursoPHP/fontsPDF/');
incluirlas en una clase extendida.
# creamos la clase GranPDF extendida de fpdf.php
Recuerda que los métodos de la class GranPDF extends FPDF {
clase extendida prevalecen sobre # definimos dos nuevas variables internas
los que pudieran existir en la clase # el identificador de la columna actual
padre con su mismo nombre. Por # y el valor de la ordenada de inicio de las columnas
esta razón, las nuevas funciones var $columna_actual=0;
de la clase extendida nos var $ordenada_inicio=21;
permitirían incluir encabezados y
# la función Header se comporta de forma idéntica al ejemplo anterior
pies de página en cada una de las
function Header(){
nuevas páginas añadidas mediante
AddPage(). $this->SetTextColor(0,0,0);
$this->SetFont("Times","I", 11);
El procedimiento sería este: $this->Cell(0,8,"La Regenta",'B',1,'C',0);
$this->Ln(3);
• Creamos una clase extendida de }
la clase original FPDF. # Footer es similar al caso anterior con la única diferencia que
• Incluimos en esta nueva clase function Footer(){
funciones con nombres Header() $this->SetY(-20);
y Footer() (no podemos modificar $this->Ln(2);
el nombre ya que han de coincidir $this->SetTextColor(0,0,0);
con los nombres de las funciones $this->SetFont("Arial","I", 9);
vacias de la clase padre) en las $this->Cell(0,5,"Página ".$this->PageNo(),'T',1,'C',0);
que indicamos los contenidos que }
han de insertarse (y su posición) function AcceptPageBreak(){
mediante cada una de ellas. • Al # al alcanzar el margen inferior se activa esta función
crear el nuevo objeto mediante:
# que comprueba si el punto de inserción está en la columna
$obj= new nombre_clase() # primera (0) ó en la segunda
if($this->$columna_actual==0){
utilizaremos el nombre el de la # cambia el valor del número de columna a 1 (pasa a la segunda)
clase extendida que hemos $this->$columna_actual=1;
creado para incluir estas funciones. # cambia el punto de inserción a la coordenada de inicio
# que es la parte superior de la página
De esta forma, cada vez que se
ejecuta AddPage() (añadir una $this->SetY($this->ordenada_inicio);
nueva página) se ejecutarán # cambia el margen izquierdo de modo que el texto
también Header() y Footer() que, # aparezca en la columna derecha (a partir de los 72.5 mm).
al no ser ya funciones vacías, # más abajo está comentada la razon de estos valores
realizarán una inclusión de $this->SetLeftMargin(72.5);
contenidos en cada una de las # cambia el punto de insercion al nuevo margen izquierdo
páginas del documento. $this->SetX(72.5);
# establecemos que la función devuelva false
Gestión de la inserción # con ello no se produce un salto de página
automática de páginas # y el punto de inserción se translada a las
# coordenadas indicadas en las instrucciones anteriores
return false;
La clase FPDF contiene esta
}else{
función:
# si la columna es la segunda (no es la cero)
function AcceptPageBreak(){ # cambia a la primera, asigna el valor cero
// comentario $this->$columna_actual=0;
return $this->AutoPageBreak; # cambia el punto de inserción a la coordenada de inicio
} # que es la parte superior de la página
$this->SetY($this->ordenada_inicio);
que igual que ocurría con Header()
# cambia el margen izquierdo de modo que el texto
y Footer() es invocada en el
# aparezca en la columna izquierda (a partir de los 10 mm).
momento en que encuentra un
salto de página y dependiendo del $this->SetLeftMargin(10);
valor que devuelva (true ó false) # cambia el punto de insercion al nuevo margen izquierdo
se ejecuta ó no la funcion AddPage $this->SetX(10);
(). # establecemos que la función devuelva true
# con ello genera un salto de página
Tal como está diseñada esta clase # y la insercion de texto continua en la pagina siguiente
devolverá el valor que tenga return true;
asignado AutoPageBreak() (true ó }
false) pero, igual que ocurría con
}
Header() y Footer() permite incluir
otra función con el mismo nombre }
en una clase extendida. La /* establecemos el tamaño de la página
condición de la nueva función es que tendrá 140 mm. de ancho.
que, al igual que ocurre con esta, Si establecemos un margen por la izquierda de 10 mm.
habrá de devolver un valor un margen por la derecha de otros 10 mm.
booleano (cierto ó falso). y un espacio entre columnas de 5 mm. nos restan
140-25=115 mm. que repartidos entre dos columnas
Esta posibilidad añade nuevas e les darían un ancho de 115/2=57,5 mm.
interesantes funcionalidades al uso
Las primera columna comenzará en 10 y acabará en
de la clase FPDF. Una de las
posibilidades podría ser la de crear
10 +57,5=67.5 mm. La segunda deberá empezar en
documentos con varias columnas 72.5 (añadiendo 5 mm. de espacio entre columnas */
(estilo periodístico). La forma de $dimensiones=array (140,200);
proceder (una de las posibles) la # creamos el nuevo objeto partiendo de la clase ampliada
tienes descrita en el ejemplo que $MiPDF=new GranPDF('P','mm',$dimensiones);
hemos incluido a la derecha. # ajustamos al 100% la visualización
$MiPDF->SetDisplayMode('fullpage');
Otras opciones # insertamos la primera página del documento
$MiPDF->Addpage();
# cambiamos el estilo de fuente a "normal"
Además de las funciones que
$MiPDF->SetFont('Times','',12);
hemos descrito a lo largo de esta
# establecemos un color de fondo para las celdas de texto
página, existen clases extendidas
que incluyen nuevas, y en algunos # y el color de la tipografia
casos muy interesantes, funciones $MiPDF->SetFillColor(240,240,240);
que resuelven problemas $MiPDF->SetTextColor(0,0,0);
específicos concretos a la hora de # leemos un fichero de texto y lo recogemos en una variables
crear ficheros PDF. Algunas de $f1=fopen('regenta.txt','r');
ellas están disponibles desde el $regenta1=fread($f1,filesize('regenta.txt'));
propio sitio FPDF de Olivier
fclose($f1);
PLATHEY. # insertamos el fichero mediante Multicell
Una de las utilidades más # el ancho 57.5 estable el ancho de columna igual
interesantes -desde luego que ni # para la derecha que para la izquierda La interlinea será de 4mm.
mucho menos únicas- de este tipo # el texto que se incluirá (con salto de línea automático
de formatos podría ser la # e inserción automática de nuevas páginas cuando se hayan completado
paginación de los resultados de las # las dos columnas) será el recogido
consultas en bases de datos. # del fichero de texto. La celda no tendrá bordes
# el texto estará justificado y SI tendrá relleno de fondo.
Cuando nos encontremos en esa $MiPDF->Multicell(57.5,4,$regenta1,0,'J',1);
situación podremos utilizar un
# establecemos la visualización del documento
procedimiento casi idéntico al
usado en el ejemplo sobre las $MiPDF->Output();?>
tablas de alimentos.

No importaría el tamaño del


fichero de texto (número de
Ejemplo143.php
páginas que pudiera ocupar) ni el
número de registros obtenidos
como resultado de una consulta a Ejercicio nº 37
una base de datos. Sería la propia
clase FPDF quien se encargaría de Crea un documento PDF en formato A-5 con orientación vertical. Debe incluir un encabezado
crear las páginas necesarias de un
(a modo de logotipo) compuesto por un dibujo creado mediante la funciones PDF. Además,
documento con un formato
preestablecido. habrá de incluir un texto enmarcado y una fotografía centrada en el documento.

Anterior Indice Siguiente

S-ar putea să vă placă și