2008-08-10 42 views
67

¿Alguien sabe de un buen método para editar archivos PDF en PHP? Preferiblemente métodos de costo de licencia abierta/licencia cero. :)Edición de PDF en PHP?

Me refiero a lo largo de las líneas de abrir un archivo PDF, reemplazando el texto en el PDF y luego escribir la versión modificada del PDF?

He creado programáticamente archivos PDF en el pasado usando FPDF, pero a veces me pareció un poco difícil de manejar.

+0

sólo he utilizado FPDF y creo que es impresionante. Me gusta realmente genial. – SQLMason

+0

Estaba tratando de encontrar una solución rápida para esto también. Quería el mismo pdf para cada una de las páginas de mis productos, pero con el número de producto y el nombre del producto reemplazado en cada pdf. Descubrí que usar la combinación de correspondencia (Word u OpenOffice) es la forma más sencilla de hacerlo. Luego exporté todos los pdfs y los cargué. Espero que esto ayude a alguien. – NotJay

Respuesta

61

Si usted está tomando un 'llene el espacio' enfoque, puede precisamente texto de la posición en cualquier lugar que desee en la página. Por lo tanto, es relativamente fácil (si no tedioso) agregar el texto faltante 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 usted está tratando de reemplazar el contenido línea, tales como "[cadena de marcador de posición]," se pone mucho más complicado. Si bien es técnicamente posible hacerlo, es probable que estropee 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 del diseño de esas primitivas.

+1

¡Esto es genial! No me di cuenta de que el Zend Framework era gratuito, me confundí con Zend Studio, que es propietario. – Liam

+8

Solo una palabra de 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 dificulta la realización de ediciones en PDF (o la importación a otros archivos PDF). –

+4

PDF 1.4 Soporte [se ha agregado desde entonces] (http://framework.zend.com/manual/en/zend.pdf.introduction.html#fn1). –

0

Usamos pdflib para crear archivos PDF desde nuestras aplicaciones de rieles. Tiene enlaces para PHP y una tonelada de otros idiomas.

Nos usar la versión commmercial, pero también tienen un free/open source version que tiene algunas limitaciones.

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

Si desea abrir y 'corrija' los archivos existentes, pdflib sí proporcionan a product which does this this, pero los costos de un Zend Framework LOT

3

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. Nunca editado uno sin embargo.

Mira la doc here

2

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

17

Si necesita archivos PDF muy simples, a continuación, Zend o FPDF está muy bien. Sin embargo, les 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 comercial.

Por esa razón, yo uso dompdf, que convierte automáticamente HTML y CSS a documentos PDF. Puede diseñar una plantilla como lo haría para una página HTML y usar 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 arruina, pero no he encontrado nada más que también funcione.

+6

-1 Dado que no responde la pregunta. El póster desea editar archivos PDF existentes sin crearlos desde cero. – Reimund

+9

Vine a esta página porque quería editar un PDF, pero esta respuesta me parece más útil porque puedo ver por qué puede ser más fácil compilar desde cero en html en lugar de editar un PDF existente. –

3

No sé si esto es una opción, pero funcionaría muy similar a la biblioteca pdf de Zend, pero que no tienen que cargar un montón de código extra (el Zend Framework). Simplemente extiende FPDF.

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

Aquí, básicamente, puede hacer lo mismo. Cargue el PDF, escriba encima de él y luego guárdelo en un nuevo PDF. En FPDI básicamente insertas el PDF como una imagen para que puedas poner lo que quieras sobre él.

Pero, una vez más, esto utiliza FPDF, por lo que si no quiere usar eso, entonces no funcionará.

1

Realmente tenía grandes esperanzas para dompdf (es una buena idea) pero el problema de posicionamiento es un factor importante en mi uso de fpdf. Aunque es tedioso ya que cada elemento tiene que establecerse; es poderoso cuando todos salen.

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

Buena suerte.

0
<?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); 
?> 
+8

¿Qué biblioteca estás usando? –

+1

'pdf_set_info ($ pdfFile," Título "," PDFlib ");' – user183037

+0

todavía no está claro qué biblioteca es –

34

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'); 
+0

Excelente biblioteca - era exactamente lo que buscaba, gracias por la recomendación –

+1

Esto es bueno, pero en algunos pdf da este error '" Error FPDF: Este documento (testcopy.pdf) probablemente usa una técnica de compresión que no es compatible con el analizador gratuito enviado con FPDI. "¿Alguna solución para ello? –

+0

Necesita convertir su pdf a una versión anterior (pdf 1.4) o usar la edición comercial de fpdi. * Ofrecemos un reemplazo de analizador como un complemento comercial por separado, que permite a FPDI manejar documentos que usan estas características de compresión. * [Fuente] (https: //www.setasign.com/support/faq/fpdi/error-document-compression-technique-not-supported/# question-89) – SwissFr