Skip to content

Libreoffice templating to produce libreoffice output formats

License

Notifications You must be signed in to change notification settings

faide/py3o.template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Project Home Moved

The project hosting has moved to https://orus.io/florent.aide/py3o.template

Introduction

py3o is an elegant and scalable solution to design reports using LibreOffice or OpenOffice. py3o.template is the templating component that takes care of merging your data sets with a corresponding templated OpenOffice document.

It is plateform independent and does not require LibreOffice/OpenOffice itself to generate an ODF file.

If you want to generate a PDF or any other supported output format you will then need to have a server with either LibreOffice or OpenOffice and to install the py3o.renderserver on it. We also provide a docker image on the docker hub

If you want to have templating fusion & document conversion in one single web service usable from any language with just HTTP/POST you can install py3o.fusion server. Which also exists as a docker image

Python 3 support

py3o.fusion is python3 ready. But, yes there is a but... alas!, you'll need

to install a trunk version of Genshi:

$ # activate your python env...
$ svn checkout http:https://svn.edgewall.org/repos/genshi/trunk genshi_trunk
$ cd genshi_trunk
$ python setup.py build
$ python setup.py install

We tested this with revision 1271. When genshi 0.8 is released we can officially say we support Python3 out of the box.

Full Documentation

We provide a documentation for this package. If anything is not correctly explained, please! create a ticket in our ticketing system

Example Usage

Below is an example that you can find in the source code inside the examples directory.

from py3o.template import Template

t = Template("py3o_example_template.odt", "py3o_example_output.odt")

t.set_image_path('logo', 'images/new_logo.png')


class Item(object):
    pass

items = list()

item1 = Item()
item1.val1 = 'Item1 Value1'
item1.val2 = 'Item1 Value2'
item1.val3 = 'Item1 Value3'
item1.Currency = 'EUR'
item1.Amount = '12345.35'
item1.InvoiceRef = '#1234'
items.append(item1)

for i in xrange(1000):
    item = Item()
    item.val1 = 'Item%s Value1' % i
    item.val2 = 'Item%s Value2' % i
    item.val3 = 'Item%s Value3' % i
    item.Currency = 'EUR'
    item.Amount = '6666.77'
    item.InvoiceRef = 'Reference #%04d' % i
    items.append(item)

document = Item()
document.total = '9999999999999.999'

data = dict(items=items, document=document)
t.render(data)

Changelog

0.9 Jan. 8 2015

  • Added support for soft page breaks

0.8 Nov. 19 2014

  • Added better unit tests
  • Fixed corner cases in the variable introspection mechanism
  • Better handling of "ignore_undefined" that now also allows undefined images

0.7 Oct. 15 2014

  • Added Python3 support
  • Fixed a problem with validity of output in case the template contains a text:list inside a for loop
  • Added new public methods to help report servers introspect the template data dictionary
  • Added real unit tests (96% coverage ATM, way to go test team!)

Contributors

By order of contribution date:

About

Libreoffice templating to produce libreoffice output formats

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Languages