Convert html to pdf using Python/Flask
我想使用Python Flask从html生成pdf文件。为此,我使用xhtml2pdf。这是我的代码:
1 2 3 4 5 6 7 8 9 10 11 | 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)。但是当我写类似的东西时:
1 2 3 4 | pdf = StringIO() data = render_template('cvTemplate1.html', user=user) WKhtmlToPdf(data.encode('utf-8'), pdf) return pdf |
出现错误:
1 | AttributeError: 'cStringIO.StringO' object has no attribute 'rfind' |
我的问题是如何在Flask中使用wkhtmltopdf(动态生成文件)将html转换为pdf?
预先感谢您的回答。
页面需要渲染,您可以使用pdfkit:
https://pypi.python.org/pypi/pdfkit
https://github.com/JazzCore/python-pdfkit
文档中的示例。
1 2 3 4 5 | 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? |
从网页/ HTML到PDF的3个步骤的转换
第一步:下载库pdfkit
1 | $ pip install pdfkit |
第2步:下载wkhtmltopdf
对于Ubuntu / Debian:
1 | sudo apt-get install wkhtmltopdf |
对于Windows:
(a)下载链接:WKHTMLTOPDF
(b)设置:PATH变量在环境变量中设置二进制文件夹。
Step3:要下载的Python代码:
(i)已保存的HTML页面
1 2 | import pdfkit pdfkit.from_file('test.html', 'out.pdf') |
(ii)通过网站URL转换
1 2 | import pdfkit pdfkit.from_url('https://www.google.co.in/','shaurya.pdf') |
(iii)将文本存储为PDF
1 2 | import pdfkit pdfkit.from_string('Shaurya Stackoverflow','SOF.pdf') |
您是否尝试过使用WeasyPrint的Flask-WeasyPrint?他们的网站上有很好的例子,所以我不在这里重复。