2015-06-16 53 views
2

任何人都知道如何在libreoffice安裝中獲取可用輸出過濾器名稱的列表(與--headless --convert-to選項一起使用)? 深入搜索後,我剛剛找到一個列表here,但沒有如何閱讀可用的一個。libreoffice輸出過濾器名稱

回答

1

這裏是生成列表的代碼。我通過點擊「主題上一頁」鏈接找到它。我也稍微清理了一下,並更改了LibreOffice的樣式名稱。

Sub PrintFilterNames 
    oFF = createUnoService("com.sun.star.document.FilterFactory") 
    oFilterNames = oFF.getElementNames() 

    ' Now print the filter names. 
    ' For i = LBound(oFilterNames) To UBound(oFilterNames) 
    ' Print oFilterNames(i) 
    ' Next 

    ' Create a Writer doc and save the filter names to it. 
    oDoc = StarDesktop.loadComponentFromURL("private:factory/swriter", "_blank", 0, Array()) 
    oText = oDoc.getText() 
    oCursor = oText.createTextCursor() 
    oCursor.gotoEnd(False) 

    oText.insertString(oCursor, "Filter Names", False) 
    oCursor.ParaStyleName = "Heading 1" 
    InsertParaBreak(oText, oCursor) 
    oCursor.ParaStyleName = "Default Style" 
    InsertParaBreak(oText, oCursor) 

    ' Print the filter names into a Writer document. 
    For i = LBound(oFilterNames) To UBound(oFilterNames) 
     oText.insertString(oCursor, oFilterNames(i), False) 
     InsertLineBreak(oText, oCursor) 
    Next 
    InsertParaBreak(oText, oCursor) 
    InsertParaBreak(oText, oCursor) 
    oText.insertString(oCursor, "Filter Names and their Properties", False) 
    oCursor.ParaStyleName = "Heading 1" 
    InsertParaBreak(oText, oCursor) 
    oCursor.ParaStyleName = "Default Style" 

    ' Tab stops at: 
    ' 0.25 inch (2.54 cm x 0.25) 
    ' 0.50 inch (2.54 cm x 0.50) 
    ' 2.00 inch (2.54 cm x 2.00) 
    oCursor.ParaTabStops = Array(_ 
     MakeTabStop(2540 * 0.25),_ 
     MakeTabStop(2540 * 0.50),_ 
     MakeTabStop(2540 * 2.00)) 

    ' Print the filter names and their parameters. 
    For i = LBound(oFilterNames) To UBound(oFilterNames) 
     InsertParaBreak(oText, oCursor) 

     cFilterName = oFilterNames(i) 
     aFilterProps = oFF.getByName(cFilterName) 

     oText.insertString(oCursor, cFilterName, False) 

     For j = LBound(aFilterProps) To UBound(aFilterProps) 
      oFilterProp = aFilterProps(j) 

      InsertLineBreak(oText, oCursor) 
      oText.insertString(oCursor, CHR(9)+oFilterProp.Name, False) 

      nFilterPropValueVarType = VarType(oFilterProp.Value) 
      If nFilterPropValueVarType = 8201 Then 
      ' VarType 8201 means a sequence of PropertyValue's. 
      oFilterPropNames = oFilterProp.Value 
      For k = LBound(oFilterPropNames) To UBound(oFilterPropNames) 
       InsertLineBreak(oText, oCursor) 
       oText.insertString(oCursor, CHR(9)+CHR(9)+_ 
       oFilterPropNames(k).Name+CHR(9)+CSTR(oFilterPropNames(k).Value), False) 
      Next k 
      ElseIf nFilterPropValueVarType = 8200 Then 
       ' VarType 8200 means a sequence of Strings. 
       oFilterPropNames = oFilterProp.Value 
       For k = LBound(oFilterPropNames) To UBound(oFilterPropNames) 
        InsertLineBreak(oText, oCursor) 
        oText.insertString(oCursor, CHR(9)+CHR(9)+ oFilterPropNames(k), False) 
       Next k 
       ElseIf nFilterPropValueVarType> 1 And nFilterPropValueVarType<= 12 Then 
        oText.insertString(oCursor, CHR(9)+CSTR(oFilterProp.Value), False) 
       Else 
       oText.insertString(oCursor, CHR(9)+"?? unknown type ?? - "+CSTR(nFilterPropValueVarType), False) 

      EndIf 
     Next j 

     InsertParaBreak(oText, oCursor) 
    Next i 

    InsertParaBreak(oText, oCursor) 
End Sub 

Private Sub InsertLineBreak(oText, oCursor) 
    oText.insertControlCharacter(oCursor, com.sun.star.text.ControlCharacter.LINE_BREAK, False) 
End Sub 

Private Sub InsertParaBreak(oText, oCursor) 
    oText.insertControlCharacter(oCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False) 
End Sub 


' Create and return a tab stop. 
' An array of what this function returns, is used 
' to set the tab stops of a paragraph. 
' 
' Parameters.... 
' nPosition - position in tab stop, in 1000'th of cm. 
' nAlign - optional, if specified, must be one of... 
' com.sun.star.style.TabAlign.LEFT = 0 

' com.sun.star.style.TabAlign.CENTER = 1 
' com.sun.star.style.TabAlign.RIGHT = 2 
' com.sun.star.style.TabAlign.DECIMAL = 3 
' com.sun.star.style.TabAlign.DEFAULT = 4 

' cDecimalChar - optional, if specified, only applies to a DECIMAL tab stop, 
' and specified the character which is recognized as 
' the decimal point separator. 
' cFillChar - optional, if specified, specifies the char that fills the space 
' between tab stops. 
Private Function MakeTabStop(ByVal nPosition As Long,_ 
     Optional nAlign,_ 
     Optional cDecimalChar,_ 
     Optional cFillChar _ 
     ) As com.sun.star.style.TabStop 
    If IsMissing(nAlign) Then 
     nAlign = com.sun.star.style.TabAlign.LEFT 
    EndIf 

    oTabStop = createUnoStruct("com.sun.star.style.TabStop") 

    oTabStop.Position = nPosition 
    oTabStop.Alignment = nAlign 

    If Not IsMissing(cDecimalChar) Then 
     oTabStop.DecimalChar = cDecimalChar 
    EndIf 
    If Not IsMissing(cFillChar) Then 
     oTabStop.FillChar = cFillChar 
    EndIf 

    MakeTabStop() = oTabStop 
End Function 
+0

這是辦公室的宏。它將過濾器信息插入到當前的辦公文檔中。它可以從'Tools-Macros-Edit Macros'運行。我不得不用''Standard'替換'Default Style''來成功運行它。最後,我得到了一個類似'libreoffice --headless --convert-to html:「XHTML編寫器文件」outfile.html infile.ott'的命令。 – user3132194