TracWikiのPDF化プラグイン、日本語の改行対応

先日のTracWikiをPDF化する件ですが、どうも日本語で長文を書いたときに自動的に改行されずに、ページをはみ出してました。
英語の長文を適当に突っ込んでPDF変換するとちゃんと単語間(スペースの部分)で改行されるので、どうもコレはwordWrap辺りの問題ではないかと。
「linebreak」でpisaの下のソースを当たってみると reportlab_paragraph.py というファイルの925-929行目に

if style.wordWrap == 'CJK':
    #use Asian text wrap algorithm to break characters
    blPara = self.breakLinesCJK([first_line_width, later_widths])
else:
    blPara = self.breakLines([first_line_width, later_widths])

とゆー記述が。
reportLabのドキュメントによると、たぶんParagraphStyleってclassのwordWrapを「CJK」に書き換えれば良いと思うのですが、pisa経由でソース追っかけて行ったら良くわかんなくなってきて・・・結局。

if style.wordWrap == 'CJK':
   #use Asian text wrap algorithm to break characters
   blPara = self.breakLinesCJK([first_line_width, later_widths])
else:
   blPara = self.breakLinesCJK([first_line_width, later_widths])

と言うベタな対応(まぁ基本的に日本語でしか書かないし)。
禁則処理とか右端の揃い方にちょっと不満はあるのですが、その辺はもうちょい時間のある時にでも。

TracWikiのPDF化プラグイン

今まで趣味の事と下らない事しか書いてなかったので、これからはちょっとプログラム系のネタも一緒に載せてみようかなと。

で、仕事でプロジェクト管理とかにTracとゆーソフトを使ってるのですが。これにプロジェクト管理用のWikiがくっついてまして。仕様とか議事録とかメモとかを書いとくのに重宝してまして。
で、コレをそのまんまPDFにできないかなーと思ってググった所。
http://d.hatena.ne.jp/penguin_niisan/20100209/1265674139
でバッチリ紹介されてました。
http://trac-hacks.org/wiki/TracWikiPrintPlugin から TraicWikiPrintPluginとゆーモノを使えば良いようで。

ウチの環境はCentOS5.4+Python2.4.3+Trac0.11で。大体こちらのサイトに書いてある通りで問題なかったのですが、
http://www.daionet.gr.jp/~knok/trac/trac.cgi/wiki/pisa-l10n
から持ってきたPatchがeasy_install でインストールしたPISAとのバージョン違い(pisa-3.0.32)で通らなかったので、パッチの内容を見ながら直接
/usr/lib/python2.4/site-packages/pisa-3.0.32-py2.4.egg/sx/pisa3/pisa_context.py
を修正しました。

で、先のサイトでも書かれてる通りHeiseiKakuGo-W5だと、英数字がズレる。(普通にReportLabでHeiseiKakuGo-W5使うときはこんなにズレないんだけどなぁ・・・)
なので http://mix-mplus-ipa.sourceforge.jp/ からIPAフォント系を取ってきて、/usr/share/fonts/ja/TrueType/ の下にごそっとコピー。loadTTFontを組み込んでOKかなーと思ってたんですが、ここでちょっとハマリ。どうもReportLabにフォントパスが通ってないみたいで・・・結局
self.loadTTFont(['ipag','ipag'],’/usr/share/fonts/ja/TrueType/ipag.ttf’)
self.loadTTFont(['ipamp','ipamp'],’/usr/share/fonts/ja/TrueType/ipamp.ttf’)
self.fontList['helvetica'] = ‘ipamp’

と、フルパスでフォントの設定したら上手く行きました。

ちなみに設定は trac.ini に
[components]
wikiprint.* = enabled

[wikiprint]
toc_title = “{ ブックで出力する時のタイトル }”
#CSS and content files (or URLS, using http://…)
#css_url=c:/path/to/file.css
#article_css_url=c:/path/to/article.css
#book_css_url=c:/path/to/book.css
#frontpage_url=c:/path/to/frontpage.html
#extracontent_url=c:/path/to/extracontent.html

みたいな感じでokでした。
まだやってないけど、PDF出力のフォーマットやヘッダフッタ設定は上記のcssとかhtmlで出来るみたい。書式は
http://www.xhtml2pdf.com/doc/pisa-en.pdf
を参照で。