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

20
demandé sur Kenaniah 2009-09-07 19:50:57

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");
30
répondu James 2010-05-14 07:05:23

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

3
répondu Aureltime 2011-04-26 04:56:44

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!

2
répondu Tom 2010-11-20 07:18:23

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'.

1
répondu TomW 2011-05-12 08:52:58