86 votes

Fusionner des fichiers PDF avec PHP

Mon concept est le suivant : il y a 10 fichiers pdf dans un site web. L'utilisateur peut sélectionner certains fichiers pdf et ils sélectionnent la fusion pour créer un seul fichier pdf qui contient les pages sélectionnées. Comment puis-je faire cela avec php ?

0 votes

Question connexe (à laquelle il a été répondu) : stackoverflow.com/questions/2713701/

3 votes

@Webnet en fait, 64% c'est bien. Je dirais que 0 - 25% = échec, mais je suppose que c'est là que ça devient subjectif.

0 votes

Pouvez-vous utiliser un outil en ligne de commande ?

131voto

Chauhan Points 1315

Voici la commande de fusion de PDF en php.

$fileArray= array("name1.pdf","name2.pdf","name3.pdf","name4.pdf");

$datadir = "save_path/";
$outputName = $datadir."merged.pdf";

$cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=$outputName ";
//Add each pdf file to the end of the command
foreach($fileArray as $file) {
    $cmd .= $file." ";
}
$result = shell_exec($cmd);

J'ai oublié le lien d'où je l'ai trouvé, mais il fonctionne bien.

4 votes

Cela a fonctionné pour moi sans problèmes et sans installer de bibliothèques externes comme FPDI ou autres.

4 votes

Cette solution a été la plus efficace pour moi. Il a été très facile d'installer Ghostscript sur mon serveur. C'était juste "yum install ghostscript". Et votre script a fonctionné parfaitement.

0 votes

Cette opération a permis de fusionner mes PDF, mais a malheureusement supprimé toutes les données des champs à remplir et a cassé les champs eux-mêmes.

41voto

iim.hlk Points 1299

Je propose PDFMerger de pdfmerger.codeplex.com si facile comme : :

include 'PDFMerger.php';

$pdf = new PDFMerger;

$pdf->addPDF('samplepdfs/one.pdf', '1, 3, 4')
    ->addPDF('samplepdfs/two.pdf', '1-2')
    ->addPDF('samplepdfs/three.pdf', 'all')
    ->merge('file', 'samplepdfs/TEST2.pdf'); // REPLACE 'file' WITH 'browser', 'download', 'string', or 'file' for output options

3 votes

Il s'agit essentiellement de l'implémentation par quelqu'un de la réponse de @Christa (FPDF+FDPI), ce qui est génial :) Merci !

0 votes

Il fonctionne très bien sur certains PDF, mais une partie du code est maintenant obsolète.

6 votes

Il ne fonctionne pas non plus avec certains types de compression sur certains PDF.

29voto

Christa Points 237

J'ai déjà fait cela auparavant. J'avais un PDF que j'avais généré avec fpdf, et j'avais besoin d'y ajouter un nombre variable de PDF.

J'avais donc déjà un objet et une page fpdf configurés (http://www.fpdf.org/) Et j'ai utilisé fpdi pour importer les fichiers (http://www.setasign.de/products/pdf-php-solutions/fpdi/) FDPI est ajouté en étendant la classe PDF :

class PDF extends FPDI
{

} 

    $pdffile = "Filename.pdf";
    $pagecount = $pdf->setSourceFile($pdffile);  
    for($i=0; $i<$pagecount; $i++){
        $pdf->AddPage();  
        $tplidx = $pdf->importPage($i+1, '/MediaBox');
        $pdf->useTemplate($tplidx, 10, 10, 200); 
    }

Cela transforme chaque pdf en une image à placer dans votre autre pdf. Il a très bien fonctionné pour ce dont j'avais besoin.

0 votes

Je n'arrive pas à comprendre votre code. Pouvez-vous m'expliquer un peu plus en détail ? Je n'ai pas non plus trouvé les fonctions "setSourceFile" et "importPage" dans le manuel de fpdf.

0 votes

Je suis revenu en arrière et j'ai examiné ma solution un peu plus en détail. J'espère que cela vous sera plus utile. J'avais complètement oublié la partie fdpi ce matin quand j'ai écrit ceci, c'est une petite partie d'un générateur de PDF assez compliqué que j'ai écrit.

9 votes

@Christa Attention, FPDI n'analyse que certains fichiers PDF. Je suis confronté à un problème où FPDI n'analyse pas les fichiers PDF au-dessus de la version 1.4 et FPDI me fait acheter leur analyseur pour gérer > v1.4... yar....

12voto

Svetoslav Genov Points 31
$cmd = "gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=".$new." ".implode(" ", $files);
shell_exec($cmd);

Une version simplifiée de la réponse de Chauhan

0 votes

Cela a bien fonctionné pour moi sur le serveur dédié Centos de Hostgator, donc ghostscript doit déjà être installé.

0 votes

Il devrait être marqué comme une réponse correcte aussi, parce que c'était tellement FACILE. Des heures à se battre avec FPDF et FPDI qui ne se chargeaient pas correctement. Vous m'avez sauvé la vie. Il suffit d'installer "imagemagick" (sur debian/ubuntu : apt install imagemagick) sur le serveur et c'est bon. Merci !

9voto

myokyawhtun Points 61

Les codes utilisés dans PDFMerger sont obsolètes dans la version PHP5. J'ai bifurqué et corrigé les codes pour qu'ils fonctionnent avec PHP 5. Vous pouvez les récupérer sur mon compte github. https://github.com/myokyawhtun/PDFMerger

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X