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