Salut salut

je reçois des array dans mon twig que je formate css+html.
ce "this->render" est envoyé à HTML2PDF. Jusque là tout fonctionne bien.

Le problème se siture quand j'ai un array dans un array.
Voici mon code twig qui fonctionne, testé et approuvé par chrome Smiley smile

{% for key,value in listData %}
                        {% if value is iterable %}
                            <li><span class="span-key-data">{{ key }}</span></li>
                            <ul class="sous-list-data">
                                {% for k,v in value %}
                                    <li><span class="span-key-data">{{ k }}</span> <span class="span-val-data">{{ v }}</span></li>
                                {% endfor %}
                            </ul>
                        {% else %}
                            <li><span class="span-key-data">{{ key }}</span> <span class="span-val-data">{{ value }}</span></li>
                        {% endif %}
{% endfor %}


Tout ceci fonctionne très bien MAIS ! et je dis bien MAIS! lorsque je passe le "render" a HTML2PDF j'ai une erreur sur {% if value is iterable %} et l'erreur me dit qu'il ne peut pas COMPTER un objet qui n'a pas de méthode COUNT.

pour rappel: quand j'affiche le rendu dans une navigateur ça fonctionne, c'est un array, il implemente a 8000% la method count (car c'est un array)... mais html2pdf me dit que non. alors je sais pas quoi faire, je suis bloqué.......

Si jamais qq1 à eu le même problème Smiley smile je l'en remercie de m'aider, et les autre aussi Smiley langue
Modifié par JENCAL (20 May 2019 - 18:00)
Salut Jencal,

Alors je n'ai absolument pas la réponse à ta question, mais pour avoir tester plusieurs générateurs de pdf, je te conseille fortement d'utiliser wkhtmltopdf via KnpSnappyBundle à la place de html2pdf.

Voila, désolé pour l'aide qui n'en est pas une ! Smiley biggol
Si ma suggestion t'intéresse, je peux te passer les infos pour l'intégrer proprement dans Symfony.
Tu dois avoir mal compris qqch. Il ne peut pas y avoir d'erreur twig dans HTML2PDF, soit ton rendu (qui a lieu bien avant) a des problèmes liés à twig, soit il y a un bug lié à HTML2PDF.

Sans voir l'appel on ne peut pas faire grand chose.
Sinon pour continuer sur la lancée de kustolovic:
Utilise {{ dump(value) }} à la place de ton code dans la boucle pour essayer de déterminer l'erreur.
Salut

Merci pour vos réponses

Alors j'ai la solutions...

J'ai pas pu essayé wkhtmltopdf car il faut que ce soit sur OVH, et wkhtmltopdf à besoin d'un binaire, compliqué pour rien dans mon cas...

Je confirme que HTML2PDF ne gère pas la fonction "ITERABLE" de twig. et non je n'ai pas mal compris la lib.

J'ai du coup pris MPDF qui embarque HTML2PFG ainsi que d'autre librairie et en fait un mixe bien plus complet. et du coup tout fonctionne sans que je touche à mon twig... seulement en faisant un new MPDF au lieu de new HTML2PDF. Du coup j'ai abandonné cette vieille lib de html2pdf.

Merci.
Raphi a écrit :
Sinon pour continuer sur la lancée de kustolovic:
Utilise {{ dump(value) }} à la place de ton code dans la boucle pour essayer de déterminer l'erreur.


Comme je disais, ce n'est pas une erreur, c'est juste que HTML2PDF ne prend pas en compte cette fonction nativ de twig qui est ITERABLE.
JENCAL a écrit :
Je confirme que HTML2PDF ne gère pas la fonction "ITERABLE" de twig. et non je n'ai pas mal compris la lib.

HTML2PDF ne peut pas mal gérer twig, car il ne gère pas du tout twig, Si il reçoit du twig, c'est sûr que ça va mal se passer. Il ne peut que mal gérer le HTML généré par twig & symfony.

Donc oui, tu as un problème de compréhension des librairies que tu utilises.
JENCAL a écrit :
J'ai pas pu essayé wkhtmltopdf car il faut que ce soit sur OVH, et wkhtmltopdf à besoin d'un binaire, compliqué pour rien dans mon cas...

J'ai eu la même réaction que toi lors de mes essais pour trouver une librairie intéressante, mais c'est parce que tu n'as pas la bonne conf pour l'installer.
L'avantage de wkhtml c'est qu'il s'agit d'un outil qui te fait un rendu basé sur du html/css avec un support beaucoup plus important de css que les autres. Ce qui est nettement plus simple à déboguer et ça laisse plus de latitude pour faire le rendu souhaité. Pas besoin d'apprendre à maîtriser les fonctions de la librairie ou les limitations du support css et ça s’intègre parfaitement à Symfony avec une vue twig.

Concernant le binaire, tu n'as pas besoin de toucher à la conf de ton serveur. Tu peux utiliser les binaires via composer:

ajoute dans ton fichier composer.json dans la partie "require":

        "h4cc/wkhtmltopdf-amd64": "0.12.4",
        "h4cc/wkhtmltoimage-amd64": "0.12.4",
        "knplabs/knp-snappy-bundle": "^1.6"


ajoute dans app/config.yml:
knp_snappy:
    pdf:
        enabled: true
        binary: %kernel.root_dir%/../vendor/h4cc/wkhtmltopdf-amd64/bin/wkhtmltopdf-amd64 --disable-smart-shrinking --lowquality --enable-external-links --enable-internal-links
        options: []
    image:
        enabled: true
        binary: %kernel.root_dir%/../vendor/h4cc/wkhtmltoimage-amd64/bin/wkhtmltoimage-amd64
        options: []


ajoute dans app/AppKernel.php dans la function registerBundles():
new Knp\Bundle\SnappyBundle\KnpSnappyBundle(),


Et pour l'utilisation, il suffit de suivre cette documentation.

Même si tu n'en as plus besoin, au moins tu aura la bonne configuration pour faire des tests, si un jour tu veux essayer cette librairie. Smiley smile
Modifié par Raphi (22 May 2019 - 11:42)
Meilleure solution
Merci Raphi ! Je garde cette manip au chaud.
je n'ai plus le temps de modifier la lib dorénavant...
Mais si je dois bosser sur une évo, où si je dois re-développer de la génération de PDF, je ressortirais tes explications !

@kustolovic

Oui HTML2PDF ne gère pas TWIG, compris. N'empêche que renderView qui est sensé me généré que du HTML ne fonctionne pas quand je l'envoie à la lib. il en ressort dans mon cas qu'HTML2PDF n'est pas adapté.