web-dev-qa-db-ja.com

Python / Flaskを使用してHTMLを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に変換する方法ですか?

ご回答ありがとうございます。

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?
14
Quan Brew

Flask-WeasyPrint を試してみましたか WeasyPrint を使用していますか?彼らのウェブサイトには良い例があるので、ここではそれらを複製しません。

5
chfw

Webページ/ HTMLからPDFへの3ステップの変換

Step1:ライブラリpdfkitをダウンロード

$ pip install pdfkit

Step2:wkhtmltopdfをダウンロード

Ubuntu/Debianの場合:

Sudo apt-get install wkhtmltopdf

Windowsの場合:

(a)ダウンロードリンク: [〜#〜] wkhtmltopdf [〜#〜]

(b)Set:PATH変数は、環境変数にバイナリフォルダーを設定します。

Step3:Pythonダウンロードするコード:

(i)保存済みのHTMLページ

import pdfkit
pdfkit.from_file('test.html', 'out.pdf')

(ii)WebサイトのURLで変換

import pdfkit
pdfkit.from_url('https://www.google.co.in/','shaurya.pdf')

(iii)テキストをPDFに保存する

import pdfkit
pdfkit.from_string('Shaurya Stackoverflow','SOF.pdf')
5
shaurya uppal