LOTemplate nouvelle version 2.2

Posté par  (site web personnel, Mastodon) . Édité par Benoît Sibaud et Ysabeau 🧶. Modéré par Ysabeau 🧶. Licence CC By‑SA.
18
24
déc.
2025
Technologie

LOTemplate est un générateur de documents sous licence AGPL v3 qui permet de générer des documents (ODT, DOCX, ODS, XLSX, PDF, …) à partir d'un document modèle avec des variables et d'un fichier json pour les données.
Logo LOTemplate

Comment faire faire à LibreOffice (headless, sans interface graphique) ce que l’on ne peut pas faire avec LibreOffice (GUI, avec interface graphique) ?

Et comme c’est Noël nous avons ajouté un meilleur système de log en cadeau.

Dans la version 2.2 de LOTemplate, nous avons ajouté la possibilité d’exporter des PDF en y ajoutant un filigrane de son choix avec comme paramètres :

  • Texte de filigrane
  • Couleur de filigrane
  • Police
  • Taille de police
  • Le nombre de répétition sur la page

Pour cela, nous utilisons l’API uno de LibreOffice, qui expose plus de paramètres que l’interface graphique de LibreOffice. En effet, si l’on cherche a faire cela dans l’interface graphique de LibreOffice, on ne peut choisir que le texte. Le filigrane apparaît ensuite en vert et à la verticale.

Options PDF

Exemple d’un export moche

Mais en cherchant dans l’aide de LibreOffice, on trouve sur la page d’aide de l’outil d’export PDF en ligne de commande qu’il existe les options suivantes :

  • Watermark
  • WatermarkColor
  • WatermarkFontHeight
  • WatermarkRotateAngle
  • WatermarkFontName
  • TiledWatermark

C’est donc possible, LibreOffice peut le faire mais uniquement avec l’API uno. Pour faire court, rien ne l’indique dans la doc de l’API uno. Toutefois on retrouve cette page (EN) en date de décembre 2022 qui explique l’amélioration qui permet cela.

En suivant un des liens de la page on arrive à cette page (EN).

Et là on peut lire : Fix the problem by only adding the option at an UNO API level for now, this relaxes the hardcoded color without cluttering the UI.

Super, c’est possible !

Ce ne sont que des propriétés de l’export PDF. La solution a donc été simple à implémenter, avec un peu de recherche.

En résumé, savoir chercher sur internet et lire la doc reste encore utile !

Aller plus loin

  • # joli exemple

    Posté par  (site web personnel) . Évalué à 2 (+0/-0).

    pour https://github.com/Probesys/lotemplate/?tab=readme-ov-file#watermark

    autant ajouter un exemple joli et réaliste, genre Draft en diagonale en gris clair (par exemple, respectueux des daltoniens :p)

    il n'y a pas de valeur par défaut pour la taille de la police ? ça s'adapte à la taille de la page et la longueur du texte ?

    • [^] # Re: joli exemple

      Posté par  . Évalué à 1 (+0/-0).

      Oui cela s'adapte à la taille de la page et la longueur du texte sauf si on définit "WatermarkFontHeight"

  • # Implémenté dans Odoo

    Posté par  (site web personnel) . Évalué à 6 (+4/-0).

    Merci de nous avoir fait découvrir ces super options de Libreoffice qui ne sont pas accessibles via l'interface utilisateur !

    Cela m'a motivé pour implémenter ces options dans le module Odoo report_py3o, qui est le module qui permet de générer des rapports Odoo (devis, facture, commande, etc…) avec LibreOffice. C'est implémenté dans cette pull request: https://github.com/OCA/reporting-engine/pull/1073 (le code est dans le module report_py3o_fusion_server, qui est le module qui contient les options d'export PDF personnalisables).

    Titre de l'image

  • # impression ?

    Posté par  . Évalué à 1 (+1/-0).

    Bonjour,
    mon cas d'usage :
    - recevoir le json via mqtt (qui contient les variables, chemin du modèle, l'imprimante et la quantité)
    - envoyé les informations à LoTemplate
    - utilisé une commande libreoffice pour lancer l'impression en headless
    - supprimer le fichier générer par LoTemplate
    j'ai bon dans ma démarche ou il y a possibilité d'optimiser ?

Envoyer un commentaire

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.