DEFAULT_OPENOFFICE_PORT = 8100

import sys
import uno
from os.path import abspath, isfile, splitext
from com.sun.star.beans import PropertyValue
from com.sun.star.task import ErrorCodeIOException
from com.sun.star.connection import NoConnectException

def _toFileUrl(path):
    return uno.systemPathToFileUrl(abspath(path))

def _toProperties(dict):
    props = []
    for key in dict:
        prop = PropertyValue()
        prop.Name = key
        prop.Value = dict[key]
        props.append(prop)
    return tuple(props)

if __name__ == "__main__":
    from sys import argv, exit

    if len(argv) < 2:
        print "USAGE: python %s <input-file>" % argv[0]
        exit(255)
    if not isfile(argv[1]):
        print "File not found: %s" % argv[1]
        exit(2)

    try:
        inputFile = argv[1]
        port=DEFAULT_OPENOFFICE_PORT
        localContext = uno.getComponentContext()
        resolver = localContext.ServiceManager.createInstanceWithContext("com.sun.star.bridge.UnoUrlResolver", localContext)
        context = resolver.resolve("uno:socket,host=localhost,port=%s;urp;StarOffice.ComponentContext" % port)
        desktop = context.ServiceManager.createInstanceWithContext("com.sun.star.frame.Desktop", context)

        inputUrl = _toFileUrl(inputFile)

        loadProperties = { "Hidden": True, "ReadOnly": True }

        try:        
            document = desktop.loadComponentFromURL(inputUrl, "_blank", 0, _toProperties(loadProperties))
            try:
                document.refresh()
            except AttributeError:
                pass
    
            pagesCount = document.getDrawPages().getCount()
            print pagesCount
        finally:
            document.close(True)

    except NoConnectException as detail:
        print "No Connection: ", detail
        exit(1)
    except:
        print "Error occurred: ", sys.exc_info()

        exit(3)

    exit(0)