Générer des PDF personnalisés / Publipostage / Widget Markdown

Je rajoute ma pierre à l’édifice pour ceux qui passeraient par là si vous cherchez à récupérer de la donnée depuis un tableau récapitulatif / summary table et modifier le html dynamiquement en fonction du nombre de ligne pour avoir des formats adaptatifs (en l’occurence ici un format de tableau), voici un exemple fonctionnel pour une fiche annuaire (toujours utile en collectivité pour savoir qui contacter)

import datetime
import numbers

# 0. Récupérer variable de la mairie
Nom_Commune = $Nom_commune
CTM = Cordonnees_Mairie.lookupOne(Nom_Commune=$Nom_commune).CTM
Adresse_Postale = Cordonnees_Mairie.lookupOne(Nom_Commune=$Nom_commune).Adresse_Mairie
Telephone_mairie = Cordonnees_Mairie.lookupOne(Nom_Commune=$Nom_commune).Telephone_Mairie
Adresse_mail = Cordonnees_Mairie.lookupOne(Nom_Commune=$Nom_commune).Mail_Maire
Site_web = Cordonnees_Mairie.lookupOne(Nom_Commune=$Nom_commune).Site_internet_Mairie
Maire = Cordonnees_Mairie.lookupOne(Nom_Commune=$Nom_commune).Maire_et_mandats
DGS = Cordonnees_Mairie.lookupOne(Nom_Commune=$Nom_commune).Mail

# 1. Connaître le nombre de lignes 
nb_lignes = rec.count

# 2. Récupère toutes les lignes du groupe
fonctions = [lignes.Fonction for lignes in $group]
prenoms_noms = [lignes.Prenom_Nom for lignes in $group]
telephone = [lignes.Telephone for lignes in $group]
mail = [lignes.Mail for lignes in $group]

# Générer les lignes du tableau HTML
lignes_html = ""
for i in range(len(fonctions)):
    lignes_html += "<tr>"
    lignes_html += "<td style='border: 1px solid #ddd; padding: 8px; font-size: 14px;'>" + str(fonctions[i]) + "</td>"
    lignes_html += "<td style='border: 1px solid #ddd; padding: 8px; font-size: 14px;'>" + str(prenoms_noms[i]) + "</td>"
    lignes_html += "<td style='border: 1px solid #ddd; padding: 8px; font-size: 14px;'>" + str(telephone[i]) + "</td>"
    lignes_html += "<td style='border: 1px solid #ddd; padding: 8px; font-size: 14px;'>" + str(mail[i]) + "</td>"
    lignes_html += "</tr>"

# Template HTML utilisant des quotes simples
template_base = "<div style='font-family: Arial, sans-serif; padding: 20px; max-width: 800px;'>"
template_base += "<div style='display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 30px;'>"
template_base += "<div>"
template_base += "<h2 style='margin: 0 0 10px 0; font-size: 20px; color: #333;'>Fiche annuaire élus - " + str(Nom_Commune) + "</h2>"
template_base += "<p style='margin: 0; font-size: 14px; color: #666;'>" + str(CTM) + "</p>"
template_base += "</div>"
template_base += "<div style='display: flex; align-items: center;'>"
template_base += "</div>"
template_base += "<img src='https://upload.wikimedia.org/wikipedia/fr/b/b8/Logo_M%C3%A9tropole_Lyon_-_2022.svg' style='height: 80px; width: auto;' />"
template_base += "</div>"
template_base += "</div>"

# Tableau d'informations de la mairie
template_base += "<table style='border-collapse: collapse; width: 100%; margin-bottom: 20px; font-size: 14px;'>"
template_base += "<tr><td style='border: 1px solid #333; padding: 8px; font-weight: bold; background-color: #f0f0f0; width: 25%;'>Adresse postale :</td><td style='border: 1px solid #333; padding: 8px;'>" + str(Adresse_Postale) + "</td></tr>"
template_base += "<tr><td style='border: 1px solid #333; padding: 8px; font-weight: bold; background-color: #f0f0f0;'>Téléphone mairie :</td><td style='border: 1px solid #333; padding: 8px;'>" + str(Telephone_mairie) + "</td></tr>"
template_base += "<tr><td style='border: 1px solid #333; padding: 8px; font-weight: bold; background-color: #f0f0f0;'>Adresse mail :</td><td style='border: 1px solid #333; padding: 8px;'>" + str(Adresse_mail) + "</td></tr>"
template_base += "<tr><td style='border: 1px solid #333; padding: 8px; font-weight: bold; background-color: #f0f0f0;'>Site web :</td><td style='border: 1px solid #333; padding: 8px;'>" + str(Site_web) + "</td></tr>"
template_base += "<tr><td style='border: 1px solid #333; padding: 8px; font-weight: bold; background-color: #f0f0f0;'>Maire :</td><td style='border: 1px solid #333; padding: 8px;'>" + str(Maire) + "</td></tr>"
template_base += "<tr><td style='border: 1px solid #333; padding: 8px; font-weight: bold; background-color: #f0f0f0;'>DGS :</td><td style='border: 1px solid #333; padding: 8px;'>" + str(DGS) + "</td></tr>"
template_base += "</table>"

# Tableau des élus
template_base += "<table style='border-collapse: collapse; width: 100%; margin: 20px 0; font-size: 14px;'>"
template_base += "<thead>"
template_base += "<tr style='background-color: #f8f9fa;'>"
template_base += "<th style='border: 1px solid #ddd; padding: 12px; text-align: left; font-weight: bold; font-size: 14px;'>Fonction</th>"
template_base += "<th style='border: 1px solid #ddd; padding: 12px; text-align: left; font-weight: bold; font-size: 14px;'>Prénom Nom</th>"
template_base += "<th style='border: 1px solid #ddd; padding: 12px; text-align: left; font-weight: bold; font-size: 14px;'>Téléphone</th>"
template_base += "<th style='border: 1px solid #ddd; padding: 12px; text-align: left; font-weight: bold; font-size: 14px;'>Mail</th>"
template_base += "</tr>"
template_base += "</thead>"
template_base += "<tbody>" + lignes_html + "</tbody>"
template_base += "</table>"
template_base += "</div>"

# Retourner le résultat
resultat_final = template_base
return resultat_final

2 « J'aime »