- Author:
- king
- Posted:
- February 25, 2007
- Language:
- Python
- Version:
- Pre .96
- Tags:
- print odf office
- Score:
- 4 (after 4 ratings)
This view will enable you to generate OpenOffice documents from templates written in OpenOffice 2.x
Just make sure that there is no OO tag in between your code (no change in formatting etc.). content.xml is a valid XML file, so you can do some preprocessing using xml.dom.minidom. I would also recommend caching (just save the zip file without content.xml and content.xml on its own).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | import zipfile
import StringIO
from django import http
from django.template import Context, Template
def print_odf( request, odf_path, context ):
"""
odf_path - path to the template document
context - dictionary to create context from
"""
c = Context()
for key, value in context.items():
if callable( value ):
c[key] = value()
else:
c[key] = value
# default mimetype
mimetype = 'application/vnd.oasis.opendocument.text'
# ODF is just a zipfile
input = zipfile.ZipFile( template_name, "r" )
# we cannot write directly to HttpResponse, so use StringIO
text = StringIO.StringIO()
# output document
output = zipfile.ZipFile( text, "a" )
# go through the files in source
for zi in input.filelist:
out = input.read( zi.filename )
# waut for the only interesting file
if zi.filename == 'content.xml':
# un-escape the quotes (in filters etc.)
t = Template( out.replace( '"', '"' ) )
# render the document
out = t.render( c )
elif zi.filename == 'mimetype':
# mimetype is stored within the ODF
mimetype = out
output.writestr( zi.filename, out )
# close and finish
output.close()
return http.HttpResponse( content=text.getvalue(), mimetype=mimetype )
|
More like this
- Automatically setup raw_id_fields ForeignKey & OneToOneField by agusmakmun 8 months ago
- Crispy Form by sourabhsinha396 8 months, 3 weeks ago
- ReadOnlySelect by mkoistinen 9 months, 1 week ago
- Verify events sent to your webhook endpoints by santos22 10 months ago
- Django Language Middleware by agusmakmun 10 months, 2 weeks ago
Comments
HttpResponse can take file-likes directly:
#
thanks, I updated the snippet
#
Line 23 should probably use "odf_path" instead of "template_name".
#
See https://github.com/NetAngels/django-webodt
#
Please login first before commenting.