Sur Windfit, on affiche plein de jolis graphes générés côté client avec d3js. Maintenant, on souhaite générer des rapports mensuels PDF pour les clients. Rapports qui contiendraient des jolies graphes. Sauf que les rapports seraient générés côtés backend (Python/Django) et que je n'ai absolument pas envie de re-implémenter les graphes dans une techno différentes. Du coup je cherche une solution pour réutiliser facilement nos super graphes JS côté backend.
Ben avec JSPyBridge, j'ai réussi à faire un PoC presque pas dégueulasse :D
Ma vue Django :
fromdjango.shortcutsimportrenderimportjavascriptimportrandomdefscatter_svg_view(request):# Generate some pointspoints=[{"x":random.gauss(0.5,0.3),"y":random.gauss(0.5,0.2)}for_inrange(800)]# Da JS partjs="points = "+str(points)+"\n"js+="""\const jsdom = await import("jsdom")const d3 = await import("d3")// Create the SVG nodeconst dom = new jsdom.JSDOM(`<svg width="800" height="600"></svg>`);let svg = d3.select(dom.window.document).select("svg")svg.attr("viewBox", [0, 0, 800, 600])// Add debug backgroundsvg.append("rect",) .attr("width", 800) .attr("height", 600) .attr("fill", "magenta")// Draw the pointssvg.selectAll(".cf-point") .data(points) .join(enter => enter.append("circle"), update => update, exit => exit.remove()) .attr("cx", p => p.x * 800) .attr("cy", p => p.y * 600) .attr("r", 4) .attr("fill", "green")return svg.node().outerHTML """# Generate the SVG by executing the JSsvg=javascript.eval_js(js)# Render the final page returnrender(request,"chartpdf/scatter.html",{"svg":svg})
C'est pas vraiment un rendu côté backend. Tu fais données vers svg côté backend et tu laisse au navigateur le soin de générer des pixels. À mon humble avis tu devrais passer par un truc genre puppeteer pour contrôler un navigateur et lui faire prendre une capture d'écran si une version raster des graphiques est acceptable. Si c'est pas le cas tu as pdfkit et svg-to-pdfkit qui marchent bien pour générer des pdf à partir de svg (et donc entièrement en js).
# Générer des rapports PDF - la version over-engineered
Posté par jtremesay (site web personnel) . Évalué à 4.
Sur Windfit, on affiche plein de jolis graphes générés côté client avec d3js. Maintenant, on souhaite générer des rapports mensuels PDF pour les clients. Rapports qui contiendraient des jolies graphes. Sauf que les rapports seraient générés côtés backend (Python/Django) et que je n'ai absolument pas envie de re-implémenter les graphes dans une techno différentes. Du coup je cherche une solution pour réutiliser facilement nos super graphes JS côté backend.
Ben avec JSPyBridge, j'ai réussi à faire un PoC presque pas dégueulasse :D
Ma vue Django :
Le template
Et pouf, j'ai une page contenant mon SVG généré par D3 mais côté backend.
Et on me signale dans l'oreillette que je ferais mieux de me tourner directement vers nodejs pour ça pultôt que de passer par JSPyBridge.
[^] # Re: Générer des rapports PDF - la version over-engineered
Posté par barmic 🦦 . Évalué à 3.
C'est pas vraiment un rendu côté backend. Tu fais données vers svg côté backend et tu laisse au navigateur le soin de générer des pixels. À mon humble avis tu devrais passer par un truc genre puppeteer pour contrôler un navigateur et lui faire prendre une capture d'écran si une version raster des graphiques est acceptable. Si c'est pas le cas tu as pdfkit et svg-to-pdfkit qui marchent bien pour générer des pdf à partir de svg (et donc entièrement en js).
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Générer des rapports PDF - la version over-engineered
Posté par jtremesay (site web personnel) . Évalué à 5.
Ça tombe bien, j’ai parlé de génération et non de rendu.
# fonctionnement
Posté par flan (site web personnel) . Évalué à 3.
Comment cela fonctionne-t-il ?
Est-ce un moteur JS en python ?
[^] # Re: fonctionnement
Posté par barmic 🦦 . Évalué à 3.
Première ligne du readme
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Je dirais même plus
Posté par Glandos . Évalué à 3.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.