使用 Python/Flask 将 html 转换为 pdf
Convert html to pdf using Python/Flask
我想使用 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?
提前感谢您的回答。
页面需要渲染,可以使用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?
您尝试过 Flask-WeasyPrint, which uses WeasyPrint 吗?他们的网站上有很好的例子,所以我不会在这里复制它们。
Conversion in 3 Steps from Webpage/HTML to PDF
第一步: 下载库 pdfkit
$ pip install pdfkit
第二步: 下载 wkhtmltopdf
对于Ubuntu/Debian:
sudo apt-get install wkhtmltopdf
对于Windows:
(a)下载link:WKHTMLTOPDF
(b)设置:PATH变量在环境变量中设置二进制文件夹。
第 3 步: Python 中的代码下载:
(i) 已保存 HTML 页
import pdfkit
pdfkit.from_file('test.html', 'out.pdf')
(ii) 按网站转换 URL
import pdfkit
pdfkit.from_url('https://www.google.co.in/','shaurya.pdf')
(iii) 以 PDF 格式存储文本
import pdfkit
pdfkit.from_string('Shaurya Whosebug','SOF.pdf')
不确定这是否对任何人有帮助,但我的问题是将 Bootstrap5 元素捕获为 pdf。 pdfkit 没有这样做,这里是使用 html2image 和 PIL 解决 windows 的方法。限于此,不全页截图。
from html2image import Html2Image
from PIL import Image
try:
hti.screenshot(html_file=C:\yourfilepath\file.html, save_as="test.png")
finally:
image1 = Image.open(r'C:\yourfilepath\test.png')
im1 = image1.convert('RGB')
im1.save(r'C:\yourfilepath\newpdf.pdf')
我想使用 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?
提前感谢您的回答。
页面需要渲染,可以使用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?
您尝试过 Flask-WeasyPrint, which uses WeasyPrint 吗?他们的网站上有很好的例子,所以我不会在这里复制它们。
Conversion in 3 Steps from Webpage/HTML to PDF
第一步: 下载库 pdfkit
$ pip install pdfkit
第二步: 下载 wkhtmltopdf
对于Ubuntu/Debian:
sudo apt-get install wkhtmltopdf
对于Windows:
(a)下载link:WKHTMLTOPDF
(b)设置:PATH变量在环境变量中设置二进制文件夹。
第 3 步: Python 中的代码下载:
(i) 已保存 HTML 页
import pdfkit
pdfkit.from_file('test.html', 'out.pdf')
(ii) 按网站转换 URL
import pdfkit
pdfkit.from_url('https://www.google.co.in/','shaurya.pdf')
(iii) 以 PDF 格式存储文本
import pdfkit
pdfkit.from_string('Shaurya Whosebug','SOF.pdf')
不确定这是否对任何人有帮助,但我的问题是将 Bootstrap5 元素捕获为 pdf。 pdfkit 没有这样做,这里是使用 html2image 和 PIL 解决 windows 的方法。限于此,不全页截图。
from html2image import Html2Image
from PIL import Image
try:
hti.screenshot(html_file=C:\yourfilepath\file.html, save_as="test.png")
finally:
image1 = Image.open(r'C:\yourfilepath\test.png')
im1 = image1.convert('RGB')
im1.save(r'C:\yourfilepath\newpdf.pdf')