THELIA Forum

Welcome to the THELIA support and discusssion forum

Offline

#1 Generer pdf pour produit

(22-01-2022 09:58:08)


Bonjour,
j'aimerais générer un pdf pour chacune de mes fiches produits.
J'essaie donc avec https://github.com/roadster31/PdfGenerator/

Par exemple j'aimerais mettre quelque chose comme <a href="https://www.yourshop.tld/viewpdf/pdf/{$product_id}"> ...
dans chacun de mes produit.

Seulement, je n'arrive pas à récupérer l'id du produit concerné dans le template pdf.
Est ce qu'il y a une façon de faire spéciale ?

Merci par avance

Offline

#2 Re: Generer pdf pour produit

(30-01-2022 17:08:45)


Bon j'ai réussi, en googlant, c'est peut être un peu sale, et il y a peut être une meilleure manière de faire. Dans ce cas n'hésitez pas à me le dire.

Par contre, dès que j'essaie de mettre le logo ou l'image du produit, je recois :

TheliaProcessException in GeneratorController.php line 69:

Voila ce que j'ai mis dans mon template :

{assign var="dirs" value="/"|explode:$smarty.server.REQUEST_URI}
{$dirs[$dirs|@count-1]}


    {loop type="product" name="my_product_loop" id="$ID" order="min_price"}
        {assign var="nomvar" value="{$ID}"}
        {if {$dirs[$dirs|@count-1]} == {$nomvar}} 
        {$URL} - {$TITLE} -- ({$REF})  {$DESCRIPTION nofilter} 
                   
        {loop type="imagepdf" name="imgpdf" product={$ID} width="560" height="445" resize_mode="borders" limit="1"}
        <img src="{$IMAGE_URL nofilter}" alt="{$TITLE}" class="img-responsive" itemprop="image" data-toggle="magnify">
        {/loop}
        {/if}
    {/loop}

J'ai bien essayé de googlé et de comprendre mais je ne vois pas quelle solution je peux apporter pour juste afficher une image dans mon pdf.

Last edited by vz777 (30-01-2022 17:10:02)

Offline

#3 Re: Generer pdf pour produit

(30-01-2022 23:22:00)


Passe l'ID produit comme un paramètre de l'URL :

https://www.yourshop.tld/viewpdf/pdf/{$ … roduct_id}

Et dans le template :

{$ID = $smarty.get.id}


OpenStudio Toulouse

Offline

#4 Re: Generer pdf pour produit

(06-02-2022 08:53:12)


Merci, cela fonctionne!

Bon en réecrivant la boucle image correctement, les images s'affichent, forcément ..
Des fois il faut juste faire une pause ..

J'ai aussi du mettre allow url fopen a on, ça me plait pas des masses, mais bon, puisqu'il faut.

Offline

#5 Re: Generer pdf pour produit

(10-11-2022 14:26:15)


Je profite de mon fil pour savoir si il est possible de télécharger tous les pdf générés par le module via une commande ou autre ?

Offline

#6 Re: Generer pdf pour produit

(17-11-2022 09:22:15)


Tous les veux sous la forme d'un seul PDF ou d'une collection de PDF dans une archive (zip, tar, ...) ?


OpenStudio Toulouse

Offline

#7 Re: Generer pdf pour produit

(18-11-2022 11:40:20)


Les deux mon capitaine ! wink

Je peux m'adapter, disons que le plus simple serait sans doute une collection de pdf dans une archive,
après je pourrais agencer le tout comme je souhaite.

A moins qu'il soit possible de les ranger (alphabetique serait très bien) dès le départ.

L'idée c'est d'en faire un catalogue

Offline

#8 Re: Generer pdf pour produit

(19-11-2022 17:18:23)


Tu peux écrire un module qui va te générer les PDF dans un répertoire du serveur, puis utiliser ghostscript pour concaténer les PDF en un seul, cf. https://gist.github.com/brenopolanski/2 … 7e865b60f5

Tu peux aussi essayer de fabriquer un template qui va générer tout ton catalogue (genre {loop type="product" name="tout"} ... {/loop}, ou en parcourant les catégories), mais si tu as beaucoup d'articles dans ton catalogue, ça peut risquer de prendre du temps, ou de consommer toute la mémoire.

