Fusionner les données FDF dans un fichier PDF en utilisant PHP
est-il possible de fusionner des données FDF avec un fichier PDF en utilisant PHP seul? Ou est-il pas d'autre choix que d'utiliser une 3ème partie de la ligne de commande outil pour y parvenir?
Si c'est le cas, quelqu'un peut-il m'indiquer la direction de l'un?
je sors actuellement le fichier FDF vers le navigateur dans l'espoir qu'il redirigera l'utilisateur vers le PDF rempli mais pour certaines personnes ce n'est pas le cas. Le contenu FDF est affiché à l'écran, même si j'utilise header('Content-type: application/vnd.dff');
4 réponses
pour référence future, il semble qu'il n'y ait pas une façon fiable de le faire sans une application tierce partie. 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 je l'ai 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;
c'était beaucoup plus facile que ce que je pensais. Cela élimine instantanément le besoin de pirater avec des en-têtes et des extensions de fichiers pour assurer tous les navigateurs manipuler un FDF correctement, car il fait tout simplement le navigateur télécharger le fichier PDF.
si vous voulez que le fichier de sortie PDF ne soit plus modifiable, utilisez
passthru("pdftk file.pdf fill_form data.fdf output - flatten");
excuses si c'est quelque chose de Basique, j'ai juste pensé que je mettrais tout ça au même endroit pour que les gens ne subissent pas le mal de tête que j'ai enduré.
N.B. si votre variable PATH n'est pas définie, vous devrez utiliser le chemin complet vers pdftk c.-à-d.
passthru("/usr/local/bin/pdftk file.pdf fill_form data.fdf output - flatten");
il y a une autre façon aujourd'hui de ne pas utiliser passthru ni pdftk mais juste un script fait en 2004 mais qui fonctionne toujours bien : forge_fdf
il vous aide à construire un fdf que vous pouvez incoporate directement dans votre pdf, il signifie que vous
enregistrez ceci dans un fichier php, disons 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 ouvrira votre fichier PDF dans le navigateur (alternativement il y a un moyen de enregistrer sur le disque dur je pense que je me souviens) et le champ e-mail sera rempli avec les données de MYSQL : mb_strtolower($row_delivreur['firstname']).'.'.mb_strtolower($row_delivreur['lastname']).'@gmail.com'
Il 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
de loin la façon la plus facile que j'ai trouvée pour installer pdftk sur centos:
Install rpmforge repo - http://wiki.centos.org/AdditionalResources/Repositories/RPMForge#head-5aabf02717d5b6b12d47edbc5811404998926a1b
yum install pdftk
et c'est tout!
http://www.setasign.de/products/pdf-php-solutions/fpdi/demos/concatenate-fake/
Cela fonctionne , les classes de téléchargement sont liés à partir du site web trop,
il ne nécessite aucune commande passthru/exec et aucune extension supplémentaire.
édité pour dire, cela ne fonctionne pas avec les nouvelles versions pdf 1.5+, reversé à PDFTK, fiddly mais fonctionne avec tous les pdfs en utilisant la commande 'exec'.