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 はメソッド名とかの相性がよくない・・・と思う。
_ でつないだ形式でもメソッドを呼べるようにしてみたけど都合上両方で呼べる。全部小文字に変換してからメソッド名を変換しなおせば元のメソッド名では呼べないようにできないことはないけど。

さっきうまくいかないと思ってたら接続時に要求するサービス名が間違ってた。