Domanda

Qualcuno conosce un buon metodo per modificare i PDF in PHP?Preferibilmente metodi open source/a costo di licenza zero.:)

Sto pensando di aprire un file PDF, sostituire il testo nel PDF e quindi scrivere la versione modificata del PDF?

In passato ho creato file PDF a livello di codice utilizzando FPDF, ma a volte l'ho trovato un po' ingombrante.

È stato utile?

Soluzione

Se stai adottando un approccio di "riempimento degli spazi vuoti", puoi posizionare con precisione il testo ovunque desideri sulla pagina.Quindi è relativamente facile (se non un po' noioso) aggiungere il testo mancante al documento.Ad esempio 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');

Se stai cercando di sostituire il contenuto in linea, come una "[stringa segnaposto]", diventa molto più complicato.Sebbene sia tecnicamente possibile farlo, è probabile che rovini il layout della pagina.

Un documento PDF è composto da una serie di operazioni di disegno primitive:linea qui, immagine qui, pezzo di testo lì, ecc.Non contiene alcuna informazione sull'intento del layout di tali primitive.

Altri suggerimenti

Esiste un corso PDF gratuito e facile da usare per creare documenti PDF.È chiamato FPDF.In combinazione con FPDI (http://www.setasign.de/products/pdf-php-solutions/fpdi) è anche possibile modificare documenti PDF.Il codice seguente mostra come utilizzare FPDF e FPDI per compilare un buono regalo esistente con i dati dell'utente.

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

Se hai bisogno di PDF davvero semplici, allora Zend o FPDF è ok.Tuttavia trovo difficile e frustrante lavorare con loro.Inoltre, a causa del modo in cui funziona l'API, non esiste un buon modo per separare il contenuto, la presentazione e la logica aziendale.

Per questo motivo, utilizzo dompdf, che converte automaticamente HTML e CSS in documenti PDF.Puoi strutturare un modello proprio come faresti per una pagina HTML e utilizzare la sintassi HTML standard.Puoi anche includere un file CSS esterno.La libreria non è perfetta e il markup o i CSS molto complessi a volte vengono danneggiati, ma non ho trovato nient'altro che funzioni altrettanto bene.

Zend Framework può caricare e modificare file PDF esistenti.Penso che supporti anche le revisioni.

Lo uso per creare documenti in un progetto e funziona benissimo.Non ne ho mai modificato uno però.

Controlla il documento Qui

Non so se questa è un'opzione, ma funzionerebbe in modo molto simile alla libreria pdf di Zend, ma non è necessario caricare un mucchio di codice aggiuntivo (il framework zend).Estende semplicemente FPDF.

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

Qui puoi sostanzialmente fare la stessa cosa.Carica il PDF, scrivici sopra, quindi salva in un nuovo PDF.In FPDI fondamentalmente inserisci il PDF come immagine in modo da poterci mettere sopra quello che vuoi.

Ma ancora una volta, questo utilizza FPDF, quindi se non vuoi usarlo, non funzionerà.

La documentazione dell'estensione PDF/pdflib in PHP è scarsa (qualcosa che è stato notato in bugs.php.net): ti consiglio di utilizzare la libreria Zend.

Tcpdf è anche una buona libreria per generare pdf in php http://www.tcpdf.org/

Avevo davvero grandi speranze per dompdf (è un'idea interessante), ma il problema del posizionamento è un fattore importante nel mio utilizzo di fpdf.Sebbene sia noioso poiché ogni elemento deve essere impostato;è potente poiché tutti escono.

Metto un'immagine sotto l'area di lavoro nel documento per posizionare sopra il mio layout per adattarlo.È sempre stato sufficiente anche per le colonne (richiede un po' di calcolo delle stringhe php, ma niente di troppo inebriante).

Buona fortuna.

Noi usiamo pdflib per creare file PDF dalle nostre app ferroviarie.Ha collegamenti per PHP e moltissimi altri linguaggi.

Usiamo la versione commerciale, ma hanno anche un file versione gratuita/open source che presenta alcune limitazioni.

Sfortunatamente, questo consente solo la creazione di PDF.

Se desideri aprire e "modificare" file esistenti, pdflib fornisce un prodotto che fa questo, ma costa a QUANTITÀ

<?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);
?>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top