Top > OOoPython > LocalContext

ローカルコンテキスト Edit

ローカルコンテキストのみで OOo のサービスなどを使用します。

概要 Edit

OOo に pipe や tcp/ip などで接続せずに (起動した OOo のインスタンスなしで) OOo のライブラリを使用します。この場合、OOo を bootstrap で起動する必要がありません。

  0
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
import sys
sys.path.append("E:\\usr\\local\\OOo\\OOo2.4.1\\program")
 
import uno
import unohelper
 
localContext = uno.getComponentContext()
 
unohelper.addComponentsToContext(
    localContext, localContext, ("streams.uno",),
    "com.sun.star.loader.SharedLibrary")
 
pipe = localContext.ServiceManager.createInstanceWithContext(
    "com.sun.star.io.Pipe", localContext )
 
pipe.writeBytes( uno.ByteSequence( "abc" ) )
ret,seq = pipe.readBytes( None, 3 )
 
 
print ret

unohelper に定義済みの addComponentsToContext メソッドを使用して使用するサービスを追加します。

addComponentContext( toBeExtendedContext, contextRuntime, componentUrls, loaderName )

コンポーネントファイル Edit

コンポーネントが実装されているファイル名を知る必要があります。services.rdb ファイルに記載されているデータから調べることが出来ます。OpenOffice.org SDK に含まれている regview が必要です。

OpenOffice.org/program にパスが通っている状態で次のようにします。

regview services.rdb > services.rdb.txt

たとえば、上記の com.sun.star.io.Pipe サービスは次のように記載されています。

/
 / IMPLEMENTATIONS
  / com.sun.star.comp.io.stm.Pipe
    / UNO
      / ACTIVATOR
        Value: Type = RG_VALUETYPE_STRING
               Size = 34
               Data = "com.sun.star.loader.SharedLibrary"

      / SERVICES
        / com.sun.star.io.Pipe
      / LOCATION
        Value: Type = RG_VALUETYPE_STRING
               Size = 44
               Data = "vnd.sun.star.expand:$ORIGIN/streams.uno.dll"

これを見ると、com.sun.star.io.Pipe サービスは com.sun.star.comp.io.stm.Pipe コンポーネントにより実装されており、コンポーネントの本体は streams.uno.dll (Windows) にあります。$ORIGIN は OOo をインストールしたディレクトリの program ディレクトリに置換されます。


Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes