SphinxでPDF出力する方法は以下の2つがあるらしい。

  • rst2pdf
  • Latex

以下のページを参考にした。
SphinxでPDFファイル作成 :: ドキュメンテーションツール スフィンクス Sphinx-users.jp
今回はWindows環境で、rst2pdfを使う方法を試してみた。

環境

  • Windows 7 64bit
  • Python 2.6
  • Sphinx1.1.3

rst2pdf設計方法

rst2pdfを手に入れる

easy_installに対応しているので、コマンドプロンプトから以下のコマンドを叩きます。

easy_install rst2pdf

そうすると、すんなりいかないでしょう。

Pythonモジュールである、PILやReportLabをインストールするところで失敗します。

PILの入手@Winodows64bit version

Windows 64bitユーザはPILを以下のサイトから手に入れます。

ReportLabの入手@Winodows64bit version

ReportLabのインストールは注意が必要です。version2.6ではなくて、2.5を入れます。

以下のサイトにありました。

2.6を入れると以下の様なエラーが発生して、PDF作成に失敗しました。

これは、既知障害っぽいです。

https://code.google.com/p/rst2pdf/issues/detail?id=474

$ rst2pdf -s ja -font-path=C:\Windows\Fonts index.rst

Traceback (most recent call last):

File “/usr/bin/rst2pdf”, line 8, in

load_entry_point(‘rst2pdf==0.92’, ‘console_scripts’, ‘rst2pdf’)()

File “/usr/lib/python2.6/site-packages/rst2pdf-0.92-py2.6.egg/rst2pdf/createpdf.py”, line 1445, in main

section_header_depth=int(options.section_header_depth),

File “/usr/lib/python2.6/site-packages/rst2pdf-0.92-py2.6.egg/rst2pdf/createpdf.py”, line 183, in __init__

self.loadStyles(stylesheets)

File “/usr/lib/python2.6/site-packages/rst2pdf-0.92-py2.6.egg/rst2pdf/createpdf.py”, line 276, in loadStyles

def_dpi=self.def_dpi)

File “/usr/lib/python2.6/site-packages/rst2pdf-0.92-py2.6.egg/rst2pdf/styles.py”, line 527, in __init__

reportlab.platypus.tables.CellStyle1.fontname=self[‘base’].fontName

AttributeError: ‘module’ object has no attribute ‘CellStyle1’

日本語フォントのインストール

PDF出力をするためには、日本語フォントを追加する必要があります。

以下の2つをそれぞれダウンロードします。

それぞれ、拡張子がttfのファイルをWindowsのフォントフォルダにコピーします。

  • VL-Gothic-Regular.ttf
  • VL-PGothic-Regular.ttf
  • ipag.ttf
  • ipam.ttf

C:\Windows\Fonts

rst2pdfがインストールできたかの確認

試しにSphinxのindex.rstをpdfに変換します。

以下のコマンドを叩いて、index.pdfが生成出来れば成功です。

rst2pdf -s ja --font-path=C:\Windows\Fonts index.rst

Sphinxの設定

各RSTファイルへの実行は成功するようになったので、全てのRSTファイルをまとめて実行できるように、Sphinxの設定ファイルをいじります。

Makefileの修正

まずは、make pdfが実行できるように、Makefileの終わりに以下を追加します。

Makefileの常識で、先頭の空白は必ずタブにします。

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

conf.pyの修正

conf.pyにrst2pdfを実行する際のオプションを設定します。

extensions = ['rst2pdf.pdfbuilder']

pdf_documents = [
    ('index', u'MyProject', u'My Project', u'Author Name'),
]

# A comma-separated list of custom stylesheets. Example:
pdf_stylesheets = ['sphinx','kerning','a4','ja']

import os
font_dir = os.path.abspath(os.path.join(os.path.split(__file__)[0], os.pardir, 'fonts'))
pdf_font_path = [font_dir, 'C:\WINDOWS\Fonts']

pdf_language = "ja"

フォントの指定

最後にフォントを指定するための設定ファイルを作ります。

ja.jsonという名前で、以下の内容を追記します。

{
  "embeddedFonts" : [
    [
        "VL-Gothic-Regular.ttf",
        "VL-PGothic-Regular.ttf",
        "ipam.ttf",
        "ipag.ttf"
     ]
  ],
  "fontsAlias" : {
    "stdFont": "VL-PGothic-Regular",
    "stdBold": "VL-PGothic-Regular",
    "stdItalic": "VL-PGothic-Regular",
    "stdBoldItalic": "VL-PGothic-Regular",
    "stdMono": "VL-PGothic-Regular",
    "stdMonoBold": "VL-PGothic-Regular",
    "stdSanBold": "VL-PGothic-Regular",
    "stdSansBold": "VL-PGothic-Regular"
  },
  "styles" : [
    ["base" , {
      "wordWrap": "CJK"
    }],
    ["literal" , {
      "wordWrap": "None"
    }]
  ]
}

PDFを生成する

以下のコマンドで、_build/pdf配下にPDFが生成されます。

make pdf

image