Hatena::ブログ(Diary)

湘南ぱいそん RSSフィード

2009-10-09

Sphinxで日本語PDFを生成する


Sphinxには拡張モジュールの機構があり、PDF生成にrst2pdfを指定できます。

rst2pdf: http://code.google.com/p/rst2pdf/
ReportLab: http://www.reportlab.org/subversion.html

rst2pdfのtrunkにあるドキュメント(manual.txt)にSphinxについてのセクションがあります。(PDF版ではありません!)

http://code.google.com/p/rst2pdf/source/browse/trunk/doc/manual.txt

ここに記述があるようにSphinxプロジェクトのconf.pyを設定します。

conf.py
pdf_documents = [ 
    ('index', u'OutPut_FileName', u'Doc Title', u'Author Name'),
]
pdf_stylesheets = ['sphinx','kerning','a4','ja']

スタイルシートは、rst2pdfパッケージの rst2pdf/styles の中から選択して pdf_stylesheets に設定します。
日本語の文章ではwordwrapをCJKに設定すると良きに計らってくれます。
ja.jsonをSphinxプロジェクトのすぐ下に置いておけば、このスタイルシートを見つけてくれます。

ja.json
{
  "styles" : [
    ["base" , {
      "wordWrap": "CJK"
    }]
  ]
}

次に、SphinxプロジェクトのMakefileにpdfターゲットを追加します。

Makefile
pdf:
	$(SPHINXBUILD) -b pdf $(ALLSPHINXOPTS) _build/pdf
	@echo
	@echo "Build finished. The PDF files are in _build/pdf."

ここからが苦労したのですが、rst2pdf、ReportLabともに昨日時点の最新版では動作しません。rst2pdfはrev.1059、ReportLabはrev.3511(ReportLab 2.3でOK!)で動作しました。これ以降だとエラーが出るので誰か直して
いくつかバグがあるようなので、issueを上げておきました。 対応パッチはこちら

rst2pdf rev.808辺りでSphinx対応機能が追加されているのですが、rev.845でymasudaさんのaafigure日本語対応パッチが入っているので、それより新しいのがお勧めです。

A book typeset using sphinx and rst2pdf

PDFファイルを生成するには、Sphinxプロジェクト配下で make pdf を実行します。 _build/pdf 配下にpdfが生成されます。

$ make pdf

これで、Sphinxドキュメントから日本語PDFが生成できます! enjoy :)