rst2pdfを使うには

設計書をTracのWikiに書いて、後でPDFで出力できないか?というお話があったので、調べてみた。Tracが標準でサポートしているReStructuredText(以下ReST)をだったらPDFに変換できました。たぶんそれをうまく使えばTrac/Wikiで管理している設計書をPDFにできるんじゃなかろうか、ということでメモ。使ったものはPythonで書かれているrst2pdf。世の中これ以外にもrst2latexしてそっからplatex2dvi->dvi2pdfっていう手順を踏むとか、RubyでかかれたReSTを使うとか、ありましたよ。

TracにあるデータをPDFにするんだったら、XML-RPCを使ってWikiからデータ引っこ抜いて"{{{","}}}"をうまくなんとかやっつければ、そのまま変換できますな。

インストール

注意

easy_installを使ってインストールすることもできるけど、ソースを落としてきてコンパイルとかして、こけるこける><easy_installはまだネイティブコードのない奴に限る気がする。

試した環境

最初Windows XP 64bit Professional/Python 2.5って環境でやってたけど、上記の注意で書いたとおり、コンパイル環境を構築できずに断念した。

手順

1. 依存するライブラリからインストールしていく。

rst2pdfが依存するライブラリはPython Imaging Library (PIL)UniConvertorReportLabの3つ。この順にインストールするが、Ubuntuの場合すべてaptitudeでインストール可。PILはPython2.5に同梱されていますのでインストールする必要ないかも。

sudo aptitude install python-imaging
sudo aptitude install python-uniconvertor
sudo aptitude install python-reportlab

2. ".uniconvertor"ディレクトリをホームディレクトリに作る

なんかよくわかんないけど、コマンド叩くと怒られるので、作りました。

mkdir .uniconvertor

3. フォントの設定を書く

日本語のReSTファイルを変換すると文字化けして見えるのは、埋め込まれるフォントが対応していないから。ということでフォントの設定を書きます。フォントの設定等、デフォルトのスタイルは"rst2pdf --print-stylesheet"を叩くとstdoutに出力されるのでそこからファイルに落とします。

rst2pdf --print-stylesheet > rst2pdf_default.style

次に出力されたrst2pdf_default.styleの

    ["normal" , {
      "parent": "base"
    }],

    ["normal" , {
      "fontName": "IPAMonaPGothic"
    }],

と言うように、今使ってる標準truetypeフォントに切り替えました。標準で使っているフォント名が分かんない場合は

fc-match

ってやると出力されているフォントだとおもわれ。

4. いよいよ変換してみる。
標準でないフォントの場合、フォントの配置場所を指定する必要があります。指定しない場合は検索するためめっさ時間がかかるので、探しておいた方が幸せでしょう。今回の場合は下記のようにしたらうまく出力されました。

rst2pdf [RSTファイル名] -s rst2pdf_default.style -o [出力PDFファイル名] --font-path /usr/share/fonts/truetype/ipamona

なおrst2pdfはフィルタとしても使えるので結構ReSTで書かれている文章があれば使えるツールではないでしょうか?サンプルではこんな例が紹介されてました。

curl http://docutils.sourceforge.net/docs/user/rst/quickstart.txt | rst2pdf > quickstart.pdf

rst2pdfのマニュアル
ReSTテキスト PDFばーじょん