使用Python/Flask将html转换为pdf

Dmi*_*hev 12 python pdf wkhtmltopdf flask xhtml2pdf

我想使用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
Run Code Online (Sandbox Code Playgroud)

在这个代码文件中即时生成.但!xhtml2pdf不支持CSS中的许多样式,因为正确标记页面存在这个大问题.我发现了另一种乐器(wkhtmltopdf).但是当我写下这样的话:

pdf = StringIO()
data = render_template('cvTemplate1.html', user=user)
WKhtmlToPdf(data.encode('utf-8'), pdf)
return pdf
Run Code Online (Sandbox Code Playgroud)

被引发的错误:

AttributeError: 'cStringIO.StringO' object has no attribute 'rfind'
Run Code Online (Sandbox Code Playgroud)

我的问题是如何在Flask中使用wkhtmltopdf(在运行中生成文件)将html转换为pdf?

提前感谢您的回答.

Qua*_*rew 13

页面需要渲染,您可以使用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?
Run Code Online (Sandbox Code Playgroud)

  • 好。这段代码可以正常工作(安装wkhtmltopdf时不存在麻烦):render_template = render_template('template.html',user = user)render_template = render_template.encode('utf-8')pdf = pdfkit.from_string(rendered_template,False,css = './static/styles.css')返回make_response(pdf)谢谢! (3认同)

chf*_*hfw 5

您是否尝试过使用WeasyPrint的Flask- WeasyPrint?他们的网站上有很好的例子,所以我不在这里复制它们.

  • WeasyPrint 无法处理 JavaScript。 (2认同)

sha*_*pal 5

从网页/ HTML到PDF的3个步骤转换

步骤1:下载库pdfkit

$ pip install pdfkit
Run Code Online (Sandbox Code Playgroud)

步骤2:下载wkhtmltopdf

对于Ubuntu / Debian:

sudo apt-get install wkhtmltopdf
Run Code Online (Sandbox Code Playgroud)

对于Windows:

(a)下载链接:WKHTMLTOPDF

(b)设置:PATH变量在环境变量中设置二进制文件夹。

步骤3:使用Python下载的代码:

(i)已保存的HTML页面

import pdfkit
pdfkit.from_file('test.html', 'out.pdf')
Run Code Online (Sandbox Code Playgroud)

(ii)按网站网址转换

import pdfkit
pdfkit.from_url('https://www.google.co.in/','shaurya.pdf')
Run Code Online (Sandbox Code Playgroud)

(iii)将文本存储为PDF

import pdfkit
pdfkit.from_string('Shaurya Stackoverflow','SOF.pdf')
Run Code Online (Sandbox Code Playgroud)