rst2pdf で日本語PDF生成
GitHub - ralsina/rst2pdf: Use a text editor. Make a PDF.
いまさらなんですが、Django Hack a thon Disc8 ハンズオン C に参加した時、講師のイアンさんと松尾さんが、資料の ReST ファイルを PDF に出力していたので、これはパクらねば、と思いたったもので。
ちなみに MacPorts 常用。PIL, Docutils, ReportLab はインストール済み。
rst2pdf のインストール
rst2pdf-0.10.1.tar.gz をダウンロードして解凍。
インストール::
$ cd rst2pdf-0.10.1 $ sudo python setup.py install ... Installing rst2pdf script to /opt/local/Library/Frameworks/Python.framework/Versions/2.5/bin ...
/opt/local/bin 以下に rst2pdf のシンボリックリンクを張っておしまい。
埋め込み用フォントをインストール
VLゴシックをダウンロードしてインストール。
- ~/Library/Fonts/VL-Gothic-Regular.ttf
- ~/Library/Fonts/VL-PGothic-Regular.ttf
実行してみる
テスト用の ReST は、ハンズオンCのドキュメントを使用(test.rst にリネーム)。
そしてtokibito さんの日本語設定を、VLゴシックだけを利用するように修正して使わせて頂きます(test.json)。
{ "embeddedFonts" : [["VL-Gothic-Regular.ttf","VL-PGothic-Regular.ttf","VL-Gothic-Regular.ttf","VL-Gothic-Regular.ttf"]], "fontsAlias" : { "stdFont": "VL-PGothic-Regular", "stdBold": "VL-PGothic-Regular", "stdItalic": "VL-PGothic-Regular", "stdMono": "VL-Gothic-Regular" }, "styles" : [ ["base" , { "wordWrap": "CJK" }], ["literal" , { "wordWrap": "None" }] ] }
スタイルシートを指定して実行
$ rst2pdf -s test.json -o test.pdf test.rst [ERROR] styles.py:218 Error processing font VL-Gothic-Regular: Can't open file "VL-Gothic-Regular.ttf" [ERROR] styles.py:219 Registering VL-Gothic-Regular.ttf as Helvetica alias Traceback (most recent call last): File "/opt/local/bin/rst2pdf", line 8, in <module> load_entry_point('rst2pdf==0.10.1', 'console_scripts', 'rst2pdf')() File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/rst2pdf-0.10.1-py2.5.egg/rst2pdf/createpdf.py", line 1435, in main footnote_backlinks=options.footnote_backlinks, File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/rst2pdf-0.10.1-py2.5.egg/rst2pdf/createpdf.py", line 94, in __init__ self.styles = sty.StyleSheet(stylesheets, fontPath, stylePath) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/rst2pdf-0.10.1-py2.5.egg/rst2pdf/styles.py", line 256, in __init__ fname, pos = findfonts.guessFont(style[key]) File "/opt/local/lib/python2.5/site-packages/rst2pdf-0.10.1-py2.5.egg/rst2pdf/findfonts.py", line 247, in guessFont family, mod = fname.split('-') ValueError: too many values to unpack
おりょ、フォントフォルダ(~/Library/Fonts)も指定しましょ。
$ rst2pdf -s test.json --font-folder="~/Library/Fonts" -o test.pdf test.rst [ERROR] styles.py:218 Error processing font VL-Gothic-Regular: Can't open file "VL-Gothic-Regular.ttf" [ERROR] styles.py:219 Registering VL-Gothic-Regular.ttf as Helvetica alias Traceback (most recent call last): File "/opt/local/bin/rst2pdf", line 8, in <module> load_entry_point('rst2pdf==0.10.1', 'console_scripts', 'rst2pdf')() File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/rst2pdf-0.10.1-py2.5.egg/rst2pdf/createpdf.py", line 1435, in main footnote_backlinks=options.footnote_backlinks, File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/rst2pdf-0.10.1-py2.5.egg/rst2pdf/createpdf.py", line 94, in __init__ self.styles = sty.StyleSheet(stylesheets, fontPath, stylePath) File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/rst2pdf-0.10.1-py2.5.egg/rst2pdf/styles.py", line 256, in __init__ fname, pos = findfonts.guessFont(style[key]) File "/opt/local/lib/python2.5/site-packages/rst2pdf-0.10.1-py2.5.egg/rst2pdf/findfonts.py", line 247, in guessFont family, mod = fname.split('-') ValueError: too many values to unpack
ありゃ、同じだ。あそか、絶対パスで指定しましょ。
$ rst2pdf -s test.json --font-folder="/Users/xxx/Library/Fonts" -o test.pdf test.rst test.rst:73: (WARNING/2) Title underline too short. poll \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3057\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002 -------------------------------------------- test.rst:73: (WARNING/2) Title underline too short. poll \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u4f5c\u6210\u3057\u3066\u3044\u304d\u307e\u3057\u3087\u3046\u3002 -------------------------------------------- [WARNING] flowables.py:386 BoundByWidth too wide to fit in frame: <BoundByWidth at 0x1a9b9e0> size= maxWidth=0x $ ls test.pdf test.pdf
おー、エラーがなくなって PDF が生成されました。