2015年9月1日火曜日

パスワードでロックされた LibreOffice Writer ファイルをスクリプトで他のフォーマットに変換

ファイルがパスワードでロックされていない場合は $ unoconv --format html NotPassworded.odt$ loffice --headless --convert-to html NotPassworded.odt で変換することができます。 (この場合は NotPassworded.odt を html フォーマットに変換しています。)

しかし、パスワードでロックされている場合、調べた限りでは unoconv や loffice コマンドではファイルを開くことができないようですが、python の uno モジュールを使うとパスワードでロックされたファイルにもアクセスできるようなので試してみました。


環境
Ubuntu 14.04 (Trusty Tahr) Server

unoconv をインストール

$ sudo apt-get install unoconv

unoconv をリスナーとして開始

$ unoconv --listener &

以下実行

$ python3
>>> import uno
>>> from com.sun.star.beans import PropertyValue
>>>
>>> oContext = uno.getComponentContext()
>>> oResolver = oContext.ServiceManager.createInstanceWithContext('com.sun.star.bridge.UnoUrlResolver', oContext)
>>> oCtx = oResolver.resolve('uno:socket,host=127.0.0.1,port=2002;urp;StarOffice.ComponentContext')
>>> oSmgr = oCtx.ServiceManager
>>> oDesktop = oSmgr.createInstanceWithContext('com.sun.star.frame.Desktop', oCtx)
>>>
>>> oPropertyPasswd = PropertyValue()
>>> oPropertyPasswd.Name = 'Password'
>>> oPropertyPasswd.Value = 'hogehoge'
>>> oDoc = oDesktop.loadComponentFromURL('file:////home/worker/Desktop/Passworded.odt', '_blank', 0, (oPropertyPasswd,))
>>> assert oDoc != None
>>>
>>> oPropertyFilterName = PropertyValue()
>>> oPropertyFilterName.Name = 'FilterName'
>>> oPropertyFilterName.Value = 'HTML (StarWriter)'
>>> oDoc.storeAsURL('file:////home/worker/Desktop/Converted.html', (oPropertyFilterName,))
>>> oDoc.dispose()

パスワードでロックされた Passworded.odt から html に変換された Converted.html が作成されました。


0 件のコメント:

コメントを投稿