¿Edición de PDF en PHP? [cerrado]

81

¿Alguien conoce un buen método para editar archivos PDF en PHP? Preferiblemente métodos de código abierto / costo de licencia cero. :)

Estoy pensando en abrir un archivo PDF, reemplazar texto en el PDF y luego escribir la versión modificada del PDF.

He creado archivos PDF mediante programación en el pasado usando FPDF, pero a veces lo encontré un poco difícil de manejar.

Kaybenleroll
fuente
Solo he usado FPDF y creo que es increíble. Realmente impresionante.
SQLMason
También estaba tratando de encontrar una solución rápida a esto. Quería el mismo pdf para cada una de mis páginas de producto, pero con el número de producto y el nombre del producto reemplazados en cada pdf. Descubrí que usar la combinación de correspondencia (Word u OpenOffice) es en realidad la forma más fácil de hacerlo. Luego exporté todos los archivos PDF y los cargué. Espero que esto ayude a alguien.
NotJay

Respuestas:

70

Si está adoptando un enfoque de 'llenar el espacio en blanco', puede colocar el texto con precisión en cualquier lugar que desee en la página. Por lo que es relativamente fácil (si no un poco tedioso) agregar el texto que falta al documento. Por ejemplo con Zend Framework:

<?php
require_once 'Zend/Pdf.php';

$pdf = Zend_Pdf::load('blank.pdf');
$page = $pdf->pages[0];
$font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_HELVETICA);
$page->setFont($font, 12);
$page->drawText('Hello world!', 72, 720);
$pdf->save('zend.pdf');

Si está intentando reemplazar el contenido en línea, como una "[cadena de marcador de posición]", se vuelve mucho más complicado. Si bien es técnicamente posible hacerlo, es probable que arruine el diseño de la página.

Un documento PDF se compone de un conjunto de operaciones de dibujo primitivas: línea aquí, imagen aquí, fragmento de texto allí, etc. No contiene ninguna información sobre la intención de diseño de esas primitivas.

grom
fuente
1
¡Esto es genial! No me di cuenta de que Zend Framework era gratis, estaba confundido con Zend Studio, que es propietario.
Liam
8
Solo una advertencia para cualquiera que intente usar esto: solo funciona con archivos PDF creados en Acrobat versión 4 y anteriores. Después de la versión 4, Adobe comenzó a codificar archivos, lo que dificultó la realización de ediciones en archivos PDF (o la importación a otros archivos PDF).
Darryl Hein
4
Desde entonces, se ha agregado soporte PDF 1.4 .
Raphael Schweikert
2
¿Funciona esto ahora sin Zend?
William Entriken
¿Alguna solución si quisiera reemplazar contenido como [cadena de marcador de posición]?
Starx
42

