1
xavierskip 2013-11-17 15:25:09 +08:00
|
2
beordle 2013-11-18 05:59:12 +08:00 1
这个问题我倒是非常有发言权。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() |
3
tywtyw2002 OP @beordle 但是 docx怎么生成pdf呢 因为文件不能更改呀
|
4
ericls 2013-11-18 10:27:32 +08:00 via Android
我一直用django生成pdf
|
5
chuangbo 2013-11-18 12:01:02 +08:00
如果不一定用 Python 库的话,http://www.princexml.com/ 挺好的
|
6
wuyazi 2013-11-18 19:55:02 +08:00
要求不高的话,reportlab应该够用了。
中文加个字体就解决了。 排版的话,不清楚二楼说的缺陷是什么,只是感觉所有内容都是用函数画的,比较费力,没有直观一点的可视化编辑 |
7
beordle 2013-11-19 19:01:54 +08:00
@wuyazi 主要是 在模板情形下的行距(出現重疊等等) 自動換行(這個倒是有不完美解決方案).(還有就是程序員必須自己生成模板,略不好)
|
8
beordle 2013-11-19 19:06:31 +08:00
@wuyazi @tywtyw2002 這個確實得用msoffice或是 openoffice的編程接口來弄.但不符合pure python要求.我當時做程序的時候倒是不一定要求pdf格式.現在讓我做的話.那些問題reportlab應該可以解決.可能是我當時沒弄好.因為reportlab確實是唯一的純python pdf庫了
|
9
wangyongbo 2013-11-21 18:30:33 +08:00
pyPdf 也可以操作 pdf。reportlab 自己加上中文字体 就好了。大部分都能解决。
|
10
beordle 2013-11-23 15:48:59 +08:00
@wangyongbo pypdf只是切割pdf 不能渲染生成啊
|
11
hit9 2013-12-10 21:55:03 +08:00
See pdfkit & wkhtmltopdf
不过wkhtmltopdf的issues很多!但是速度好,生成的也漂亮 |