0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Django】ページをPDF出力する(オプション)【Python】

Posted at

初めに

※以下の記事の続きです。未読の場合は先に目を通してください。
【Django】ページをPDF出力する【Python】

前回、Djangoで作成されたWebアプリケーションのページの最も簡単なpdf出力をまとめました。
今回はpdfkitで指定できるオプションを検証します。

環境

名称 バージョン
Python 3.10.4
Django 4.0.6
pdfkit 1.0.0

書式指定

pdfkitのオプションは辞書型のオブジェクトで設定できます。
そして引数の「options」を指定してオブジェクトを渡します。
前回のpdf出力関数にオプション設定部分を追記しました。

views.py
def to_pdf(request):
    url = 'http://127.0.0.1:8000/test_app/'
    options = {
            'page-size': 'A4',
            'margin-top': '50',
            'margin-right': '50',
            'margin-left': '50',
            'margin-bottom': '50',
            'zoom': '1.0',
            'encoding': "UTF-8"
          }
    pdfkit.from_url(url, 'sample.pdf', options=options)
    return redirect('test_app:index')

各設定箇所はキー名で直感的にわかると思うので説明は割愛し、実際に設定が効いているかpdfを出力し確認します。
キャプチャ2.JPG
前回出力時よりmarginが取られているのが確認できました。

cookie

pdfkitのオプションで「cookie」のキーでセッションID等のcookieでやりとりされる値を受け渡しできます。

pdfkit.from_urlは第一引数で指定されたurlにGETでアクセスするので、セッションIDが受け渡されている確認として、
pdf出力ボタンを押下時の自分のセッションIDと、pdfkitがページをpdf出力するリクエストのセッションIDを出力してみます。

その前に、セッションIDを渡さない状態で一度各々のセッションIDを出力します。
pdf出力関数のpdfkit呼び出し前に自分のセッションIDの出力を追記し、pdf出力対象のページにも同様に出力部分を追記します。

views.py
def to_pdf(request):
    url = 'http://127.0.0.1:8000/test_app/'
    options = {
            'page-size': 'A4',
            'margin-top': '0',
            'margin-right': '0',
            'margin-left': '0',
            'margin-bottom': '0',
            'zoom': '1.0',
            'encoding': "UTF-8",
          }
    print('自分のsessionid: ' + str(request.session.session_key))     #セッションID出力部分
    pdfkit.from_url(url, 'sample.pdf', options=options)
    return redirect('test_app:index')

出力結果は以下のようになりました。
キャプチャ.JPG
ではpdfkitのオプションの「cookie」にセッションIDを設定します。

views.py
def to_pdf(request):
    url = 'http://127.0.0.1:8000/test_app/'
    cookie_list = request.COOKIES
    options = {
            'page-size': 'A4',
            'margin-top': '0',
            'margin-right': '0',
            'margin-left': '0',
            'margin-bottom': '0',
            'zoom': '1.0',
            'encoding': "UTF-8",
            'cookie': [
                ('sessionid', cookie_list['sessionid']),
            ]
          }
    print('自分のsessionid: ' + str(request.session.session_key))
    pdfkit.from_url(url, 'sample.pdf', options=options)
    return redirect('test_app:index')

出力結果は以下のようになりました。
キャプチャ1.JPG
pdfkitのリクエストが「cookie」に指定したセッションIDを持っていることを確認できました。

まとめ

今回はpdfkitの「options」での細かい設定の方法を検証しました。
セッションIDの受け渡しは自分とpdfkitでセッションを利用した値受け渡しに繋がってくるので、それはまた別の記事にまとめます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?