Hay una clase de PDF gratuita y fácil de usar para crear documentos PDF. Se llama FPDF . En combinación con FPDI ( http://www.setasign.de/products/pdf-php-solutions/fpdi ) incluso es posible editar documentos PDF. El siguiente código muestra cómo usar FPDF y FPDI para completar un cupón de regalo existente con los datos del usuario.

require_once('fpdf.php'); 
require_once('fpdi.php'); 
$pdf = new FPDI();

$pdf->AddPage(); 

$pdf->setSourceFile('gift_coupon.pdf'); 
// import page 1 
$tplIdx = $this->pdf->importPage(1); 
//use the imported page and place it at point 0,0; calculate width and height
//automaticallay and ajust the page size to the size of the imported page 
$this->pdf->useTemplate($tplIdx, 0, 0, 0, 0, true); 

// now write some text above the imported page 
$this->pdf->SetFont('Arial', '', '13'); 
$this->pdf->SetTextColor(0,0,0);
//set position in pdf document
$this->pdf->SetXY(20, 20);
//first parameter defines the line height
$this->pdf->Write(0, 'gift code');
//force the browser to download the output
$this->pdf->Output('gift_coupon_generated.pdf', 'D');
metatrón
fuente
1
Excelente biblioteca - era exactamente lo que
buscaba
1
Esto es bueno pero en algún pdf da este error. ¿ "FPDF error: This document (testcopy.pdf) probably uses a compression technique which is not supported by the free parser shipped with FPDI."Alguna solución para ello?
Necesita convertir su pdf a una versión anterior (pdf 1.4) o utilizar la edición comercial fpdi. Ofrecemos un reemplazo del analizador como un complemento comercial independiente, que permite a FPDI manejar documentos que utilizan estas funciones de compresión. fuente
SwissFr
¿Es posible establecer el archivo de origen desde otra página web? Ej .: example.com/file.pdf?
Alex
19

Si necesita archivos PDF realmente simples, entonces Zend o FPDF están bien. Sin embargo, me resulta difícil y frustrante trabajar con ellos. Además, debido a la forma en que funciona la API, no hay una buena manera de separar el contenido de la presentación de la lógica empresarial.

Por esa razón, utilizo dompdf , que convierte automáticamente HTML y CSS en documentos PDF. Puede diseñar una plantilla como lo haría para una página HTML y utilizar la sintaxis HTML estándar. Incluso puede incluir un archivo CSS externo. La biblioteca no es perfecta y el marcado o CSS muy complejo a veces se estropea, pero no he encontrado nada más que funcione tan bien.

AdamTheHutt
fuente
9
-1 Ya que no responde a la pregunta. El autor desea editar archivos PDF existentes, no crearlos desde cero.
Devuelto el
9
Vine a esta página porque estaba buscando editar un PDF, pero esta respuesta me parece más útil porque puedo ver por qué puede ser más fácil construir desde cero en html en lugar de editar un PDF existente.
Justin Vincent
3

No sé si esta es una opción, pero funcionaría de manera muy similar a la biblioteca pdf de Zend, pero no es necesario cargar un montón de código adicional (el marco zend). Simplemente extiende FPDF.

http://www.setasign.de/products/pdf-php-solutions/fpdi/

Aquí básicamente puedes hacer lo mismo. Cargue el PDF, escriba encima y luego guárdelo en un nuevo PDF. En FPDI, básicamente, inserta el PDF como una imagen para que pueda poner lo que quiera encima.

Pero nuevamente, esto usa FPDF, por lo que si no desea usar eso, entonces no funcionará.

Darryl Hein
fuente
3

Zend Framework puede cargar y editar archivos PDF existentes. Creo que también admite revisiones.

Lo uso para crear documentos en un proyecto y funciona muy bien. Aunque nunca edité uno.

Mira el documento aquí

Juan
fuente
2

La documentación de la extensión PDF / pdflib en PHP es escasa (algo que se ha señalado en bugs.php.net). Le recomiendo que utilice la biblioteca Zend.

Ross
fuente
1

Realmente tenía grandes esperanzas en dompdf (es una idea genial) pero el problema de posicionamiento es un factor importante en mi uso de fpdf. Aunque es tedioso ya que todos los elementos deben configurarse; es poderoso como todos salen.

Pongo una imagen debajo de mi espacio de trabajo en el documento para poner mi diseño encima para que encaje. Siempre ha sido suficiente incluso para columnas (requiere un poco de cálculo de cadenas php, pero nada demasiado embriagador).

Buena suerte.

josh.chavanne
fuente
0

Usamos pdflib para crear archivos PDF desde nuestras aplicaciones de rieles. Tiene enlaces para PHP y muchos otros lenguajes.

Usamos la versión comercial, pero también tienen una versión gratuita / de código abierto que tiene algunas limitaciones.

Desafortunadamente, esto solo permite la creación de PDF.

Si desea abrir y 'editar' archivos existentes, pdflib proporciona un producto que hace esto , pero cuesta MUCHO

Orion Edwards
fuente
-1
<?php

//getting new instance
$pdfFile = new_pdf();

PDF_open_file($pdfFile, " ");

//document info
pdf_set_info($pdfFile, "Auther", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Creator", "Ahmed Elbshry");
pdf_set_info($pdfFile, "Title", "PDFlib");
pdf_set_info($pdfFile, "Subject", "Using PDFlib");

//starting our page and define the width and highet of the document
pdf_begin_page($pdfFile, 595, 842);

//check if Arial font is found, or exit
if($font = PDF_findfont($pdfFile, "Arial", "winansi", 1)) {
    PDF_setfont($pdfFile, $font, 12);
} else {
    echo ("Font Not Found!");
    PDF_end_page($pdfFile);
    PDF_close($pdfFile);
    PDF_delete($pdfFile);
    exit();
}

//start writing from the point 50,780
PDF_show_xy($pdfFile, "This Text In Arial Font", 50, 780);
PDF_end_page($pdfFile);
PDF_close($pdfFile);

//store the pdf document in $pdf
$pdf = PDF_get_buffer($pdfFile);
//get  the len to tell the browser about it
$pdflen = strlen($pdfFile);

//telling the browser about the pdf document
header("Content-type: application/pdf");
header("Content-length: $pdflen");
header("Content-Disposition: inline; filename=phpMade.pdf");
//output the document
print($pdf);
//delete the object
PDF_delete($pdfFile);
?>
Nitin
fuente
8
¿Qué biblioteca estás usando?
Hugo Estrada
1
pdf_set_info($pdfFile, "Title", "PDFlib");
user183037
todavía no está claro qué biblioteca es esta
Deniz Celebi
Creo que se refería a la extensión php pdflib incorporada. php.net/manual/en/pdf.examples-basic.php
Kostiantyn