python下面有什么生成pdf文件的库呢?

2013-11-17 15:17:21 +08:00
 tywtyw2002
给我们组织做网站,需要生成一些invoice,ticker,证书,申请表(带barcode)等东西的pdf。


不知道什么库能够在纯py环境下生成pdf文件呢?

我记得php下面有个fpdf可以做到这点,但是python下不大清楚。

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

不过wkhtmltopdf的issues很多!但是速度好,生成的也漂亮

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/89595

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX