36. Drukwerk in Brocade en de OpenOffice module: technische aspecten

Auteur Richard Philips
Aanmaak 6 febr 2008
Oud BVV nr 2225

36.1. Abstract

Dit document beschrijft de OpenOffice module, met veel aandacht voor de template eigenschappen.

36.2. Import

De eenvoudigste manier is te werken via:

from anet.openoffice import document

docobj = document.Document("rappel.odt")

De code wordt beheerd in het bestand /openoffice/document/document.py.

36.3. Wegschrijven van een document

Dit kan via de store methode:

from anet.openoffice import document

docobj = document.Document("rappel.odt")

docobj.store() # schrijft het document terug naar 'rappel.odt'
docobj.store("rappel2.odt") # schrijft het document naar 'rappel2.odt'

36.4. Conversie van documenten

De conversie gebeurt via de JODconverter (http://www.artofsolving.com/opensource/jodconverter). Deze moet dus wel eerst worden geïnstalleerd.

Conversie gebeurt via de convert methode:

from anet.openoffice import document

docobj = document.Document("rappel.odt")

docobj.convert("rappel2.pdf") # converteert het document naar PDF en bewaart het in 'rappel2.pdf'
docobj.convert(format='doc') # converteert het document naar MSWORD en bewaart het in 'rappel.doc'

36.5. Templates en OpenOffice documenten

De templating van OpenOffice documenten is gebaseerd op de Cheetah-taal. Deze templating engine (http://www.cheetahtemplate.org/) is gebaseerd op python en kan worden toegepast op alle tekstbestanden. Het ODF formaat waarmee OpenOffice werkt, is essentieel een in UTF8 gecodeerd XML bestand en komt dus in aanmerking als een Cheetah document. De uitdaging is er voor te zorgen dat ook na het vullen van de template, het ODF bestand nog ODF blijft!

Zorg ervoor dat placeholders en Cheetah code steeds in een goede codering staan. Doe vooraf het beste een transformatie naar xhtmlc. (Zie Templates en placeholders)

Hierna behandelen we een aantal technieken die kunnen worden gebruikt om via Cheetah aan templating van ODF bestanden te gaan doen. De bedoeling is om templates aan te maken van OpenOffice waarbij de Cheetah markup minimaal intrusief is.

36.6. Templates en placeholders

Deze vorm van templating is gebaseerd op de mogelijkheden die Cheetah biedt.

Gegeven de volgende template:

_images/bvv-2225-img_001.png

Na toepassing van:

# -*- coding: iso-8859-1 -*-

from anet.openoffice import document

docobj = document.Document("lener_template.odt") # 'lener_template.odt' fungeert als Cheetah template
searchList = {
    'vn': unicode('René', 'brocade').encode('xhtmlc'),
    'fn': 'Boesmans',
    'eloi': 'e:UA:9701',
    }

docobj.fillTemplate(searchList)
docobj.store("result.odt")

Bevat de file ‘result.odt’:

_images/bvv-2225-img_002.png

36.7. Templates en tabellen met impliciete rijen

Deze manier van templating kan worden gebruikt om op automatische wijze tabellen aan te maken.

Gegeven de volgende template:

_images/bvv-2225-img_003.png

Na toepassing van:

from anet.openoffice import document

docobj = document.Document("lener_template.odt") # 'lener_template.odt' fungeert als Cheetah template
searchList = {
    'fn': ['Philips', 'Corthouts'],
    'vn': ['Richard', 'jan'],
    'eloi': ['e:UA:9701', 'e:UA:37558'],
    }

docobj.fillTemplate(searchList)
docobj.store("result.odt")

Bevat de file ‘result.odt’:

_images/bvv-2225-img_004.png

Notitie

De software herkent impliciete placeholders aan het optreden van [] in een rij. De software loopt de lists door totdat er een exceptie optreedt.

36.8. Templates met herhaalbare blokken

Deze manier van templating kan worden gebruikt om op automatische wijze delen van een document zich te laten herhalen.

Gegeven de volgende template:

_images/bvv-2225-img_008.png

Na toepassing van:

# -*- coding: iso-8859-1 -*-

from anet.openoffice import document

docobj = document.Document("lener_template.odt") # 'lener_template.odt' fungeert als Cheetah template
searchList = {
    'Leners': ['Jan', 'Marc', 'Luc', 'Alain', 'Karen'],
    }

docobj.fillTemplate(searchList)
docobj.store("result.odt")

Bevat de file ‘result.odt’:

_images/bvv-2225-img_009.png

Notitie

De software herkent impliciete placeholders aan het optreden van [] in een rij. De software loopt de lists door totdat er een exceptie optreedt.

36.9. Expliciete Cheetah code

Je kan in het ODT document ook expliciete Cheetah code plaatsen. Deze code moet echter ook als dusdaning worden gekarakteriseerd: de code moet in een stijl CheetahSection staan.

Gegeven de volgende template:

_images/bvv-2225-img_005.png

Na toepassing van:

from anet.openoffice import document

docobj = document.Document("lener_template.odt") # 'lener_template.odt' fungeert als Cheetah template
searchList = {}

docobj.fillTemplate(searchList)
docobj.store("result.odt")

Bevat de file ‘result.odt’:

_images/bvv-2225-img_006.png

Notitie

Wordprocessing software heeft de onhebbelijke gewoonte om karakters te vervangen bij het tikken (kleine letters door hoofdletters, aanhalingstekens, ...). Zorg ervoor dat enkel de lijnen die beginnen met # als CheetahSection gestyleerd staan.

36.10. Preamble en postamble

Je kan een preamble en een postamble opgeven. Dit zijn beiden Cheetah scripts. Deze hebben het effect dat de preamble wordt gevoegd net voor de tekst van het document en de postamble net na de tekst.

Gegeven de volgende template:

_images/bvv-2225-img_001.png

Na toepassing van:

from anet.openoffice import document

docobj = document.Document("lener_template.odt") # 'lener_template.odt' fungeert als Cheetah template
searchList = {
    'Users': [
       ('Philips', 'Richard', 'e:UA:9701'),
       ('Corthouts', 'Jan', 'e:UA:37558'),
       ]
    }

docobj.fillTemplate(searchList, preamble="#for ($fn, $vn, $eloi) in $Users", postamble="#end for")
docobj.store("result.odt")

Bevat de file ‘result.odt’:

_images/bvv-2225-img_007.png