2009-09-07 15 views
20

Est-il possible de fusionner des données FDF avec un fichier PDF en utilisant PHP seul? Ou n'y a-t-il pas d'autre choix que d'utiliser un outil de ligne de commande tiers pour y parvenir?Fusion de données FDF dans un fichier PDF en utilisant PHP

Si c'est le cas quelqu'un peut-il me diriger dans la direction d'un?

Je publie actuellement le fichier FDF dans le navigateur dans l'espoir qu'il redirigera l'utilisateur vers le fichier PDF rempli, mais pour certaines personnes, ce n'est pas le cas. Le contenu FDF est en train d'être affiché à l'écran, même si j'utilise l'en-tête ('Content-type: application/vnd.fdf');

Répondre

30

Pour référence future, il semble qu'il n'y ait pas de manière fiable de le faire sans une application tierce. Pdftk (http://www.accesspdf.com/pdftk/) a fini par être ma solution.

J'ai d'abord généré le fichier FDF comme avant, puis il a fusionné dans mon fichier PDF en utilisant le code PHP suivant

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

Il était beaucoup plus facile que je pensais que ce serait. Cela élimine instantanément le besoin de pirater les en-têtes et les extensions de fichiers pour garantir que tous les navigateurs traitent correctement un fichier FDF, car le navigateur télécharge simplement le fichier PDF.

Si vous voulez que le fichier de sortie PDF pour ne plus être modifiable, utilisez

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

Toutes mes excuses si ce sont des choses de base, juste pensé que je mettrais tout en un seul endroit afin que les gens ne vont pas à travers le mal de tête que j'ai enduré.

N.B. Si votre variable PATH est pas définie, vous aurez besoin d'utiliser le chemin complet PDFTK-à-dire

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

Je l'ai fait maintenant, grâce – James

+1

Wow, m'a beaucoup aidé! – Strae

+2

Il convient de noter que 'fill_form' fonctionne également avec les données XFDF. Si vous voulez une combinaison de champs modifiables et en lecture seule dans votre fichier PDF, définissez la propriété "lecture seule" pour les champs que vous souhaitez remplir lorsque vous générez le fichier PDF. Les champs en lecture seule seront remplis par PDFTK, mais ne seront pas modifiables par l'utilisateur final. – Kenaniah

1

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

Cela fonctionne, les classes téléchargement sont liées à partir du site Web aussi,

Il ne nécessite aucune commande passthru/exec et pas d'extensions supplémentaires. Édité pour dire, ceci ne fonctionne pas avec les nouvelles versions pdf 1.5+, retournées à PDFTK, fiddly mais fonctionne avec tous les pdf en utilisant la commande 'exec'.

3

Il y a une autre façon de jour que de ne pas utiliser passthru ni pdftk mais juste un script fait en 2004, mais en travaillant bien: forge_fdf

il vous aide à construire une fdf que vous pouvez incoporate straithly dans votre pdf, il signifie que vous

Enregistrez ceci dans un fichier php, par exemple 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); 

Faire un lien vers Pathtoyourpdf/nameofpdffile.pdf # = FDF generatePdf.php va ouvrir votre fichier PDF dans le navigateur (il y a encore un moyen de l'enregistrer sur le disque je pense que je me souviens) et l'e-mail sur le terrain sera rempli avec les données de MYSQL: mb_strtolower($row_delivreur['firstname']).'.'.mb_strtolower($row_delivreur['lastname']).'@gmail.com'

Fonctionne avec des cases à cocher, bouton radio, ... Il s'ouvre bien dans Firefox, il doit être testé avec d'autres navigateurs.

Plus d'infos sur PDF HACKS

+0

forge_fdf pour PHP est aussi écrit par PDF Labs (les créateurs de Pdftk), je crois. – BMiner