viernes, 6 de junio de 2008

Unificar documentos PDF existentes en un único documento PDF mediante PHP

Si necesitas importar en un único documento PDF varios documentos PDF existentes mediante PHP, puedes utilizar para ello una colección de clases PHP llamada FPDI, definida en su página oficial como una colección de clases que facilitan a los desarrolladores la lectura de documentos PDF existentes y usarlos como plantillas en FPDF.

Antes de empezar, los requisitos para utilizar FPDI son:

1. Clase FPDF
2. Paquete de clases FPDI
3. Plantilla FPDF (FPDF_TPL)

Deberás descargártelos y descomprimirlos en un mismo directorio dentro de tu servidor:



Crea un nuevo documento PHP con el siguiente código (puedes copiarlo desde ésta página):



Como puedes observar en el código, está concatenando los archivos pdfdoc1.pdf, pdfdoc2.pdf y pdfdoc3.pdf, por lo que tienen que existir esos tres ficheros pdf en el mismo directorio donde has colocado la página PHP.

Y eso es todo!

Tomadas como referencias:

: : http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/concatenate-fake/
: : http://www.setasign.de/products/pdf-php-solutions/fpdi/downloads/

2 comentarios:

Fernandu dijo...

y como hago para unir varios extraídos de una base de datos.

Unknown dijo...

Muy buen trabajo. Me ha sido de gran utilidad.
Lo he usado para combinar un PDF creado con FPDF y dos previamente ya existentes.
He mirado previamente el vídeo:
https://youtu.be/1acB1_LqVyc
Que me ha encantado.

Luego he combinado las dos informaciones en un fichero PHP que pongo de ejemplo:
files = $files;
}

public function concat()
{
foreach($this->files AS $file) {
$pageCount = $this->setSourceFile($file);
for ($pageNo = 1; $pageNo <= $pageCount; $pageNo++) {
$pageId = $this->ImportPage($pageNo);
$s = $this->getTemplatesize($pageId);
$this->AddPage($s['orientation'], $s);
$this->useImportedPage($pageId);
}
}
}
}

class PDF extends FPDF
{
// Cabecera de página
function Header()
{
// Logo
$this->Image('descarga.jpg',10,8,33);
// Arial bold 15
$this->SetFont('Arial','B',15);
// Movernos a la derecha
$this->Cell(35);
// Título
$texto = 'Dónde está el problema, en los caracteres especiales';
$largo = strlen($texto);
$this->Cell(3*$largo,10,utf8_decode($texto),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();
//AddPage([string orientation [, mixed size [, int rotation]]])
//orientation: P o Portrait (normal), L o Landscape (apaisado)
//size: A3, A4, A5, Letter, Legal o un array conteniendo el ancho y el alto (en unidades definidas por el usuario).
//rotation: Ángulo por el cual rotar la página. Debe ser un múltiplo de 90; valores positivos rotan la página en el sentido de las agujas del reloj. El valor por defecto es 0.
$pdf->AddPage('L');
$pdf->SetFont('Times','',12);
for($i=1;$i<=40;$i++)
$pdf->Cell(0,10,utf8_decode('Imprimiendo línea número ').$i,0,1);

$pdf->Output('F', 'mio.pdf');


$pdf = new ConcatPdf();
$pdf->setFiles(array('uno.pdf', 'dos.pdf', 'mio.pdf'))
$pdf->concat();;

$pdf->Output('I', 'concat.pdf');
?>