使用Python / Flask将html转换为pdf

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?他们的网站上有很好的例子,所以我不在这里重复。