easy_install -U reportlab
2.実行
from reportlab.pdfgen import canvas from django.http import HttpResponse def some_view(request): response = HttpResponse(mimetype='application/pdf') response['Content-Disposition'] = 'attachment; filename=somefilename.pdf' p = canvas.Canvas(response) #帳票レイアウト描画 p.drawString(100, 100, "Hello world.") p.showPage() p.save() return response
PDFレイアウトをちまちま書いていくのは大変なので、
テンプレート画像を読み込んで、そこに記入していく方式をとってみる。
from reportlab.pdfgen import canvas #!/user/bin/env python # -*- coding: utf-8 -*- from django.http import HttpResponse from reportlab.pdfgen import canvas from reportlab.lib.units import mm # Create your views here. def sample1(request): response = HttpResponse(mimetype='application/pdf') #response['Content-Disposition'] = 'attachment; filename=c:\\tmp\\somefilename.pdf' response['Content-Disposition'] = 'attachment; filename=somefilename.pdf' p = canvas.Canvas(response) #テンプレート読み込み(A4サイズ[595x841], テンプレートサイズ[453x785]) _lft = 30 _top = 10 _rit = 20 _btm = 10 _wid = 210 - _lft - _rit _hei = 297 - _top - _btm p.drawInlineImage("c:\\tmp\\test.png", _lft*mm, _btm*mm, # width=_wid*mm, # height=_hei*mm, # preserveAspectRatio=True ) #記入項目 p.drawString(0*mm, 0*mm, "Hello world1.") p.drawString(40*mm, 100*mm, "Hello world2.") p.drawString(40*mm, 200*mm, "width=%d, height=%d" % (_wid*mm, _hei*mm)) p.showPage() p.save() return response
これで仕上がったPDFを印刷してみるとわかるけど、
テンプレート内に入っている文字はドットが荒くなるので、
線の枠組みだけテンプレートに書いて、文字は別途挿入した方がいい。
あとテンプレートのサイズはソースコード内に記述したサイズにすると
原寸大で描画できる。
参照リンク
http://docs.nullpobug.com/django-doc-ja/trunk/howto/outputting-pdf.html
http://d.hatena.ne.jp/piro_suke/20070704/1183561248
http://tt-house.com/2009/12/python-reportlab-pdf.html
0 件のコメント:
コメントを投稿