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 件のコメント:
コメントを投稿