Leemos un archivo .txt con PHP y lo insertamos en nuestro documento PDF con las funciones incorporadas de FPDF.
Estamos realizando una serie de artículos prácticos para aprender a crear PDF directamente desde scripts PHP con las librerías FPDF. En el articulo anterior veíamos cómo crear los enlaces en el texto de los archivos PDF pero todavía nos queda bastante por delante.
Bien, pues en este articulo del manual sobre FPDF vamos a ver varias funciones para introducir el texto de un archivo .txt, es decir, vamos a mostrar el contenido de dicho archivo en nuestro PDF.
Vamos a empezar esta práctica colocando un ejemplo, que luego iremos explicándolo paso a paso para que se pueda entender todo lo que hacemos .
<?php
require('fpdf/fpdf.php');
class PDF extends FPDF
{
//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 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);
}
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(0,5,$txt);
//Salto de línea
$this->Ln();
}
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();
?>
Las primeras lineas no las vamos a explicar, ya que están detenidamente analizadas en los artículos anteriores de este manual. Así que pasamos directamente a la función TituloArchivo(), que nos permite especificar el diseño de los títulos de los archivos que vamos a mostrar. Le estamos dando un tipo de letra Arial con un tamaño 12, un color de fondo azul utilizando la función SetFillColor y colocando el titulo con su correspondiente formato, utilizando la función Cell.
A continuación creamos la función CuerpoArchivo() que es la que va a leer el archivo y imprimirlo en nuestro PDF.
Le pasamos como parámetro la ruta del archivo. Con fopen abrimos el archivo en modo lectura, después lo leemos con fread() y guardamos en una variable, cerramos el archivo y damos formato al texto que vamos a mostrar en nuestro PDF.
Para finalizar creamos la función ImprimirArchivo() que engloba las dos anteriores y nos hace más sencillo nuestro código.
Ya lo único que nos queda es lo de siempre, abrir nuestro archivo pdf, ponerle titulo y utilizar la función de ImprimirArchivo() las veces que queramos. Por ultimo cerrar el archivo y listo.
A continuación vamos a mostrar las dos funciones nuevas que hemos utilizado para la realización de este código:
Función SetFillColor()
Esta función nos define el color de relleno para celdas y rectángulos rellenos. Podemos expresar dicho color en RGB o escala de grisesSu sintaxis es la siguiente:
SetFillColor(int r [, int g, int b]);
siendo:
r: si g y b los ponemos, nos muestra el rojo sino la escala de gris
g: el verde
b: azul
Función MultiCell()
Este método nos permite imprimir texto con saltos de línea. Estos pueden ser automáticos o explícito (con el carácter n).Su sintaxis es la siguiente:
MultiCell(float w, float h, string txt [, mixed border [, string align [, boolean fill]]])
Siendo:
- w: Ancho de celdas. Si 0, estos se extienden hasta el margen derecho de la página.
- H : Alto de las celdas.
- Txt:Cadena para imprimir.
- Border : Indica si los bordes deben ser dibujados al rededor del bloque de la celda. El valor puede ser un número:
0: no borde
1: marco
o algún o todos los siguientes caracteres:
L: izquierda
T: superior
R: derecha
B: inferior
Su valor por defecto es 0.
- align : Establece la alineación de texto.
L: a la izquierda
C: centrado
R: a la derecha
J: justificación (valor por defecto)
- fill : Indica si el fondo de la celda debe ser dibujado (true) o transparente (false). Valor por defecto: false.