Tu peux encore bricoler avec la commande wget, pour télécharger tous le PDF de chaque fiche produit sur ton ordi et faire le PDF global à la main, ou avec ghostscript. Il y a des distribs de ces outils pour Windows si nécessaire.


OpenStudio Toulouse

Offline

#9 Re: Generer pdf pour produit

(23-11-2022 12:33:50)


Je te remerçie,
je m'en suis sorti avec une boucle,
j'imagine que de cette manière je n'ai aucune chance de générer qu'un seul fichier ?

Si la réponse est oui ce n'est pas un problème, je me débrouillerai a les assembler en local.

Offline


Je ne sais pas te répondre, parce que je ne sais pas ce que tu as codé exactement.


OpenStudio Toulouse

Offline


En fait, depuis ce message je me suis rendu compte que les pdf ne se génèrent plus correctement,
Je reviens donc en arrière ...
j'ai donc essayé de débuger le code du template et l'ai réduit au minimum.

{$ID = $smarty.get.id} {$ID}

    {loop type="product" name="my_product_loop" id="{$ID}" order="min_price"}

            <h2>{$TITLE} - {$CHAPO nofilter}</h2>

            {loop type="image" name="imgpdf" product={$ID} width="560" height="445" resize_mode="borders" limit="1"}
            <img src="{$IMAGE_URL nofilter}">      
            {/loop}

    {/loop}

L'affichage d'un pdf se fait correctement tant qu'on ne cherche pas à afficher une image.

Dans les logs, je reçois :

124: ERROR [GeneratorController.php:renderPdfTemplate()] {64} 2022-11-25 12:33:13:error during generating PDF document plant-card.html with message "Unable to get the size of the image []"
125: ERROR [GeneratorController.php:renderPdfTemplate()] {64} 2022-11-25 11:47:40:error during generating PDF document plant-card.html with message "Unable to get the size of the image [https://www.en.grainedevie.net/cache/images/product/eb1b0b46dcc4868d2bd0e25e881ca278-buddleja-officinalis_resize.jpg-1263.jpg]"
126: ERROR [ErrorListener.php:logException()] {111} 2022-11-25 11:47:40:Uncaught exceptionWe're sorry, this PDF document 509 is not available at the moment.
Stack Trace: #0 /home/../../local/modules/PdfGenerator/Controller/GeneratorController.php(29): PdfGenerator\Controller\GeneratorController->renderPdfTemplate('plant-card', '509', false)
#1 /home/../../core/vendor/symfony/http-kernel/HttpKernel.php(135): PdfGenerator\Controller\GeneratorController->downloadPdf('plant-card', '509')
#2 /home/../../core/vendor/symfony/http-kernel/HttpKernel.php(57): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Thelia\Core\HttpFoundation\Request), 1)
#3 /home/../../core/lib/Thelia/Core/TheliaHttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Thelia\Core\HttpFoundation\Request), 1, true)
#4 /home/../../local/modules/BackOfficePath/Stack/BackOfficePathMiddleware.php(106): Thelia\Core\TheliaHttpKernel->handle(Object(Thelia\Core\HttpFoundation\Request), 1, true)
#5 /home/../../core/lib/Thelia/Core/Stack/ParamInitMiddleware.php(87): BackOfficePath\Stack\BackOfficePathMiddleware->handle(Object(Thelia\Core\HttpFoundation\Request), 1, true)
#6 /home/../../core/lib/Thelia/Core/Stack/SessionMiddleware.php(80): Thelia\Core\Stack\ParamInitMiddleware->handle(Object(Thelia\Core\HttpFoundation\Request), 1, true)
#7 /home/../../core/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Thelia\Core\Stack\SessionMiddleware->handle(Object(Thelia\Core\HttpFoundation\Request), 1, true)
#8 /home/../../core/vendor/symfony/http-kernel/Kernel.php(183): Stack\StackedHttpKernel->handle(Object(Thelia\Core\HttpFoundation\Request), 1, true)
#9 /home/../../web/index_dev.php(46): Symfony\Component\HttpKernel\Kernel->handle(Object(Thelia\Core\HttpFoundation\Request))
#10 {main}

Last edited by vz777 (Yesterday 09:32:49)