Dans mon document, j’ai un champ de type « Texte » servant à recueillir des préconisations. Celles-ci sont mises en forme avec des passages à la ligne.
Quand j’affiche le pdf, toutes les indications se retrouvent les unes dernière les autres et ne sont pas facilement lisibles.
Dans mon code html, j’ai essayé de jouer avec la valeur « display » mais sans succès. J’ai même tenté le « Textarea » mais qui n’est pas pratique car il ne s’adapte pas à la longueur du texte (ou alors je n’ai pas réussi à le configurer).
Je me suis mal exprimé, pardon.
J’ai une table avec plusieurs colonnes de type texte. Dans ces colonnes sont stockées des phrases avec parfois plusieurs lignes par cellule.
J’ai suivi le tuto post" par Audezu Générer des PDF personnalisés / Publipostage / Widget Markdown
afin de pouvoir exporter une fiche au format PDF mettant en forme ces données.
Mais toutes les phrases d’une cellule (ce que j’ai appelé « champ ») se retrouvent les unes derrière les autres, alors que je souhaiterai qu’elles soient l’une en-dessous de l’autre, comme ce qui est visible dans les colonnes de la table.
Voilà la table (simplifiée pour plus de clartée): dans l’exemple créé sur cette table, je souhaiterai que la cellule « Indications » puisse être exportée dans le PDF telle qu’elle apparaît dans la vue « Fiche ».
Merci beaucoup! C’est génial!
Je n’aurai pas penser à aller vers la formule pour régler cette problématique.
Si je comprends bien le code ajouté, je peux reprendre et ajouter un autre « if isinstance… » en changeant la valeur de « key » si j’ai d’autres cellules qui doivent s’afficher de la même manière?
Bonjour YannP,
est ce que ça marche car j’ai exactement la même demande que toi, j’ai copié la formule en remplaçant après « key » la valeur de ma cellule à modifier mais ça ne fait rien. Est qu’il faut modifier autre choses dans le code ?
class Find_Data(dict):
def __missing__(self, key):
attr = getattr(rec, key)
if attr is None:
return "--"
if isinstance(attr, str) and key == "Indications":
return attr.replace("\r\n", "\n").replace("\n", "<br>")
return attr
template = Template_Retour_Saisine.lookupOne().Modele
return template.format_map(Find_Data())
Ensuite tu dois modifier la ligne « template = Template_Retour_Saisine.lookupOne().Modele » en remplaçant « Template_Retour_Saisine » par le nom de la table qui contient ton code HTML et « Modele » par le nom de la colonne correspondante.
Par exemple, si la table que tu utilises pour ton code s’appelle « TemplateAffichage » et la colonne « CodeHTML », tu aurais la formule:
« template = TemplateAffichage.lookupOne().CodeHTML »
Intégré dans le code précédent, tu aurais:
import datetime
class Find_Data(dict):
def __missing__(self, key):
attr = getattr(rec, key)
if attr is None:
return "--"
if isinstance(attr, datetime.date):
return attr.strftime('%d-%m-%Y')
if isinstance(attr, str) and key == "NomColonneàmodifier":
return attr.replace("\r\n", "\n").replace("\n", "<br>")
return attr
template = TemplateAffichage.lookupOne().CodeHTML
return template.format_map(Find_Data())