Pregunta

¿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 el 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.

¿Fue útil?

Solución

Si adopta un enfoque de "completar los espacios en blanco", puede colocar el texto con precisión en cualquier lugar de la página que desee.Por lo tanto, 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 intenta reemplazar 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 estropees 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.

Otros consejos

Existe 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 utilizar 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');

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

Por esa razón uso dompdf, que convierte automáticamente HTML y CSS a documentos PDF.Puede diseñar una plantilla tal como lo haría con una página HTML y utilizar la sintaxis HTML estándar.Incluso puedes 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.

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.

Consulte el documento aquí

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 insertas el PDF como una imagen para que puedas poner lo que quieras sobre él.

Pero nuevamente, esto usa FPDF, por lo que si no desea usarlo, no funcionará.

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

Tcpdf también es una buena biblioteca para generar pdf en php http://www.tcpdf.org/

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

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

Buena suerte.

Usamos pdflib para crear archivos PDF desde nuestras aplicaciones Rails.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.

Lamentablemente, esto sólo permite la creación de archivos PDF.

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

<?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);
?>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top