beordle
2013-11-18 05:59:12 +08:00
这个问题我倒是非常有发言权。reportlab 我使用过。他对中文支持存在一定问题。在网上找到一定的解决方案后,也是在中文排版上有很大缺陷的。我最后使用了python-docx.但是这个库只能从0开始生成docx. 查阅资料后发现2007版本的docx是zip压缩的开放xml。所以我这样来做。虽然使用了python-docx库。。但是只用到了一个常量。进行模板生成。大概这样唯一的缺陷就是只能office2007+以上版本使用了吧。
from docx import *
def replace_docx(zip_buf,dict):
memory=StringIO.StringIO()
memory.write(zip_buf)
mydoc = zipfile.ZipFile(memory)
xmlcontent = mydoc.read('word/document.xml')
document = etree.fromstring(xmlcontent)
body = document.xpath('/w:document/w:body', namespaces=nsprefixes)[0]
for key,value in dict.items():
body = replace(body, key, value)
xmlcontent = etree.tostring(document, pretty_print=True)
mydoc.close()
zf = zipfile.ZipFile(memory, "a", zipfile.ZIP_DEFLATED, False)
zf.writestr('word/document.xml',xmlcontent)
zf.close()
return memory.getvalue()