= tRMLを使ってテンプレートでPDFを生成する(古い方, django_trml2pdf版) = (2010/03/01 ymasuda) '''注意: django_trml2pdf は、template2pdf.django に移行しました''' -- 2010/03/03 ymasuda このところ帳票を作るコードを扱っています。DjangoでPDF...というと、!ReportLabで platypus のコードを 頑張って書いている人、結構いるんじゃないでしょうか。あれは大変ですね。ちょっと変更するたびに、 Pythonコードをいじらなきゃいけない。テーブルの構成とかレイアウトを組み替えるときなんか、すごく大変。 それに、値を'''いちいちいちいちいちいちいちいち'''文字列に変える処理を書いていると、とっても疲れます。 表示の部分は、やっぱりテンプレートでカバーしたいですよね。 そこで、 trml2pdf という LGPL のライブラリを使ってみました。trml2pdf は、tRML というXMLの ドキュメントからPDF を生成してくれます。tRML は有償版の !ReportLab PLUS がサポートしている RML のサブセットで、RMLの基本的なほんの一部だけを実装したものです。Djangoのテンプレートなら、 XMLの出力はおてのもの。テンプレートからtRMLを生成して、そのままtrml2pdfに通せば、PDFを 動的に生成できます。というわけで、簡単なテンプレートtoPDFライブラリを作ってみました。 http://code.google.com/p/template2pdf/ で公開しています。 LGPL ライセンス。 PyPI にも egg を登録してあるので、 {{{ easy_install django_trml2pdf }}} でインストールできます。 ソースコードからインストールするには、 {{{ svn checkout http://template2pdf.googlecode.com/svn/tags/pre_django_trml2pdf_removal/django_trml2pdf }}} で取り出してください。djangoのアプリケーションとしてインストールして (INSTALLED_APPS に入れて) 使います。ビューを書くとこんな感じです: {{{ # coding: utf-8 from django.http import HttpResponse from django_trml2pdf import direct_to_pdf from django.shortcuts import render_to_response def myview(request, template_name='trml2pdf/mytemplate.rml'): params = {} return HttpResponse( direct_to_pdf(request, template_name, params), mimetype='application/pdf') }}} テンプレートのtRMLの書き方は、django_trml2pdf/templates/base.rml や、!ReportLab のRMLガイドを読んでもらえれば だいたいおわかり頂けると思います。Djangoのテンプレートだから、もちろん継承も{% include %}も{% trans %} もできます。cool! 素の trml2pdf は、フォントをロードする機能がなかったり、日本語のワードラップに対応していません。 django_trml2pdf では、settings にフォント情報を指定しておくことで、初期化時にフォントをロードしてくれます。 また、画像を埋め込みたいときなどに、画像の絶対パスを解決してくれる {% pdf_resource %} タグも用意しておきました。 Enjoy! そうそう、このプロジェクトを手伝ってくれる人募集。ご興味をお持ちの方は whosaysni at twitter まで連絡ください。