2008年4月2日水曜日

ReportLabを使ってみる

pythonでpdfを作成しようとするとひっかかるReportLab
http://www.reportlab.org/

Reportというだけあって、英文であれば簡単にPDFのレポートが作成できそう。報告書とか見栄えを気にしないような書類を作成するのは楽ちん。
問題は日本語。「ReportLab Library is 2.1.」だと、特に問題なく日本語の作成までは通る。
Windowsでやってみてるから、「Precompiled DLLs」もダウンロードして使ってみた。Python2.5版を使った。
(ReportLab Toolkit Version 1もダウンロードできるけど、紛らわしいから止めて欲しい。それでハマった)
Acrobatのフォントを探してきて使えるようにしてくれる。Version 1はAcrobatの5までになってて、ハマりがち。Version2.1.だと、Acrobatの9まで自動で探すようになってる。
\Python25\Lib\site-packages\reportlabのrl_config.pyのなかの、~SearchPathでフォントを探してるので(CMapSearchPathとか)、そこを確認したら使えるかも。Acrobat10とか使う頃にはReportLabもヴァージョンアップしてるだろうけど:-)


from reportlab.pdfbase.cidfonts import UnicodeCIDFont
from reportlab.pdfbase import pdfmetrics

をインポートして
pdfmetrics.registerFont(UnicodeCIDFont('HeiseiKakuGo-W5'))
をセットしておくだけで、基本的には使える。
ただ、使えるだけじゃ意味がない。

from reportlab.lib.styles import getSampleStyleSheet
from reportlab.platypus import Paragraph, SimpleDocTemplate
from reportlab.lib.pagesizes import letter
styles = getSampleStyleSheet()
styleN = styles['Normal']
styleH = styles['Heading1']
story = []
story.append(Paragraph("This is a Heading",styleH))
story.append(Paragraph("This is a paragraph in Normal style.", styleN))
doc = SimpleDocTemplate('mydoc.pdf',pagesize = letter)
doc.build(story)

とかで、英文であればあっさりそれっぽいPDFが作成できる。正直、グラフや表を使わない報告書ならこれで十分対応できる。

日本語だと

from reportlab.lib.styles import ParagraphStyle
styleJ = ParagraphStyle(name='Normal',
fontName='HeiseiKakuGo-W5',
alignment = 0, #or TA_LEFT, TA_CENTER, TA_RIGHT of 0, 1, 2
fontSize=10,
leading=12)

とかで、スタイルを定義してやる必要がある。仕方がないんだが面倒だなあ…
(定義してやれば、Paragraphでちゃんと書き出してくれる)

表組みを使うときも、英字であればちゃんと「右寄せ」とか「中央寄せ」とか通るのに日本語だと通らない。(Paragraphで右寄せ中央寄せは通る。だから、Paragraphで定義してやって表組みするのが正解)

pythonでなんか大量にpdfにしたいとかなら便利かも。ただ、通常はフリーソフトとか良いのがいっぱいあるし、そっち使うのが無難かと思う。組み込み向けかなあ。

0 件のコメント: