Foros del Web » Programando para Internet » PHP »

Pie de pagina PDF

Estas en el tema de Pie de pagina PDF en el foro de PHP en Foros del Web. Hola a todos, en esta ocasion tengo el siguiente problema, el cual espero me puedan ayudar a resolver. Uso la clase FPDF para crear PDF ...
  #1 (permalink)  
Antiguo 19/06/2010, 13:36
 
Fecha de Ingreso: septiembre-2008
Mensajes: 152
Antigüedad: 15 años, 6 meses
Puntos: 1
Pie de pagina PDF

Hola a todos, en esta ocasion tengo el siguiente problema, el cual espero me puedan ayudar a resolver.

Uso la clase FPDF para crear PDF como lo dice su nombre, he creado mi PDF casi a la perfeccion digo casi por que tengo el siguiente problema, en mi script creo el headder y el footer y funciona muy bien ya que me replica la cabecera y el pie de pagina en todas las pagina que genera el PDF pero el problema que tengo es que necesito que en la ultima pagina del PDF cambie el pie de pagina. El pie de pagina de mi documento unicamente contiene la numeracion de la pagina como pueden ver a continuacion:

Código PHP:
<?
function Footer()
{
    
$this->conta++;
    
//Posición: a 1,5 cm del final
   
$this->SetY(-15);
    
//Arial italic 8
    
$this->SetFont('Arial','I',8);
    
//Número de página
    
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');

}
// Aqui sigue mas codigo... que no tiene que ver con el pie de pagina
?>
Como les comentaba yo necesito que el ultima pagina aparte de el numero de pagina me muestre 3 celdas con datos como nombres, he intentado insertar un if dentro del footer es decir que compare el numero de pag actual y el numero total de pagina pero no funciona, no marca ningun error pero no hace nada, tambien he intentado ubicar las celdas que necesito por medio de coordenadas es decir usando la funcion

Código PHP:
<?
$pdf
->SetY(-15);
?>
Pero en lugar de ponerlo en esa coordenada me hace una nueva pagina y si sigo aumentando dicha coordenada lo que hace es subirmelo demasiado ya que como que respeta cierto ancho del footer.

Espero me puedan ayudar y de antemano muchas gracias a todos
  #2 (permalink)  
Antiguo 19/06/2010, 16:45
Avatar de CdG
CdG
 
Fecha de Ingreso: marzo-2008
Mensajes: 114
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Pie de pagina PDF

Cita:
he intentado insertar un if dentro del footer es decir que compare el numero de pag actual y el numero total de pagina pero no funciona
Una pregunta, como obtienes el número total de páginas?
__________________
no quiero ser un árbol y caminar
Jacinto Piedra
  #3 (permalink)  
Antiguo 19/06/2010, 18:50
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Pie de pagina PDF

Copio y pego del tutorial de fpdf:


Cabecera, pie, salto de página e imagen
Código PHP:

<?php
require('fpdf.php');

