python で日本語の pdf を作成する

reportlab というのを使うのが良いらしい。
ただ、一つだけよくわからなくて少し探したので、書いておく。
基本的に英語前提なので、改行や空白が入っていないと、改行をしてくれない。
なので、スタイルには、wordWrap = 'CJK' を指定しないといけません。

以下、ベースになる様にサンプル。
環境は、Linux Mint Debian の、64bit。takaoGothic はあとから入れています。

#!/usr/bin/python
# -*- coding: utf-8 -*-
import os,sys

from reportlab.pdfbase.ttfonts import TTFont
from reportlab.pdfbase import pdfmetrics

from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Image
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.rl_config import defaultPageSize
#from reportlab.lib.enums import TA_LEFT, TA_RIGHT, TA_CENTER, TA_JUSTIFY
from reportlab.lib.pagesizes import A4

# フォント読み込み
pdfmetrics.registerFont(TTFont('Gothic','TakaoPGothic.ttf'))

# スタイル設定
def setStyleParam2J( style ):
    style.fontName = 'Gothic'
    style.wordWrap  ='CJK'
styles = getSampleStyleSheet()
for name in ('Normal', 'BodyText', 'Title', 'Heading1', 'Heading2', 'Heading3',
             'Heading4', 'Heading5', 'Heading6', 'Bullet', 'Definition',
             'Code', ):
    setStyleParam2J(styles[name])

# 本文の作成
Story = []
Story.append(Paragraph("タイトルです", styles['Title']))
Story.append(Paragraph("Heading 1", styles['Heading1']))
Story.append(Paragraph("Heading 2", styles['Heading2']))
Story.append(Paragraph("Heading 3", styles['Heading3']))
Story.append(Paragraph("Heading 4", styles['Heading4']))
Story.append(Paragraph("Heading 5", styles['Heading5']))
Story.append(Paragraph("Heading 6", styles['Heading6']))
Story.append(Paragraph("Bullet", styles['Bullet']))
txt = ("長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。\n"
       "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。"
       "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。"
       "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。"
       "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。"
       "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。"
       "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。"
       "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。"
       "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。"
       "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。"
       "長い長い本文を書かなくてはいけないのだが、面倒なので、これの繰り返しです。")
Story.append(Paragraph("Normal"+txt, styles['Normal']))
Story.append(Paragraph("Definition"+txt, styles['Definition']))
Story.append(Paragraph("Code:"+txt, styles['Code']))
Story.append(Paragraph("Body:"+txt,styles['BodyText']))

# 出力
doc = SimpleDocTemplate('doc.pdf', pagesize=A4 )
doc.build(Story)

このあたりなどを参考に。
http://mogawa.blogspot.jp/2008_04_01_archive.html
http://www.blog.pythonlibrary.org/2010/03/08/a-simple-step-by-step-reportlab-tutorial/