> Manuales > Crear PDF en PHP con FPDF

Vemos como maquetar nuestro archivo pdf a dos columnas.

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();

Sara Alvarez

Equipo DesarrolloWeb.com

Manual