class 
PDF extends FPDF
{
//Cabecera de página
function Header()
{
    
//Logo
    
$this->Image('logo_pb.png',10,8,33);
    
//Arial bold 15
    
$this->SetFont('Arial','B',15);
    
//Movernos a la derecha
    
$this->Cell(80);
    
//Título
    
$this->Cell(30,10,'Title',1,0,'C');
    
//Salto de línea
    
$this->Ln(20);
}

//Pie de página
function Footer()
{
    
//Posición: a 1,5 cm del final
    
$this->SetY(-15);
    
//Arial italic 8
    
$this->SetFont('Arial','I',8);
    
//Número de página
    
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}

//Creación del objeto de la clase heredada
$pdf=new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','',12);
for(
$i=1;$i<=40;$i++)
    
$pdf->Cell(0,10,'Imprimiendo línea número '.$i,0,1);
$pdf->Output();
?>
  #4 (permalink)  
Antiguo 21/06/2010, 09:18
 
Fecha de Ingreso: septiembre-2008
Mensajes: 152
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Pie de pagina PDF

El numero total de paginas lo saco saco asi

Código PHP:
<?
$total
='{nb}'
?>
Y yo mi codigo lo saque del tuto de FPDF pero en el ejemplo que viene en el tuto FPDF es para que el footer aparesac en todas las paginas y como mencione yo necesito que solo aparesca en la ultima
  #5 (permalink)  
Antiguo 21/06/2010, 09:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pie de pagina PDF

Cita:
Iniciado por kalvera85 Ver Mensaje
El numero total de paginas lo saco saco asi

Código PHP:
<?
$total
='{nb}'
?>
Y yo mi codigo lo saque del tuto de FPDF pero en el ejemplo que viene en el tuto FPDF es para que el footer aparesac en todas las paginas y como mencione yo necesito que solo aparesca en la ultima
puedo observar dentro del método Footer() que se obtiene el numero de pagina con PageNo(), entonces...

¿porque no comparas dicho valor con el total de paginas??
Código PHP:
if ($pagina_actual $total_paginas// NO muestro el footer
else // SI lo muestro!!! 
Edito: veo que fue lo primero que has hecho... ¿que te dice el manual al respecto??

no creo que una simple comparación tienda a fallar, ¿si depuraste los valores antes de comparar o lo hiciste sin saber??
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 21/06/2010, 10:21
 
Fecha de Ingreso: septiembre-2008
Mensajes: 152
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Pie de pagina PDF

Yo tampoco me explico xq no funciona inclusive converti los valores que obtengo del PageNo() y del {nb} a integer para hacer digamos una comparacion numerica pero no funciona, inclusive detecte que cuando convierto los valors se quedan en un solo valos es decir PageNo() se queda en 1 y {nb} en 0. En el manual no he encontrado nada al respecto. espero me puedan ayudar

Se me hace muy raro que no funcione bien el if dentro de la funcion footer
  #7 (permalink)  
Antiguo 21/06/2010, 20:33
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Pie de pagina PDF

No te sirvio el que te di, bueno toma este... Es uno que ya tenia hecho, con un pie de pagina al final, solo que tube que simplificarlo.

Lee los comentarios, fijate que es lo que hace que algo se vea solo al final.

Código PHP:

require('fpdf.php');


class 
PDF extends FPDF
{

//footer de cada pagina (numero de parina)
function Footer()
{
    
    
//...sabemos que habra 2 paginas
    
if($this->PageNo() != "2"){
    
    
//Posición a 1,5 cm del final
    
$this->SetY(20);
    
//Arial itálica 8
    
$this->SetFont('Arial','I',8);
    
//Color del texto en gris
    
$this->SetTextColor(128);
        
//Número de página
    
$this->Cell(0,10,'Página '.$this->PageNo(),0,0,'R');
    
    }else{
    
    
////////////////////////////////////////////
    ////     pie de pagina                 /////

    //POSICION DEL FINAL
    
$this->SetY(-80);
    
//Arial itálica 8
    
$this->SetFont('Arial','I',18);
    
//Color del texto en rojo
    
$this->SetTextColor(255,000,000);
    
//Número de página
    
$this->Cell(0,10,'FINAL',0,0,'C');

    
////     pie de pagina                 /////
    ////////////////////////////////////////////    

    
    
}
}



function 
ChapterTitle($num,$label)
{
    
//Arial 12
    
$this->SetFont('Arial','',24);
    
//Color de fondo
    
$this->SetFillColor(200,220,255);
    
//Título
    
$this->Cell(0,26,"$label",0,1,'C',true);
    
//Salto de línea
    
$this->Ln(10);
}



function 
ChapterAutor($num,$label)
{
    
//Arial 12
    
$this->SetFont('Arial','',14);
    
//Color de fondo
    
$this->SetFillColor(245,245,245);
    
//Autor
    
$this->Cell(0,6,"$label",0,1,'C',true);
    
//Salto de línea
    
$this->Ln(10);
}



function 
ChapterBody($file)
{
    
//Leemos el fichero
    
$f=fopen($file,'r');
    
$txt=fread($f,filesize($file));
    
fclose($f);
    
//Letra del contenido principal
    
$this->SetFont('helvetica','',16);
     
     
//Imprimimos el texto justificado
    //el segundo paramero es el salto de linea
    
$this->MultiCell(0,8,$txt);
    
    
//Salto de línea
    
$this->Ln();
    
//Cita en itálica
    
$this->SetFont('','I');
    
//$this->Cell(0,5,'(fin del extracto)');
    
}

function 
PrintChapter($num,$title,$file)
{
    
$this->AddPage();
    
//titulo
    //$this->ChapterTitle($num,$label);
    //autor
    //$this->ChapterAutor($num,"Autor: Nombre del autor.");
    
$this->ChapterBody($file);
}
}

$pdf=new PDF();
$pdf->PrintChapter(1,'','paises.txt');
$pdf->Output('',''); 

ese codigo esta hacho para leer una archivo llamado paises.txt con este contenido:

Austria;Vienna;83859;8075
Belgium;Brussels;30518;10192
Denmark;Copenhagen;43094;5295
Finland;Helsinki;304529;5147
France;Paris;543965;58728
Germany;Berlin;357022;82057
Greece;Athens;131625;10511
Ireland;Dublin;70723;3694
Italy;Roma;301316;57563
Luxembourg;Luxembourg;2586;424
Netherlands;Amsterdam;41526;15654
Portugal;Lisbon;91906;9957
Spain;Madrid;504790;39348
Sweden;Stockholm;410934;8839
United Kingdom;London;243820;58862
Austria;Vienna;83859;8075
Belgium;Brussels;30518;10192
Denmark;Copenhagen;43094;5295
Finland;Helsinki;304529;5147
France;Paris;543965;58728
Germany;Berlin;357022;82057
Greece;Athens;131625;10511
Ireland;Dublin;70723;3694
Italy;Roma;301316;57563
Luxembourg;Luxembourg;2586;424
Netherlands;Amsterdam;41526;15654
Portugal;Lisbon;91906;9957
Spain;Madrid;504790;39348
Sweden;Stockholm;410934;8839
United Kingdom;London;243820;58862
Austria;Vienna;83859;8075
Belgium;Brussels;30518;10192
Denmark;Copenhagen;43094;5295
Finland;Helsinki;304529;5147
France;Paris;543965;58728
Germany;Berlin;357022;82057
Greece;Athens;131625;10511
Ireland;Dublin;70723;3694
Italy;Roma;301316;57563
Luxembourg;Luxembourg;2586;424
Netherlands;Amsterdam;41526;15654
Portugal;Lisbon;91906;9957
Spain;Madrid;504790;39348
Sweden;Stockholm;410934;8839
United Kingdom;London;243820;58862
  #8 (permalink)  
Antiguo 21/06/2010, 22:14
Avatar de CdG
CdG
 
Fecha de Ingreso: marzo-2008
Mensajes: 114
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Pie de pagina PDF

por lo que entiendo fpdf usa {nb} como alias, y este toma el valor al terminar de generar el documento. Quizá sea por esto que falla la condición.
El ejemplo de wiwi funcionaría porque supone que habrá dos páginas
__________________
no quiero ser un árbol y caminar
Jacinto Piedra
  #9 (permalink)  
Antiguo 22/06/2010, 08:46
Avatar de wiwi74  
Fecha de Ingreso: marzo-2008
Mensajes: 515
Antigüedad: 16 años, 1 mes
Puntos: 10
Respuesta: Pie de pagina PDF

No en realidad eso cuenta el numero de paginas del pdf, lo cual se puede usar en un condicional:
Y el siguiente codigo no lee un archivo externo.

Código PHP:

require('../fpdf.php');

class 
PDF extends FPDF
{
//Cabecera de página
function Header()
{
    
//Logo
    //$this->Image('logo_pb.png',10,8,33);
    //Arial bold 15
    
$this->SetFont('Arial','B',15);
    
//Movernos a la derecha
    
$this->Cell(80);
    
//Título
    
$this->Cell(30,10,'Title',1,0,'C');
    
//Salto de línea
    
$this->Ln(20);
}

//Pie de página
function Footer()
{

    
//Posición: a 1,5 cm del final
    
$this->SetY(-15);
    
//Arial italic 8
    
$this->SetFont('Arial','I',8);
    
//Número de página
    
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
    
    
             
//esto se insertara solo en la ultima pagina    
            //como se que son dos paginas pongo "2"
               
if($this->PageNo() == 2){

    
//Posición: a 1,5 cm del final
    
$this->SetY(-40);
    
//Arial italic 8
    
$this->SetFont('Arial','I',20);
    
//Número de página
    //$this->Cell(0,10,'HOLA SOY UN TEXTO AL PIE... '.$this->PageNo().'/{nb}',0,0,'C');
    
$this->Cell(0,10,'HOLA SOY UN TEXTO AL PIE... ');
    
    }
    
    
    
    
    


}
}

//Creación del objeto de la clase heredada
$pdf=new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','',12);
for(
$i=1;$i<=40;$i++)
    
$pdf->Cell(0,10,'Imprimiendo línea número '.$i,0,1);
$pdf->Output(); 
..este quiza no sea el modo correcto de hacerlo pero funciona... habra que investigar mas
  #10 (permalink)  
Antiguo 22/06/2010, 10:29
Avatar de CdG
CdG
 
Fecha de Ingreso: marzo-2008
Mensajes: 114
Antigüedad: 16 años, 1 mes
Puntos: 2
Respuesta: Pie de pagina PDF

Cita:
Iniciado por wiwi74 Ver Mensaje
No en realidad eso cuenta el numero de paginas del pdf, lo cual se puede usar en un condicional
PageNo() sí se puede usar en un condicional porque es un entero. Pero {nb} es un "alias" al número total de páginas, por eso falla la condición.

Una posible solución sería editar tu clase Fpdf, y en la linea 310 tienes algo así:

Código PHP:
if($this->page>0)
{
    
//Page footer
    
$this->InFooter=true;
    
$this->Footer();
    
$this->InFooter=false;
    
//Close page
    
$this->_endpage();

reemplazalo por esto:

Código PHP:
if($this->page && $this->page $this->AliasNbPages)
{
    
//Page footer
    
$this->InFooter=true;
    
$this->Footer();
    
$this->InFooter=false;
    
//Close page
    
$this->_endpage();
}
else
{
    
//Page footer
    
$this->InFooter=true;
    
$this->Footer(false);
    
$this->InFooter=false;
    
//Close page
    
$this->_endpage();

y luego en tu footer has esto:

Código PHP:
function Footer($lastPage true)
{
    
//Posición: a 1,5 cm del final
    
$this->SetY(-15);
    
//Arial italic 8
    
$this->SetFont('Arial','I',8);
    
//Número de página
    
if (!$lastPage){
        
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
    }
    else{
        
$this->Cell(0,10,'última página',0,0,'C');
    }

__________________
no quiero ser un árbol y caminar
Jacinto Piedra

Última edición por CdG; 22/06/2010 a las 10:52
  #11 (permalink)  
Antiguo 22/06/2010, 14:56
 
Fecha de Ingreso: septiembre-2008
Mensajes: 152
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Pie de pagina PDF

Excelente CdG funciona a la perfeccion muchas gracias justo lo que necesitaba


Y gracias a todos por sus comentarios me fueron de gran ayuda.

Saludos y en verdad MUCHISIMAS GRACIAS !!!!!

Ojala puedan dar este tema como SOLUCIONADO..

Gracias

Etiquetas: pdf, pie
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:18.