我想使用Python + Flask从html生成pdf文件。为此,我使用xhtml2pdf。这是我的代码:
def main():
pdf = StringIO()
pdf = create_pdf(render_template('cvTemplate.html', user=user))
pdf_out = pdf.getvalue()
response = make_response(pdf_out)
return response
def create_pdf(pdf_data):
pdf = StringIO()
pisa.CreatePDF(StringIO(pdf_data.encode('utf-8')), pdf)
return pdf
在此代码文件中即时生成。但! xhtml2pdf不支持CSS中的许多样式,因为正确标记页面存在这个大问题。我发现了另一种乐器(wkhtmltopdf)。但是当我写下这样的话时:
pdf = StringIO()
data = render_template('cvTemplate1.html', user=user)
WKhtmlToPdf(data.encode('utf-8'), pdf)
return pdf
引发错误:
AttributeError: 'cStringIO.StringO' object has no attribute 'rfind'
我的问题是如何在Flask中使用wkhtmltopdf(动态生成文件)将html转换为pdf?
提前感谢您的回答。
答案 0 :(得分:12)
页面需要渲染,您可以使用pdfkit:
https://pypi.python.org/pypi/pdfkit
https://github.com/JazzCore/python-pdfkit
文档中的示例。
import pdfkit
pdfkit.from_url('http://google.com', 'out.pdf')
pdfkit.from_file('test.html', 'out.pdf')
pdfkit.from_string('Hello!', 'out.pdf') # Is your requirement?
答案 1 :(得分:5)
您是否尝试过使用Flask-WeasyPrint的WeasyPrint?他们的网站上有很好的例子,所以我不在这里复制它们。
答案 2 :(得分:4)
<强> Conversion in 3 Steps from Webpage/HTML to PDF 强>
第1步:下载库pdfkit
$ pip install pdfkit
第2步:下载wkhtmltopdf
对于Ubuntu / Debian:
sudo apt-get install wkhtmltopdf
对于Windows:
(a)下载链接:WKHTMLTOPDF
(b)设置:PATH变量设置环境变量中的二进制文件夹。
Step3: Python下载代码:
(i)已保存的HTML页面
import pdfkit
pdfkit.from_file('test.html', 'out.pdf')
(ii)按网站网址转换
import pdfkit
pdfkit.from_url('https://www.google.co.in/','shaurya.pdf')
(iii)以PDF格式存储文本
import pdfkit
pdfkit.from_string('Shaurya Stackoverflow','SOF.pdf')