20120420
========

How to generate chunks of ODF XML
---------------------------------

The `[pdf]` button now produces a pdf with correct column widths.
:checkin:`abf9ee80039f`.

Now I'll take some time to find the "best" method for
generating chunks of ODF XML.
Currently I'm using :term:`ODFPy` which looks something like::

    doc = OpenDocumentText()

    tablecontents = Style(name="Table Contents", family="paragraph")
    tablecontents.addElement(ParagraphProperties(numberlines="false",
        linenumber="0"))
    doc.styles.addElement(tablecontents)

    tableheader = Style(name="Table Column Header", family="paragraph")
    tableheader.addElement(ParagraphProperties(numberlines="false",
        linenumber="0"))
    doc.styles.addElement(tableheader)

    table = Table()
    doc.text.addElement(table)

    for i,fld in enumerate(fields):
        cs = Style(name=fld.name, family="table-column")
        cs.addElement(TableColumnProperties(columnwidth=width_specs[i]))
        doc.automaticstyles.addElement(cs)
        table.addElement(TableColumn(stylename=cs))

    # header
    hr = TableRow()
    table.addElement(hr)
    for fld in fields:
        tc = TableCell()
        tc.addElement(P(
            stylename=tableheader,
            text=force_unicode(fld.field.verbose_name or fld.name)))
        hr.addElement(tc)

    for row in ar.data_iterator:
        tr = TableRow()
        table.addElement(tr)

        for i,fld in enumerate(fields):
            tc = TableCell()
            v = fld.full_value_from_object(ar,row)
            tc.addElement(P(stylename=tablecontents,text=unicode(v)))
            tr.addElement(tc)
    doc.save(output_file) # , True)


The problem with :term:`ODFPy` is that it
is not really used and probably will not be maintained.
So I'm going to try and do the same using my own
:mod:`lino.utils.xmlgen.odf`
module (which in turn is in fact just a wrapper around :term:`lxml`).