generate Word document by embedding content in .mht file

This commit is contained in:
Helmut Merz 2012-08-07 18:56:13 +02:00
parent b0b9868d1f
commit f72b1702e8
4 changed files with 4430 additions and 3 deletions

View file

@ -21,11 +21,13 @@ View definitions for generation of documents.
""" """
import os import os
import quopri
from zope.app.pagetemplate import ViewPageTemplateFile from zope.app.pagetemplate import ViewPageTemplateFile
from zope.cachedescriptors.property import Lazy from zope.cachedescriptors.property import Lazy
from zope.publisher.browser import BrowserPage from zope.publisher.browser import BrowserPage
word_template = ViewPageTemplateFile('word_page.pt') word_template = ViewPageTemplateFile('word_page.pt')
body_template = ViewPageTemplateFile('word_body.pt')
class Base(BrowserPage): class Base(BrowserPage):
@ -34,16 +36,37 @@ class Base(BrowserPage):
#encoding = 'ISO8859-15' #encoding = 'ISO8859-15'
def __call__(self, *args, **kw): def __call__(self, *args, **kw):
data = self.index(*args, **kw).encode(self.encoding) content = self.index(*args, **kw).encode(self.encoding)
self.setHeader(data) self.setHeader(content)
return data return content
class WordDocument(Base): class WordDocument(Base):
index = word_template index = word_template
bodyTemplate = body_template
showLinks = False showLinks = False
def embed(self, *args, **kw):
self.encoding = 'Windows-1252'
bodyMarker = 'lxdoc_body'
content = self.bodyTemplate(*args, **kw).encode(self.encoding)
baseDocument = self.readDocTemplate()
document = baseDocument.replace(bodyMarker,
self.quopri(content))
self.setHeader(document)
return document
def quopri(self, s):
return s.replace('="', '=3D"')
def readDocTemplate(self):
path = os.path.join(os.path.dirname(__file__), 'document.mht')
f = open(path, 'r')
doc = f.read()
f.close()
return doc
def setHeader(self, data, filename='document'): def setHeader(self, data, filename='document'):
fn = '%s.doc' % filename fn = '%s.doc' % filename
response = self.request.response response = self.request.response

4399
docgen/document.mht Executable file

File diff suppressed because it is too large Load diff

View file

@ -78,6 +78,10 @@ th {
font-weight: bold; font-weight: bold;
} }
table.MsoHeader, p.MsoHeader {
mso-style-noshow:yes;
}
span.MsoFootnoteReference { span.MsoFootnoteReference {
mso-style-noshow:yes; mso-style-noshow:yes;
vertical-align: super; vertical-align: super;

1
docgen/word_body.pt Normal file
View file

@ -0,0 +1 @@
<metal:content use-macro="view/content" />