Python

Incontournables Pythonerie : Oh ho ho Géant Vert

Le Géant Vert en question est libreoffice ;-)

Ici un très simple billet pour vous montrer comment se faire un document OpenOffice depuis un script Python en 5 lignes :P

Le script va se composer comme suit :

  • Récupération des données à publier dans le document
  • Récupération du document OpenOffice sur lequel va reposer notre génération finale
  • « Fusion » des points 1 & 2 ;)

Pour procéder à cette création, on aura besoin comme prérequis de Relatorio, un projet python pour créer des doc ooo/pdf/html, à partir d’objets python.

Donc un petit

pip install relatorio

fera l’affaire pour disposer de l’armada ;)

1) Récupération des données à publier

Ici je partirai d’un script Python renvoyant un dict, ni plus ni moins.

Le voici , il se nomme « maraicher.py »:

potager = dict(
			customer = 'Bonduelle',
			version = '1.12.09',
			previous_version = '1.12.08',
			middleware=[ { 'composant': 'Aluminium', 'version': '1.0.2' },
						 { 'composant': 'Fer', 'version': '1.1.2' } ,
						 { 'composant': 'Papier', 'version': '2.55.89' },
				],
			core=[ { 'composant': 'Petits Pois', 'version': '1.12.13'},
				{ 'composant': 'Carottes', 'version': '3.45.69'},
				{ 'composant': 'Poireaux', 'version': '2.98.10'},
				{ 'composant': 'Pommes de terre', 'version': '9.1'},
				],
 
	)

2) le document OpenOffice :

Ce dernier contient ce que vous avez ici. C’est en fait un tableau recensant des noms de produit avec leur versions associées.

geant vert : le template
geant vert : le template

3) Fusion
La fusion va consister à lire les données du dict et les injecter dans le doc, tout cela se fait, like this (en 5lignes hein ;) :

from relatorio.templates.opendocument import Template
from maraicher import potager
basic = Template(source=None, filepath='Geant-Vert.odt')
basic_generated = basic.generate(o=potager).render()
file('Geant-Vert1.odt', 'wb').write(basic_generated.getvalue())

le résultat est ici

geant-vert fusionné
geant-vert fusionné

Bon Appétit ;)

Une réflexion au sujet de « Incontournables Pythonerie : Oh ho ho Géant Vert »

  1. pour produire un PDF à l’issue de tout ceci on ajoutera après.

        # step 1 : fusion of ODT + dict 
        file(filename, 'wb').write(basic_generated.getvalue())

    ceci

        # by default unoconv convert file in PDF
        cmd = ['unoconv', filename]
        # step 2 : build a PDF from the generated ODT
        try:
            proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
            stdoutdata, stderrdata = proc.communicate()
            if proc.wait() != 0:
                raise Exception(stderrdata)
                return stdoutdata
        finally:
            os.remove(filename)

    pour que ca roule il vous faudra installer unoconv fourni par (Libre|Open)Office

Les commentaires sont fermés.