ひよっこ。

I want to…

TracWikiExportPluginをインストールしてみた。

Posted by hikaruworld : 2009 5月 30

Tracで仕様などを管理しているとやはり問題になるのが納品の際のドキュメント。
HTMLのまま納品出来ないとなると手作業でwordなりPDFなりに変換する必要が出てくる。
さすがにそれは面倒なので、何かいいプラグインがないかなとあさっていたところ、TracWikiExportPluginという、
便利なプラグインを発見。これ幸いとインストールしてみた。

ほかにいくつかあったんだけどmiau’s blog?でも言及されているようにHTMLDoc使っているのが多くて日本語に対応していないという罠が多い。
その一方でこのTracWikiExportPuginはBeautifulSoupを利用してHTMLを解析しているっぽいので日本語もOKだった。

色々はまってしまい、無駄に疲れたので、とりあえず作業ログを残しておく。

色々環境の制約がきついが、自環境向けにHackしようにあまりに範囲が広すぎたので、
別途仮想環境上に構築した。

まず大前提として以下の環境が必要。
1. OpenOffice2.4.2(OpenOffice3.0だと引数エラーで動かない。)
2. Python2.5.X(Python2.6以降だと自環境がCentOS5.3のくせにこんなエラーになる”)

なお、OpenOfficeが必要なのはPDFの生成機構はOpenOfficeのAPIを利用(python-uno)しているため。

とりあえず、WikiExportPlugin を参考にしながら必要な物をインストールしていく。
あ、ちなみにtracのバージョンは0.11.4-ja1になります。

  1. python-unoのインストール
  2. BeautifulSoupのインストール
  3. python-imaging-library
  4. WikiExportPluginをインストール(これが目的)

1. Python-unoのインストール

Python-UnoはOpenOfficeに含まれているので、OpenOfficeをインストールする。
Openoffice.org/の左のメニューから旧版(2.4.2)でJRE付きをダウンロードしてsetupでインストール。

なお、OpenOfficeをインストールしただけではPythonからは参照できないので、
PYTHON_DIR/lib/python2.5.2/site-package/にuno.pthを作成し、/opt/openoffice.org2.4/programを設定する。

以下、動作確認。

   # python
   >>> import uno
   /opt/openoffice.org2.4/program/uno.py:37: RuntimeWarning: Python C API version mismatch for module
   pyuno: This Python has API version 1013, module pyuno has version 1012.
     import pyuno

pythonのバージョン関連で警告が出ているがとりあえず流す。OpenOfficeは内部的にpython2.3系を使っているらしいのでその辺が原因?

2. BeautifulSoupをインストール

http://www.crummy.com/software/BeautifulSoup/ からダウンロード。バージョンは3.1.0.1。
setup.pyでインストール。
話はずれるが、BeautifulSoupは大変便利ですー。

3. python-imaging-libraryのインストール

http://www.pythonware.com/products/pil/ をダウンロードしてインストール。
いつも通りsetup.pyで。

4. WikiExportPluginをインストール

http://trac-hacks.org/wiki/WikiExportPlugin をダウンロードしてインストール(svnの最新版をダウンロードした)。
いつも通り…以下省略。
あ、これはtracのプラグインなので忘れずに有効化しておく事。

で、必要なものはインストール完了。

以下、実際の起動まで。
まずは、OpenOfficeの起動。

soffice -display :0.0 "-accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" -headless &

LISTENされているか起動確認。

netstat -anp | grep 8100
tcp        0      0 127.0.0.1:8100              0.0.0.0:*                   LISTEN      3373/soffice.bin    

とりあえず、ここを参考にpython-unoからOpenOfficeに接続できるか確認しておく。

import uno
local = uno.getComponentContext()
resolver = local.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local)
context = resolver.resolve("uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext")

問題なく接続される事を確認。

次はTracから。
インストールが問題なく完了していれば、画面下部の【異なるフォーマットでダウンロード】の部分にテキスト以外に、

  • Export DOC
  • Exoprt PDF
  • Export ODT

が増えているはず。

今回の目的はPDFなので早速クリックしてみる…
前に、trac.iniに必要な以下の設定を追記する。

[openOffice-exporter]
user = 認証が必要な際のユーザ名
psswrd = 認証が必要な際のパスワード
host = 接続干すと。要するにsofficeのhost=の値
port = 接続ポート。要するにsofficeのport=の値
styles = OpenOfficeでの書式設定。要するに、【標準, 見出し 1, 見出し 2, 見出し 3】
enum-styles = OpenOfficeでの箇条書きの設定。要するに【箇条書き 1, 箇条書き 2, 箇条書き 3】
num-styles = OpenOfficeでの番号付けの設定。要するに【番号付け 1, 番号付け 2, 番号付け 3】

ちょっと混乱したのが、sytlesやenum-stylesやnum-stylesの設定。
これは、要するに以下の値の設定が必要らしく、全く同じ物を設定する必要がある。
sytles — 文字のスタイル。
enum-styles — 書式→段落→番号付けスタイルの番号を設定する際のスタイル。
num-styles — 書式→段落→番号付けスタイルの箇条書きを設定する際のスタイル。

また、半角スペースの適切な設定も必要。
もし設定が間違っていた場合はエラーになる。
特に見出しなどは、深さが深い場合は任意の見出しの深さを設定する必要がある。

で、以下が出力したPDFの結果。
TracGuideをPDFで出力してみた。
マクロのレンダリングがうまく出来ていないが日本語入力も問題なく出力され、必要なHTMLのみ解釈できている事を確認。

というか、ソースとか見ていたらやけに知らない単語があるなーと思ったら、
作成されたのはスペイン語圏の人だったらしい〜。

ちなみに最新版だと、WikiTemplateConfというページを設定することで出力される
任意のPDFにテンプレートを埋め込む事が出来るっぽい?のだけど、試してみたらエラーになったので、
また眠いのでまた後日。。。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

 
%d人のブロガーが「いいね」をつけました。