django転出pdf

3247 ワード

最近会社ではexeインストールパッケージの作成や、プログラムの新機能の追加に追われ、Djangoについて書き続けるのは久しぶりです....せっかく今週末は暇なので、Djangoの小さな機能を知るのも素晴らしいですね~
では今日はDjangoのビューでページをpdf形式にエクスポートする機能を見てみましょう.では、pdfを動的に生成するメリットは何でしょうか.異なる目的のユーザーのためにカスタムpdfを作成することができます.では、どのように実現したのでしょうか.Pythonオープンソースのpdfライブラリ---ReportLabを使用しています
ReportLabのインストール
あなたはhttp://www.reportlab.com/software/opensource/rl-toolkit/download/ReportLabライブラリのインストールをダウンロードします.インストール方法を説明するユーザーガイドがあります.pipを使用してインストールすることもできます.
sudo pip install reportlab

ReportLabのインストールに成功したかどうかをテストします
>>> import reportlab

このコマンドがエラーを報告していない場合は、ReportLabが正常にインストールされていることを示します.
Djangoがpdfを動的に生成する鍵はReportLabのファイルに関するAPIインタフェースであり、APiインタフェースはファイルオブジェクトであり、DjangoのHttpResponseオブジェクトもファイルオブジェクトであり、これは通じている.
では、「Hello World」の例を見てみましょう.
from reportlab.pdfgen import canvasfrom django.http import HttpResponsedef some_view(request):    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"'

    # Create the PDF object, using the response object as its "file."
    p = canvas.Canvas(response)    # Draw things on the PDF. Here's where the PDF generation happens.
    # See the ReportLab documentation for the full list of functionality.
    p.drawString(100, 100, "Hello world.")    # Close the PDF object cleanly, and we're done.    p.showPage()
    p.save()    return response

ここでresponseは、HTMLファイルではなくPDFファイルであることをブラウザに伝えます.そうしないと、ブラウザはHTMLのファイルフォーマットとして出力すると解釈し、ウィンドウで表示するのが非常に醜いことになります.
同時に、responseはPDFファイルの名前を含む追加の内容を得ることができます.もちろん、このファイル名は任意で、ブラウザの別名を使用して任意の名前を取ることができます.この例では、ドキュメントの処理方法を確認するダイアログボックスがポップアップされます.最後に最も重要なのはshowPage()メソッドとsave()メソッドを使用してエクスポートしたPDfファイルを保存することです.
注意:ReportLabは非スレッドで安全です.
では、複雑なPDFファイルを見てみましょう.ReportLabで複雑なPDFドキュメントを作成する場合は、IOクラスを使用して一時的な中継を支援することを考慮します.このライブラリは非常に有効なファイルクラスのオブジェクトインタフェースを提供しています.次に、上の「Hello World」を書き直します.
from io import BytesIOfrom reportlab.pdfgen import canvasfrom django.http import HttpResponsedef some_view(request):    # Create the HttpResponse object with the appropriate PDF headers.
    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="somefilename.pdf"'

    buffer = BytesIO()    # Create the PDF object, using the BytesIO object as its "file."
    p = canvas.Canvas(buffer)    # Draw things on the PDF. Here's where the PDF generation happens.
    # See the ReportLab documentation for the full list of functionality.
    p.drawString(100, 100, "Hello world.")    # Close the PDF object cleanly.    p.showPage()
    p.save()    # Get the value of the BytesIO buffer and write it to the response.
    pdf = buffer.getvalue()
    buffer.close()
    response.write(pdf)    return response

もちろん、ReportLabライブラリのほかにも優れたPythonサードパーティライブラリがたくさんあります.例えば、
PDF lib:Djangoが別のPythonライブラリをバインドしているほか、「XHTML 2 PDF」ライブラリや、HTMLをPDFに変換するコマンドラインである「HTML doc」を使用しているが、インタフェースがなく、Pythonの入出力インタフェースしか使用できない.