前回のマクロでは,OOo 1.1.0 からエラーが発生するようになってしまったので,再度調査しなおしました.com.sun.star.drawing.GraphicExportFilterを使えばいいみたいです.
ちょっと感動したのは,JavaからOpenOfficeのドキュメントって操作できるようですね.そうすると,いまはJakarta POIを使ってますが,Calcとかを使った方がはるかに簡単にできそうな雰囲気があります.ここら辺のドキュメントが充実するとすごく楽しいことができると思うのですが…
このページが大変役にたちました.OOoMacrosというページもあるようです.どうやら,コマンドラインからマクロを呼び出すことも可能なようです.次のような行を含むバッチファイルを用意しておけばいいようですが,手元では確認できてません.
Sub Main
sxi2svg()
End Sub
Sub sxi2svg
Dim mNoArgs()
Dim sUrl As String
Dim mFileProperties(2) As New com.sun.star.beans.PropertyValue
on error goto LBL_EXIT
‘docNameのデフォルト値
‘docName = “file:///C:/documents/presentation.sxi”
docName = “C:/documents/presentation.sxi”
InputVal = InputBox( _
“変換するプレゼンテーションファイル名を入力してください。:”, _
“Input presentation file name”, docName _
)
If InputVal = null Then
MsgBox “変換するプレゼンテーションファイル名が指定されませんでした”
Exit Sub
Endif
docName = InputVal
‘ Open Document
oDesktop = createUnoService(“com.sun.star.frame.Desktop”)
oDoc = oDesktop.loadComponentFromURL( _
ConvertToURL(docName), “_blank”, 0, mNoArgs() _
)
slideNum = oDoc.getDrawPages().getCount()
oDoc.dispose()
noSuffixName = Left(docName, Len(docName)-4)
oGraphic=CreateUnoService(“com.sun.star.drawing.GraphicExportFilter”)
oDoc = oDesktop.loadComponentFromURL( _
ConvertToURL(docName), “_blank”, 0, mNoArgs() _
)
For i = 0 to slideNum – 1
oPage=oDoc.drawPages(i)
oGraphic.setSourceDocument(oPage)
saveName = noSuffixName + formatNum(i+1)
sUrl = ConvertToURL(saveName + “.svg”)
mFileProperties(0).Name = “URL”
mFileProperties(0).Value = sUrl
mFileProperties(1).Name = “Overwrite”
mFileProperties(1).Value = TRUE
mFileProperties(2).Name = “MediaType”
mFileProperties(2).Value = “image/svg+xml”
oGraphic.filter(mFileProperties())
Next i
oDoc.dispose()
Exit Sub
LBL_EXIT:
MsgBox “エラーが発生しました.”
End Sub
Function formatNum(num)
ret = “000”
If i < 10 Then
ret = "00"+CSTR(num)
ElseIf i < 100 Then
ret = "0"+CSTR(num)
Else
ret = CSTR(num)
Endif
formatNum() = ret
End Function