7
votes

Génération PDF basée sur le modèle en vrac en PHP à l'aide de PDFTK

Je fais une génération en vrac de fichiers PDF en fonction des modèles et j'ai rencontré des problèmes de grandes performances assez rapidement. Mon scénario actuel est le suivant:

  1. Obtenir des données à remplir à partir de DB
  2. Créez FDF en fonction de la ligne de données unique et du formulaire PDF
  3. écriture .fdf fichier sur disque
  4. Fusionner le PDF avec FDF à l'aide de PDFTK (Fill_Form avec commande aplu)
  5. Continuez à itération sur des lignes jusqu'à ce que tout .pdf est généré
  6. Tous les fichiers générés sont fusionnés ensemble à la fin et le PDF unique est donné au client

    J'utilise passthru pour donner la sortie brute au client (enregistre le fichier d'écriture de temps), mais il s'agit simplement d'une faible amélioration de la performance. Le temps de fonctionnement total est d'environ 50 secondes pour 200 enregistrements et je voudrais descendre à au moins 10 secondes d'une manière ou d'une autre.

    Le scénario idéal utiliserait tous ces PDF en mémoire et n'écrivez pas à tous l'unique d'entre eux pour séparer le fichier, mais la sortie serait alors impossible à faire car je ne peux pas passer ce type de données à un outil externe comme PDFTK. Une autre idée était de générer un gros fichier .fdf avec toutes ces lignes, mais on dirait que cela n'est pas autorisé.

    Est-ce que je manque quelque chose de très trivial ici?

    Je suis merci pour tout conseil.

    ps. Je sais que je pourrais utiliser une bonne bibliothèque comme Pdffibib, mais je ne considère que des bibliothèques autorisées ouvertes maintenant.

    EDIT:

    Je suis prêt à déterminer la syntaxe pour créer un fichier .fdf avec plusieurs pages à l'aide du même PDF en tant que modèle, passé quelques heures et n'a pas pu trouver de bonne documentation.


3 commentaires

Pouvez-vous utiliser un outil de profilage comme xdebug avec Webgrind et voir quelle chose prend le temps (et vous pouvez ensuite résoudre cela), je suis tombé dans la même situation quelques jours en arrière, utilisait un système de file d'attente open source qui prenait du temps à mon cas. J'utilisais Dompdf, qui est à nouveau une solution open source.


J'ai fait le profilage et la principale chose qui prend beaucoup de temps consiste à écrire des PDF séparés encore et encore.


Pourquoi ne pas simplement exécuter 6 ou 7 conversions PDFTK en parallèle qui devraient prendre votre temps total sur votre 22 secondes.


3 Réponses :


0
votes

Essayez une autre bibliothèque différente complexe comme FPDF ( http://www.fpdf.org/ ) < / p>

Je trouve ça assez bon et lite.

Trouvez toujours des bibliothèques petites et ne faites que ce que vous avez besoin de faire.

Plus la bibliothèque la plus grande est la plus grande que les ressources consommées.


2 commentaires

Oui, j'ai vu et utilisé ces bibliothèques (FPDF, TCPDF, DOMPDF), mais ils ne font pas ce que je dois. Je dois générer un grand PDF basé sur un modèle PDF et le remplir avec des données. Aucune de ces bibliothèques ne le fait. Ils sont bons pour créer du PDF propre à partir de zéro, mais pas pour modèles.


Ensuite, vous devriez envisager de les générer un par un dans différents appels PHP pour que la mémoire soit effacée après chaque génération. Assurez-vous même lorsque vous générez que vous nettoyez les grandes variables. Peut-être même une solution non PHP.



0
votes

Cela n'aidera pas votre problème de plusieurs pages, mais je remarque que PDFTK accepte le caractère - pour signifier "lire à partir de l'entrée standard".

Vous pourrez peut-être envoyer le .fdf au processus PDFTK via STDIN, afin d'éviter de devoir les écrire sur le disque.


0 commentaires

1
votes

Après avoir été confrontés au même problème pendant une longue période (je voulais générer mes PDF à base de latex), j'ai finalement décidé de passer à une autre technique brute mais efficace:

Je génère mes pdfs en deux étapes: je génère d'abord HTML avec un moteur de modèle comme Twig ou Smarty. Deuxièmement, j'utilise MPDF pour générer des PDF en dehors de celui-ci. J'ai essayé de nombreux autres frameworks HTML2PDF et avons fini par utiliser MPDF, il est très mature et est développé depuis longtemps (mises à jour fréquentes, fonctionnalités riches). La prestation utilisant cette technique: vous pouvez utiliser CSS pour concevoir vos documents (MPDF entièrement sécurisée CSS) - qui se présente avec la prestation CSS (http://www.csszengarden.com) et générer des tables dynamiques très faciles.

MPDF analyse les tables HTML et recherche l'élément Theader, Tfooter et le met sur chaque page si vos tables sont plus grandes que la taille d'une page. De plus, vous avez la possibilité de définir des éléments d'en-tête de page et de page de page avec des entités dynamiques telles que la page nr et ainsi de suite.

Je sais que l'utilisation de ce détour semble être une solution de contournement, mais pour être honnête, aucun latex, pdf, quel que soit le moteur aussi fort et simple que HTML!


0 commentaires