dominios y alojamiento web en hostalia

Columnas en FPDF

03 de agosto de 2010
Valoración del artículo:
Vemos como maquetar nuestro archivo pdf a dos columnas.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
En este artículo vamos a seguir dándole forma a nuestro archivo PDF. Para ello en esta ocasión vamos a ver como colocar texto en dos columnas, además vamos a trabajar con la estructura de control if.

Vamos a seguir utilizando el ejemplo del articulo anterior siguiendo la línea de nuestro manual sobre FPDF.

Lo primero que vamos a hacer es crear dos variables e inicializarlas:

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

class PDF extends FPDF
{   
   //Columna actual
   var $col=0;
   //Ordenada de comienzo de la columna
   var $y=0;

A continuación añadimos la cabecera y el pie del documento

//Cabecera de página
   function Header()
   {
      //Logo
      $this->Image("leon.jpg" , 10 ,8, 35 , 38 , "JPG" );
      //Arial bold 15
      $this->SetFont('Arial','B',15);
      //Movernos a la derecha
      $this->Cell(80);
      //Título
      $this->Cell(60,10,'Titulo del archivo',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(),0,0,'C');
   }

Ahora tenemos que crear una función que nos establezca la posición de una columna.

function SetCol($col)
{
//Establecer la posición de una columna dada
$this->col=$col;
$x=10+$col*75;
$this->SetLeftMargin($x);
$this->SetX($x);
}

En este caso lo que hacemos es asignar a $this->col el valor de la variable col especificada al inicio. A partir de hay creamos una variable $x que nos dará el margen izquierdo de la posición de dicha columna.

Y a continuación la función que realmente nos interesa ya que es la que realiza el salto de columna o página según la posición en la que estemos.

function AcceptPageBreak()
{
//Método que acepta o no el salto automático de página
if($this->col<2)
{
//Ir a la siguiente columna
$this->SetCol($this->col+1);
//Establecer la ordenada al principio
$this->SetY($this->y0);
//Seguir en esta página
return false;
}
else
{
//Volver a la primera columna
$this->SetCol(0);
//Salto de página
return true;
}
}

Esta función lo que nos hace es preguntar si estamos en cualquiera de las columnas menor que 2, si estamos aquí cambiamos la variable para en el siguiente paso ir a la columna siguiente, y seguimos en la misma pagina. Si ya estamos en la columna 2 lo único que hacemos es pasar de página y situarnos nuevamente en la columna 0.

Ahora pasamos el resto de funciones que necesitamos para imprimir los textos contenidos en los archivos externos.

function TituloArchivo($num,$label)
{
   $this->SetY(55);
   //Arial 12
   $this->SetFont('Arial','',12);
   //Color de fondo
   $this->SetFillColor(200,220,255);
   //Título
   $this->Cell(0,6,"Archivo $num : $label",0,1,'L',true);
   //Salto de línea
   $this->Ln(4);
   //Guardar ordenada
$this->y0=$this->GetY();

}

function CuerpoArchivo($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(60,5,$txt);
   //Salto de línea
   $this->Ln();
   //Volver a la primera columna
   $this->SetCol(0);
}

function ImprimirArchivo($num,$title,$file)
{
   $this->AddPage();
   $this->TituloArchivo($num,$title);
   $this->CuerpoArchivo($file);
}

Después de esto tenemos que empezar a crear el archivo con el siguiente código:

$pdf=new PDF();
$title='Mostramos un archivo txt';
$pdf->SetTitle($title);
$pdf->SetY(65);
$pdf->ImprimirArchivo(1,'Archivo de prueba ','prueba1.txt');
$pdf->ImprimirArchivo(2,'Otro archivo','prueba2.txt');
$pdf->Output();

Ahora para terminar colocamos el código completo y el enlace a una página aparte donde podemos verlo funcionando.

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

class PDF extends FPDF
{
   //Columna actual
   var $col=0;
   //Ordenada de comienzo de la columna
   var $y=0;
   //Cabecera de página
function Header()
{
//Logo
$this->Image("leon.jpg" , 10 ,8, 35 , 38 , "JPG" );
//Arial bold 15
$this->SetFont('Arial','B',15);
//Movernos a la derecha
$this->Cell(80);
//Título
$this->Cell(60,10,'Titulo del archivo',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(),0,0,'C');
}
function SetCol($col)
   {
      //Establecer la posición de una columna dada
      $this->col=$col;
      $x=10+$col*75;
      $this->SetLeftMargin($x);
      $this->SetX($x);
   }
   function AcceptPageBreak()
   {
      //Método que acepta o no el salto automático de página
      if($this->col<2)
      {
      //Ir a la siguiente columna
       $this->SetCol($this->col+1);
      //Establecer la ordenada al principio
      $this->SetY($this->y0);
      //Seguir en esta página
      return false;
      }
      else
      {
      //Volver a la primera columna
      $this->SetCol(0);
      //Salto de página
      return true;
      }
   }
function TituloArchivo($num,$label)
{
   $this->SetY(55);
$this->SetFont('Arial','',12);
$this->SetFillColor(200,220,255);
$this->Cell(0,6,"Archivo $num : $label",0,1,'L',true);
$this->Ln(4);
//Guardar ordenada
$this->y0=$this->GetY();

}

function CuerpoArchivo($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(60,5,$txt);
      //Salto de línea
      $this->Ln();
      //Volver a la primera columna
      $this->SetCol(0);

}

function ImprimirArchivo($num,$title,$file)
{
$this->AddPage();
$this->TituloArchivo($num,$title);
$this->CuerpoArchivo($file);
}
}

$pdf=new PDF();
$title='Mostramos un archivo txt';
$pdf->SetTitle($title);
$pdf->SetY(65);
$pdf->ImprimirArchivo(1,'Archivo de prueba ','prueba1.txt');
$pdf->ImprimirArchivo(2,'Otro archivo','prueba2.txt');
$pdf->Output();

Compartir en redes sociales

Comentarios
Fueron enviados 3 comentarios al artículo
2 comentarios no revisados
1 comentario revisado:

micnob
Pasar datos desde MySQL
12/5/2011
Tengo el mismo problema que el del comentario anterior.
Quisiera conectarme con la base de datos y colocar los datos en la página en PDF con FPDF.
Gracias por otra parte, el tutorial es perfecto.
Saludos

Manuales relacionados
Categorias relacionadas
El autor
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...