Bonjour à tous
Le problème est le suivant :
Actuellement j'ai un document qui comprend plusieurs chapitres. Ces chapitres sont des fichier PDF de quelques pages.
Actuellement, pour fournir aux lecteurs un fichier PDF unique, on est obligé de fusionner ces fichiers PDF par un outil externe et de recharger le document entier sur le site, et ce chqaue fois qu'on apporte une modification à un des chapitres.
Ma question :
existe-t-il un moyen d'effectuer cette opération dynamiquement sur le serveur ?
Cela permettrait un fichier pour chaque chapitre et de n'apporter la modification qu'au seul chapitre concerné.
Je doute que ce soit possible, mais qui sait ? Smiley smile
Salut,

c'est quoi comme serveur ? Si c'est un linux sur lequel tu as la main tu dois pouvoir utiliser la commande pdfunite (je ne sais pas si il y a des trucs plus récent/mieux Smiley sweatdrop ) pour regrouper tous tes pdfs ensemble Smiley smile
Merci de ta réponse, mais je n'ai pas la main sur le serveur.
Je crains devoir refaire le PDF complet à chaque modification d'une virgule dans l'un des documents, c'est justement ce que j'aurais voulu éviter de faire !
J'ai l'impression que c'est une commande linux "de base", c'est peut être possible qu'un simple script lance la commande en question sur le serveur sans avoir besoin de droits en plus.

Et les petits pdf ils sont modifiés où ? Directement sur le serveur ?
Parce qu'on pourrait imaginer faire dans l'autre sens sinon, tu fais le script sur ta machine et il récupère les petits pdf sur le serveur en sftp , fait le merge sur ton poste puis renvoie le gros pdf en sftp. (Ce n'est pas terrible mais ça permettrait d'automatiser 90% du process)


Edit : Pour tester rapidement si tu peux faire un script shell sur le serveur tu mets ça dans un fichier ( merge_pdf.sh ) :

#!/bin/bash
pdfunite *.pdf out/out.pdf

Tu mets 2 pdf dans le même dossier que le script et tu crées un dossier vide "out" puis tu lances le script et tu vois si cela crée un fichier dans le dossier out ou pas
Modifié par Mathieuu (07 Sep 2023 - 09:42)
Merci de ta réponse
Ce que j’essaie de faire, c’est de trouver un mécanisme du genre "include" de façon à ne pas avoir à faire la fusion des documents PDF moi-même, ce que je fais actuellement. Que ce soit sur mon PC ou sur le site, ça ne change pas grand chose.
Ah ok dans mon idée c'était plutot un genre de cron qui allait vérifier régulièrement si les petits pdf avaient changés et si oui régénérer le gros pdf.

On doit pouvoir imaginer une autre solution coté php : au moment de lancer le téléchargement du gros pdf, cela passe par une page php qui vérifie si les petits pdf ont changé (via un hash stocké en bdd ?) et si oui hop il se charge de recréer le gros pdf à partir des petits.
Mais il faut voir si c'est acceptable en terme de durée/attente de régénérer le gros pdf avant de le télécharger.
Modifié par Mathieuu (07 Sep 2023 - 14:00)
Hum non ça a priori ça va te permettre d'afficher directement le pdf au lieu de le faire télécharger mais pas de rassembler les pdf ensembles.
Il faudra toujours l'autre étape pour rassembler les pdfs avant (ou afficher tous les petits pdfs mais si il y en a beaucoup ça sera chiant pour celui qui veut télécharger le gros pdf de devoir télécharger les petits pdf)
J'ai trouvé une une librairie php qui m'a l'air de fonctionner : https://github.com/myokyawhtun/PDFMerger
J'ai eu des petits bugs au départ en adaptant le code d'exemple, en fait il faut préciser le chemin absolu (pas relatif comme leur exemple..), du coup j'ai utilisé __DIR__ pour compléter.

<?php
require_once ('PDFMerger/PDFMerger.php');
use PDFMerger\PDFMerger;
$pdf = new PDFMerger;

$pdf->addPDF(__DIR__ .'/1.pdf', 'all');
$pdf->addPDF(__DIR__ .'/2.pdf', 'all');

$pdf->merge('file', __DIR__ .'/out/out.pdf'); // generate the file
$pdf->merge('download', __DIR__ .'/out/out.pdf'); // force download
?>


J'avais aussi commencé à regarder pour faire des hashs des petits fichiers pour ne pas avoir à faire le merge de tous les petits fichiers à chaque fois mais j'ai eu la flemme de crée une bdd juste pour ça Smiley sweatdrop

echo hash_file('md5', '1.pdf');
echo "<br>";
echo hash_file('md5', '2.pdf');