ダッシュで作成したサイトを静的PDFにエクスポートしたい。これが私のサイトのコードです(3つの列がある単なるグラフです)。
import dash
import dash_core_components as dcc
import dash_html_components as html
import pdfkit
from flask import Flask, render_template, make_response
app = dash.Dash()
app.layout = html.Div(
className="three columns",
children=html.Div([
dcc.Graph(
id='right-top-graph',
figure={
'data': [{
'x': [1, 2, 3],
'y': [3, 1, 2],
'type': 'bar'
}],
'layout': {
'height': 400,
'margin': {'l': 10, 'b': 20, 't': 0, 'r': 0}
}
}
),
])
)
app.css.append_css({
'external_url': 'https://codepen.io/chriddyp/pen/bWLwgP.css'
})
if __name__ == '__main__':
app.run_server(debug=True)
このコードをスクリプトに追加してpdfkitを使用しようとしましたが、機能しませんでした(render_template()が1つの位置引数を取るが、2つが指定されていることを示すエラーを受け取りました)。
rendered = render_template('pdf_template.html',app)
pdf = pdfkit.from_string(rendered, False)
response = make_response(pdf)
response.headers['Content-Type'] = 'application/pdf'
response.headers['Content-Disposition'] = 'attachment; filename=output.pdf'
ダッシュサイトをPDFに変換する方法について誰かが知っていますか?
前もって感謝します。
使用しているブラウザの印刷機能(通常はcontrol + p)を使用して、次のように保存できますPDF探しているものが静的な場合PDF =ファイル。
より拡張された機能が必要な場合は、ダッシュ examples の1つにあるようなprint to PDFボタンを追加できます。 jsファイルを使用してブラウザーの印刷機能を呼び出します。詳細は 詳細 を参照してください。このように、CSSを使用してPDF出力の外観を定義することもできます。
pythonファイルを使用して直接PDFを生成する場合の問題は、ダッシュがレイアウトツリーのJSON表現を作成するだけであり、それがブラウザー自体にアセンブルされることです more を参照してください。
pdfkit は次のように使用できます。
import pdfkit
pdfkit.from_url('http://local.dash.site', 'out.pdf')
投稿したものとの大きな違いは、ローカルWebサーバーを使用してページをレンダリングできることです。
別の方法として、 https://wkhtmltopdf.org/ を使用することもできます。これはpdfkitの下のlibです。
次のリンクの指示に従ってPDFを作成できます。 http://flask.pocoo.org/snippets/68/
render_templateは1つの位置引数のみを受け入れ、残りはkeyword引数でなければなりません。
render_templateは、位置引数を1つだけ受け取ります。以下をお試しいただけますか?
options = {
'margin-top': '0.15in',
'margin-right': '0.15in',
'margin-bottom': '0.2in',
'margin-left': '0.15in',
'encoding': "UTF-8",
}
css = 'path to your .css file'
html = render_template('a_html.html')
pdf = pdfkit.from_string(html, False, options=options, css=css)
次の方法でスクリプトを実行してみましたか(ダッシュサイトがレンダリングされる場所にスクリプトのpdf作成部分を貼り付けたところです)。
import dash
import dash_core_components as dcc
import dash_html_components as html
import pdfkit
from flask import Flask, render_template, make_response
app = dash.Dash()
app.layout = html.Div(
className="three columns",
children=html.Div([
dcc.Graph(
id='right-top-graph',
figure={
'data': [{
'x': [1, 2, 3],
'y': [3, 1, 2],
'type': 'bar'
}],
'layout': {
'height': 400,
'margin': {'l': 10, 'b': 20, 't': 0, 'r': 0}
}
}
),
])
)
app.css.append_css({
'external_url': 'https://codepen.io/chriddyp/pen/bWLwgP.css'
})
rendered = render_template('pdf_template.html',app)
pdf = pdfkit.from_string(rendered, False)
response = make_response(pdf)
response.headers['Content-Type'] = 'application/pdf'
response.headers['Content-Disposition'] = 'attachment; filename=output.pdf'
if __name__ == '__main__':
app.run_server(debug=True)