¿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.
Respuestas:
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.
fuente
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');
fuente
"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?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.
fuente
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á.
fuente
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í
fuente
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.
fuente
Tcpdf también es una buena biblioteca para generar pdf en php http://www.tcpdf.org/
fuente
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.
fuente
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
fuente
<?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); ?>
fuente
pdf_set_info($pdfFile, "Title", "PDFlib");