Macでrst2pdfを使ってヒラギノなPDFを作成する。

http://sphinx-users.jp/cookbook/pdf/rst2pdf.html

を参考にさせて頂きました。

準備

macportssphinxとrst2pdfを入れます。

% sudo port install sphinx
% sudo port install rst2pdf

今回使用したバージョンは

です。

なお、参考にさせていただいたページではIPAフォントなどを使っていますが、Macなのでヒラギノフォントを使います。なので、フォントを別途インストールする必要はありません。

プロジェクトの作成

いつも通りに sphinx-quickstart コマンドを利用してドキュメントを作ります。

conf.pyの編集

前述のrst2pdfのページを参考にしてください。
extentionに追加するほかは、

pdf_documents = [
    ('index', u'MyProject', u'My Project', u'Author Name'),
]
pdf_stylesheets = ['sphinx','kerning','a4','ja']
pdf_language = "ja"

ぐらいですかね。自分が試した限り、pdf_font_pathを設定する必要はありませんでした。

PDFの設定を追加

以下の内容をトップディレクトリ(Makefileがあるところ)にja.jsonというファイル名をつけて置きます。

{
    "embeddedFonts" :
    [[
	"HiraKakuPro-W3.otf",
	"HiraKakuPro-W6.otf",
	"HiraKakuStd-W8.otf",
	"HiraKakuStdN-W8.otf",
	"HiraMaruPro-W4.otf",
	"HiraMaruProN-W4.otf",
	"HiraMinPro-W3.otf",
	"HiraMinPro-W6.otf"
    ]],
    "fontsAlias" : {
        "stdFont": "HiraKakuPro-W3.otf",
        "stdBold": "HiraKakuPro-W3.otf",
        "stdItalic":"HiraKakuPro-W3.otf",
        "stdMono": "HiraKakuPro-W3.otf"
    },
    "styles" : [
        ["base" , {
            "wordWrap": "CJK",
	    "fontName": "HiraKakuPro-W3"
        }],
        ["literal" , {
            "wordWrap": "None"
        }],
        ["normal" , {
	    "fontName": "HiraKakuPro-W3"
        }],
        ["title" , {
	    "fontName": "HiraKakuPro-W3"
        }]
     ]
 }

全部は必要ではない気がしますが、まあ気にしないでおきます。おそらくembeddedFontsとか実は設定の意味が無いのではないかという気もしますが、よく分かりません。また、いろいろ試した末に落ち着いたので、もしかしたら実は他の設定が必要なのかもしれません。出来ない人がいましたら、ご連絡くださるとなにか対応ができるかもしれません。

コマンドの追加

MakefileにPDFのコマンドを追加します。ちなみに、Makefileの行頭はタブです。空白ではないのでご注意を。

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

れっつ まけ !

ここでおもむろに make pdf と叩きます。

[ERROR] findfonts.py:318 Error registering font: ヒラキ?ノ丸コ? ProN W4 from /Library/Fonts/ヒラキ?ノ丸コ? ProN W4.otf

というエラーが大量に出ますが、無事にpdfが作成できました。

ちなみに、

このエラーは rst2pdfのfindfonts.pyから呼び出される、 reportlabのTTFontから出てくるようです。具体的には、pdfbase/ttfonts.pyの中の、TTFontFile.extractInfo(self, charInfo)で発生しているようです。

ここから先はフォントの規格とかヘッダの構造とかが絡んでくるようで、諦めました。そのうち識者がやってくれると思っています。