SPIPdf et ChartJS

Je dois générer des PDFs avec des graphiques. J’utilise Spipdf et ChartJS.

Les graphiques apparaissent bien dans le HTML, mais plus dans le PDF.
J’ai essayé de passer les éléments canvas en balise img avec la fonction toBase64Image() (de ChartJS) mais toujours rien.

Il y aurait-il une astuce pour faire fonctionner les deux ensemble où est-ce peine perdu ?

Spipdf 2.0.1
ChartJS 2.1.1
SPIP 4.1.2 avec PHP 8

Hello,

pour Spippdf tu peux choisir plusieurs lib, mais je ne connais pas les diffèrences, en revanche, la librairie dompdf semble supporter les canvas et est disponible en plugins spip.

https://contrib.spip.net/DOMPDF-generer-des-PDF-a-partir-de-vos-squelettes
https://github.com/dompdf/dompdf

Bon courage!

Le mer. 8 juin 2022 à 23:46, peetdu via Discuter de SPIP <noreply@discuter.spip.net> a écrit :

peetdu
Juin 8

Je dois générer des PDFs avec des graphiques. J’utilise Spipdf et ChartJS.

Les graphiques apparaissent bien dans le HTML, mais plus dans le PDF.
J’ai essayé de passer les éléments canvas en balise img avec la fonction toBase64Image() (de ChartJS) mais toujours rien.

Il y aurait-il une astuce pour faire fonctionner les deux ensemble où est-ce peine perdu ?

Spipdf 2.0.1
ChartJS 2.1.1
SPIP 4.1.2 avec PHP 8


Voir le sujet ou répondre à ce courriel pour répondre.

Pour vous désabonner de ces courriels, cliquez ici.

j’ai déjà rencontré le meme problème avec les SVG. la solution que j’avais trouvé, et qui fonctionne toujours c’est de transformer le SVG en png ou jpg en amont puis de l’appeler. pour ca, j’utilise cairosvg. Mais cela demande d’avoir accès au serveur pour installer la lib. Dans ton cas, cela semble plus facile : http://www.java2s.com/example/javascript/chart.js/chartjs-to-update-and-exporting-chart-as-png.html
Bon courage ! et n’hésite pas à nous faire partager la solution que tu auras trouvée :wink:

un dev qui deteste les pdfs :rage:

Hello,

Merci pour votre aide.

J’ai continué à gratter sur la toile et voilà ce que je viens de trouver comme réponse sur stackoverflow :

PHP *PDF libraries (tcpdf, fpdf, mpdf etc…) cannot run javascript code, because that would require javascript interpreter and browser rendering capabilities, or if it supports javascript it will not run it the way you are used to using it in client side programming. Along with that, css and markup interpretation is also very poor.

(Voir https://stackoverflow.com/questions/13845475/mpdf-ignoring-javascript)

Du coup deux solutions se profilent :

  1. Prendre le processus à l’envers : commencer par générer les graphiques avec ChartJS, les sauvegarder au format PNG, puis faire jouer Mpdf en appelant dans le squelette les images des graphiques déjà tout prêtes. Solution un peu lourde, mais jouable je pense. Sachant que je dois générer quelques centaines de pdfs quand même.
  2. Utiliser un navigateur Headless, genre wkhtmltopdf ou Headless Chrome et Puppeteer

M’étant déjà un peu investit dans Mdpf et ses outils de rendu, je pense essayer la première solution.

Mais si vous voyez d’autres solutions, je suis preneur bien sûr.

Pour info : j’ai aussi trouvé cet article How To Create A PDF From Your Web Application
Vraiment très intéressant !

Le 09/06/2022 à 11:15, peetdu via Discuter de SPIP a écrit :

  1. Utiliser un navigateur Headless, genre wkhtmltopdf https://wkhtmltopdf.org/ ou Headless Chrome et Puppeteer https://developers.google.com/web/tools/puppeteer/get-started

M’étant déjà un peu investit dans Mdpf et ses outils de rendu, je pense essayer la première solution.

C’est pour ça qu’il fallait/faudrait plutôt s’investir dans le plugin pdf_version qui génère les PDF à partir de HTML/CSS interprété (par défaut avec webkit mais j’avais ouvert un ticket pour en permettre d’autres comme Prince ou Weasy par ex en plus). :slight_smile:

C’est déjà codé, ya rien à faire, à part faire ce qu’on sait bien faire : du HTML et du CSS dans des squelettes SPIP on ne peut plus classiques.


RastaPopoulos

Wow ! Encore une belle pépite de SPIP.
Intéressant en effet. Et « peut être » plus adapté à mes besoins.

Toutefois, j’ai vu la page de config du plugin et déjà je sens que c’est peut être un p’tit fort pour moi.
Le temps de trouver un casque de spéléo et je me lance…:wink:

J’arrive à faire fonctionner le plugin « pdf_version ». Merci beaucoup à Rastapopoulos pour son aide.

Toutefois, ce plugin ne résout pas le problème. Le PDF généré ne contient toujours pas le graphique.

Note à ce propos de ce plugin : j’ai commencé un début de documentation ici : https://contrib.spip.net/pdf_version-5403

A propos de faire marcher wkhtmltopdf et ChartJS : https://stackoverflow.com/questions/42561036/wkhtmltopdf-does-not-render-chart-js-2-5-0-graph (pas encore testé)

Hello

J’ai ajouté un paragraphe sur les options.