Hello World
動くかどうか確認するには Hello World が最適 (?)。
OpenOffice.org を次のような引数付きで起動して。
~/opt/ooo-dev3/program/soffice '-accept=socket,host=localhost,port=2083;urp;StarOffice.ServiceManager' -norestore"
環境変数に次の値を設定。
export LD_LIBRARY_PATH=/home/asuka/opt/ooo-dev/ure/lib export URE_BOOTSTRAP=vnd.sun.star.pathname:/home/asuka/opt/ooo-dev3/program/fundamentalrc
Ruby のコードはこう。
require 'runo' # get local component context and initialize the bridge local_ctx = Runo.get_component_context if local_ctx uno_url = "uno:socket,host=localhost,port=2083;urp;StarOffice.ComponentContext" local_smgr = local_ctx.getServiceManager # connect to OpenOffice.org resolver = local_smgr.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", local_ctx) ctx = resolver.resolve(uno_url) if ctx smgr = ctx.getServiceManager desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop", ctx) # create new Writer document doc = desktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, []) text = doc.getText text.setString("Hello World from RUNO!") end end
Ruby と UNO はメソッド名とかの相性がよくない・・・と思う。
_ でつないだ形式でもメソッドを呼べるようにしてみたけど都合上両方で呼べる。全部小文字に変換してからメソッド名を変換しなおせば元のメソッド名では呼べないようにできないことはないけど。
さっきうまくいかないと思ってたら接続時に要求するサービス名が間違ってた。