2009-09-07 9 views
20

È possibile unire i dati FDF con un file PDF utilizzando solo PHP? O non c'è altra scelta che usare uno strumento da riga di comando di terze parti per raggiungere questo obiettivo?Unisci i dati FDF in un file PDF utilizzando PHP

Se questo è il caso, qualcuno può indicarmi la direzione di uno?

Attualmente sto trasmettendo il file FDF al browser nella speranza che reindirizzerà l'utente al PDF compilato ma per alcune persone questo non è il caso. I contenuti FDF vengono inviati allo schermo, anche se sto usando l'intestazione ('Content-type: application/vnd.fdf');

risposta

30

Per riferimento futuro, sembra che non ci sia un modo affidabile per farlo senza un'app di terze parti. Pdftk (http://www.accesspdf.com/pdftk/) ha finito per essere la mia soluzione.

ho generato il file FDF come prima, e poi fusa nel mio file PDF utilizzando il seguente codice PHP

header('Content-type: application/pdf'); 
header('Content-Disposition: attachment; filename="Download.pdf"'); 
passthru("pdftk file.pdf fill_form data.fdf output - "); 
exit; 

E 'stato molto più facile che ho pensato che sarebbe stato. Questo elimina istantaneamente la necessità di hackerare le intestazioni e le estensioni dei file per garantire che tutti i browser gestiscano correttamente un FDF, poiché fa semplicemente scaricare il file PDF dal browser.

Se si desidera che il file di output PDF a non essere più modificabile, utilizzare

passthru("pdftk file.pdf fill_form data.fdf output - flatten"); 

Scuse se questa è roba di base, solo pensato che avevo messo tutto in un unico posto in modo che la gente non va attraverso il mal di testa che ho sopportato.

N.B. Se la variabile PATH non è impostata, è necessario utilizzare il percorso completo per PDFTK cioè

passthru("/usr/local/bin/pdftk file.pdf fill_form data.fdf output - flatten"); 
+0

ho fatto che ora, grazie – James

+1

Wow, mi hanno aiutato molto! – Strae

+2

Va notato che 'fill_form' funziona anche con i dati XFDF. Se si desidera una combinazione di campi modificabili e di sola lettura nel PDF risultante, impostare la proprietà "sola lettura" per i campi che si desidera compilare quando si genera il PDF. I campi di sola lettura saranno compilati da PDFTK, ma non saranno modificabili dall'utente finale. – Kenaniah

3

C'è un altro modo per giorno che non utilizza passante né pdftk, ma solo uno script realizzato nel 2004, ma ancora lavorando bene: forge_fdf

che ti aiuta a costruire un FDF che si può incoporate straithly nel vostro pdf, esso significa che tu hai

Salva questo in un file php, diciamo generatePdf.php

require_once('forge_fdf.php'); 

// leave this blank if we're associating the FDF w/ the PDF via URL 
$pdf_form_url= ""; 


// default data; these two arrays must ultimately list all of the fields 
// you desire to alter, even if you just want to set the 'hidden' flag; 
// 
// 
$fdf_data_names= array(); // none of these in this example 
$fdf_data_strings= array(); // none of these in this example 

$fdf_data_strings['email']=mb_strtolower($row_delivreur['firstname']).'.'.mb_strtolower($row_delivreur['lastname']).'@gmail.com'; 

$fields_hidden= array(); 
$fields_readonly= array(); 

// set this to retry the previous state 
$retry_b= false; 

header('content-type: application/vnd.fdf'); 

echo forge_fdf($pdf_form_url, 
     $fdf_data_strings, 
     $fdf_data_names, 
     $fields_hidden, 
     $fields_readonly); 

Fare un link per Pathtoyourpdf/nameofpdffile.pdf # FDF = generatePdf.php aprirà il file PDF nel browser (in alternativa c'è un modo per salvarlo su disco Credo di ricordare) e l'e-mail campo sarà riempito con i dati di MySQL: mb_strtolower($row_delivreur['firstname']).'.'.mb_strtolower($row_delivreur['lastname']).'@gmail.com'

Funziona con caselle di controllo, pulsante di opzione, ... Si apre bene in Firefox, deve essere testato con altri browser.

altre informazioni su PDF HACKS

+0

forge_fdf per PHP è anche scritto da PDF Labs (i creatori di Pdftk), credo. – BMiner