]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/lib/pdfwin.py
updates from Andrea, plus some fixes
[wxWidgets.git] / wxPython / wx / lib / pdfwin.py
index 9f884671eb83834a19d048f33b3332ccc08c0a78..9dbec22ba035d95c7f8f69c396718f2a7dbb332b 100644 (file)
@@ -1,6 +1,6 @@
 #----------------------------------------------------------------------
 # Name:        wx.lib.pdfwin
 #----------------------------------------------------------------------
 # Name:        wx.lib.pdfwin
-# Purpose:     A class that allows the use of the Acrobat PSF reader
+# Purpose:     A class that allows the use of the Acrobat PDF reader
 #              ActiveX control
 #
 # Author:      Robin Dunn
 #              ActiveX control
 #
 # Author:      Robin Dunn
 # Copyright:   (c) 2004 by Total Control Software
 # Licence:     wxWindows license
 #----------------------------------------------------------------------
 # Copyright:   (c) 2004 by Total Control Software
 # Licence:     wxWindows license
 #----------------------------------------------------------------------
-# This module was generated by the wx.activex.GernerateAXModule class
-# (See also the genaxmodule script.)
 
 import wx
 
 import wx
-import wx.activex
 
 
-clsID = '{CA8A9780-280D-11CF-A24D-444553540000}'
-progID = 'PDF.PdfCtrl.5'
+#----------------------------------------------------------------------
+
+_acroversion = None
+
+def get_acroversion():
+    " Return version of Adobe Acrobat executable or None"
+    global _acroversion
+    if _acroversion == None:
+        import _winreg
+        acrosoft = [r'SOFTWARE\Adobe\Acrobat Reader\%version%\InstallPath',
+                    r'SOFTWARE\Adobe\Adobe Acrobat\%version%\InstallPath',]
+            
+        for regkey in acrosoft:
+            for version in ('7.0', '6.0', '5.0', '4.0'):
+                try:
+                    path = _winreg.QueryValue(_winreg.HKEY_LOCAL_MACHINE,
+                                              regkey.replace('%version%', version))
+                    _acroversion = version
+                    break
+                except:
+                    continue
+    return _acroversion
+
+#----------------------------------------------------------------------
+
+# The ActiveX module from Acrobat 7.0 has changed and it seems to now
+# require much more from the container than what our wx.activex module
+# provides.  If we try to use it via wx.activex then Acrobat crashes.
+# So instead we will use Internet Explorer (via the win32com modules
+# so we can use better dynamic dispatch) and embed the Acrobat control
+# within that.  Acrobat provides the IAcroAXDocShim COM class that is
+# accessible via the IE window's Document property after a PDF file
+# has been loaded.
+#
+# Details of the Acrobat reader methods can be found in
+# http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/iac/IACOverview.pdf
+# http://partners.adobe.com/public/developer/en/acrobat/sdk/pdf/iac/IACReference.pdf
+#
+# Co-ordinates passed as parameters are in points (1/72 inch).
+
+
+if get_acroversion() >= '7.0':
+
+    from wx.lib.activexwrapper import MakeActiveXClass
+    import win32com.client.gencache
+    _browserModule = win32com.client.gencache.EnsureModule(
+        "{EAB22AC0-30C1-11CF-A7EB-0000C05BAE0B}", 0, 1, 1)
+
+    class PDFWindowError(RuntimeError):
+        def __init__(self):
+            RuntimeError.__init__(self, "A PDF must be loaded before calling this method.")
+            
+
+    class PDFWindow(wx.Panel):
+        def __init__(self, *args, **kw):
+            wx.Panel.__init__(self, *args, **kw)
+            
+            # Make a new class that derives from the WebBrowser class
+            # in the COM module imported above.  This class also
+            # derives from wxWindow and implements the machinery
+            # needed to integrate the two worlds.
+            _WebBrowserClass = MakeActiveXClass(_browserModule.WebBrowser)
+            self.ie = _WebBrowserClass(self, -1)
+            sizer = wx.BoxSizer()
+            sizer.Add(self.ie, 1, wx.EXPAND)
+            self.SetSizer(sizer)
+
+            
+        def LoadFile(self, fileName):
+            """
+            Opens and displays the specified document within the browser.
+            """
+            if self.ie.Document:
+                return self.ie.Document.LoadFile(fileName)
+            else:
+                self.ie.Navigate2(fileName)
+                return True  # can we sense failure at this point?
+            
+        def GetVersions(self):
+            """
+            Deprecated: No longer available - do not use.
+            """
+            if self.ie.Document:
+                return self.ie.Document.GetVersions()
+            else:
+                raise PDFWindowError()
+            
+        def Print(self):
+            """
+            Prints the document according to the specified options in a user dialog box.
+            """
+            if self.ie.Document:
+                return self.ie.Document.Print()
+            else:
+                raise PDFWindowError()
+            
+        def goBackwardStack(self):
+            """
+            Goes to the previous view on the view stack, if it exists.
+            """
+            if self.ie.Document:
+                return self.ie.Document.goBackwardStack()
+            else:
+                raise PDFWindowError()
+
+        def goForwardStack(self):
+            """
+            Goes to the next view on the view stack, if it exists.
+            """
+            if self.ie.Document:
+                return self.ie.Document.goForwardStack()
+            else:
+                raise PDFWindowError()
+
+        def gotoFirstPage(self):
+            """
+            Goes to the first page in the document.
+            """
+            if self.ie.Document:
+                return self.ie.Document.gotoFirstPage()
+            else:
+                raise PDFWindowError()
+
+        def gotoLastPage(self):
+            """
+            Goes to the last page in the document.
+            """
+            if self.ie.Document:
+                return self.ie.Document.gotoLastPage()
+            else:
+                raise PDFWindowError()
+
+        def gotoNextPage(self):
+            """
+            Goes to the next page in the document, if it exists
+            """
+            if self.ie.Document:
+                return self.ie.Document.gotoNextPage()
+            else:
+                raise PDFWindowError()
+
+        def gotoPreviousPage(self):
+            """
+            Goes to the previous page in the document, if it exists.
+            """
+            if self.ie.Document:
+                return self.ie.Document.gotoPreviousPage()
+            else:
+                raise PDFWindowError()
+
+        def printAll(self):
+            """
+            Prints the entire document without displaying a user
+            dialog box.  The current printer, page settings, and job
+            settings are used.  This method returns immediately, even
+            if the printing has not completed.
+            """
+            if self.ie.Document:
+                return self.ie.Document.printAll()
+            else:
+                raise PDFWindowError()
+
+        def printAllFit(self, shrinkToFit):
+            """
+            Prints the entire document without a user dialog box, and
+            (if shrinkToFit) shrinks pages as needed to fit the
+            imageable area of a page in the printer.
+            """
+            if self.ie.Document:
+                return self.ie.Document.printAllFit(shrinkToFit)
+            else:
+                raise PDFWindowError()
 
 
+        def printPages(self, from_, to):
+            """
+            Prints the specified pages without displaying a user dialog box.
+            """
+            if self.ie.Document:
+                return self.ie.Document.printPages(from_, to)
+            else:
+                raise PDFWindowError()
 
 
+        def printPagesFit(self, from_, to, shrinkToFit):
+            """
+            Prints the specified pages without displaying a user
+            dialog box, and (if shrinkToFit) shrinks pages as needed
+            to fit the imageable area of a page in the printer.
+            """
+            if self.ie.Document:
+                return self.ie.Document.printPagesFit( from_, to, shrinkToFit)
+            else:
+                raise PDFWindowError()
+
+        def printWithDialog(self):
+            """
+            Prints the document according to the specified options in
+            a user dialog box. These options may include embedded
+            printing and specifying which printer is to be used.
+            
+            NB. The page range in the dialog defaults to
+            'From Page 1 to 1' - Use Print() above instead. (dfh) 
+            """
+            if self.ie.Document:
+                return self.ie.Document.printWithDialog()
+            else:
+                raise PDFWindowError()
+
+        def setCurrentHighlight(self, a, b, c, d):
+            if self.ie.Document:
+                return self.ie.Document.setCurrentHighlight(a, b, c, d)
+            else:
+                raise PDFWindowError()
+
+        def setCurrentPage(self, npage):
+            """
+            Goes to the specified page in the document.  Maintains the
+            current location within the page and zoom level.  npage is
+            the page number of the destination page.  The first page
+            in a document is page 0.
+            
+            ## Oh no it isn't! The first page is 1 (dfh)
+            """
+            if self.ie.Document:
+                return self.ie.Document.setCurrentPage(npage)
+            else:
+                raise PDFWindowError()
+
+        def setLayoutMode(self, layoutMode):
+            """
+            LayoutMode possible values:
+            
+                =================  ====================================
+                'DontCare'         use the current user preference
+                'SinglePage'       use single page mode (as in pre-Acrobat
+                                   3.0 viewers)
+                'OneColumn'        use one-column continuous mode
+                'TwoColumnLeft'    use two-column continuous mode, first
+                                   page on the left
+                'TwoColumnRight'   use two-column continuous mode, first
+                                   page on the right
+                =================  ====================================
+            """
+            if self.ie.Document:
+                return self.ie.Document.setLayoutMode(layoutMode)
+            else:
+                raise PDFWindowError()
+
+        def setNamedDest(self, namedDest):
+            """
+            Changes the page view to the named destination in the specified string.
+            """
+            if self.ie.Document:
+                return self.ie.Document.setNamedDest(namedDest)
+            else:
+                raise PDFWindowError()
+
+        def setPageMode(self, pageMode):
+            """
+            Sets the page mode to display the document only, or to
+            additionally display bookmarks or thumbnails.  pageMode =
+            'none' or 'bookmarks' or 'thumbs'.
+            
+            ## NB.'thumbs' is case-sensitive, the other are not (dfh)
+            """   
+            if self.ie.Document:
+                return self.ie.Document.setPageMode(pageMode)
+            else:
+                raise PDFWindowError()
+
+        def setShowScrollbars(self, On):
+            """
+            Determines whether scrollbars will appear in the document
+            view.
+
+            ## NB. If scrollbars are off, the navigation tools disappear as well (dfh)
+            """
+            if self.ie.Document:
+                return self.ie.Document.setShowScrollbars(On)
+            else:
+                raise PDFWindowError()
+
+        def setShowToolbar(self, On):
+            """
+            Determines whether a toolbar will appear in the application.
+            """
+            if self.ie.Document:
+                return self.ie.Document.setShowToolbar(On)
+            else:
+                raise PDFWindowError()
+
+        def setView(self, viewMode):
+            """
+            Determines how the page will fit in the current view.
+            viewMode possible values:
+
+                ========  ==============================================
+                'Fit'     fits whole page within the window both vertically
+                          and horizontally.
+                'FitH'    fits the width of the page within the window.
+                'FitV'    fits the height of the page within the window.
+                'FitB'    fits bounding box within the window both vertically
+                          and horizontally.
+                'FitBH'   fits the width of the bounding box within the window.
+                'FitBV'   fits the height of the bounding box within the window.
+                ========  ==============================================
+            """
+            if self.ie.Document:
+                return self.ie.Document.setView(viewMode)
+            else:
+                raise PDFWindowError()
+
+        def setViewRect(self, left, top, width, height):
+            """
+            Sets the view rectangle according to the specified coordinates.
+
+            :param left:   The upper left horizontal coordinate.
+            :param top:    The vertical coordinate in the upper left corner.
+            :param width:  The horizontal width of the rectangle.
+            :param height: The vertical height of the rectangle.
+            """
+            if self.ie.Document:
+                return self.ie.Document.setViewRect(left, top, width, height)
+            else:
+                raise PDFWindowError()
+
+        def setViewScroll(self, viewMode, offset):
+            """
+            Sets the view of a page according to the specified string.
+            Depending on the view mode, the page is either scrolled to
+            the right or scrolled down by the amount specified in
+            offset. Possible values of viewMode are as in setView
+            above. offset is the horizontal or vertical coordinate
+            positioned either at the left or top edge.
+            """    
+            if self.ie.Document:
+                return self.ie.Document.setViewScroll(viewMode, offset)
+            else:
+                raise PDFWindowError()
+
+        def setZoom(self, percent):
+            """
+            Sets the magnification according to the specified value
+            expressed as a percentage (float)
+            """
+            if self.ie.Document:
+                return self.ie.Document.setZoom(percent)
+            else:
+                raise PDFWindowError()
+
+        def setZoomScroll(self, percent, left, top):
+            """
+            Sets the magnification according to the specified value,
+            and scrolls the page view both horizontally and vertically
+            according to the specified amounts.
+            
+            :param left:  the horizontal coordinate positioned at the left edge.
+            :param top:   the vertical coordinate positioned at the top edge.
+            """
+            if self.ie.Document:
+                return self.ie.Document.setZoomScroll(percent, left, top)
+            else:
+                raise PDFWindowError()
 
 
-# Derive a new class from ActiveXWindow
-class PDFWindow(wx.activex.ActiveXWindow):
-    def __init__(self, parent, ID=-1, pos=wx.DefaultPosition,
-                 size=wx.DefaultSize, style=0, name='PDFWindow'):
-        wx.activex.ActiveXWindow.__init__(self, parent,
-            wx.activex.CLSID('{CA8A9780-280D-11CF-A24D-444553540000}'),
-            ID, pos, size, style, name)
         
         
-    # Methods exported by the ActiveX object
-    def LoadFile(self, fileName):
-        return self.CallAXMethod('LoadFile', fileName)
 
 
-    def setShowToolbar(self, On):
-        return self.CallAXMethod('setShowToolbar', On)
+else:
+    import wx.activex
+
+    clsID = '{CA8A9780-280D-11CF-A24D-444553540000}'
+    progID = 'AcroPDF.PDF.1'
+
+
+    # Create eventTypes and event binders
+    wxEVT_Error = wx.activex.RegisterActiveXEvent('OnError')
+    wxEVT_Message = wx.activex.RegisterActiveXEvent('OnMessage')
+
+    EVT_Error = wx.PyEventBinder(wxEVT_Error, 1)
+    EVT_Message = wx.PyEventBinder(wxEVT_Message, 1)
+
 
 
-    def gotoFirstPage(self):
-        return self.CallAXMethod('gotoFirstPage')
+    # Derive a new class from ActiveXWindow
+    class PDFWindow(wx.activex.ActiveXWindow):
+        def __init__(self, parent, ID=-1, pos=wx.DefaultPosition,
+                     size=wx.DefaultSize, style=0, name='PDFWindow'):
+            wx.activex.ActiveXWindow.__init__(self, parent,
+                     wx.activex.CLSID('{CA8A9780-280D-11CF-A24D-444553540000}'),
+                     ID, pos, size, style, name)
 
 
-    def gotoLastPage(self):
-        return self.CallAXMethod('gotoLastPage')
+        # Methods exported by the ActiveX object
+        def QueryInterface(self, riid):
+            return self.CallAXMethod('QueryInterface', riid)
 
 
-    def gotoNextPage(self):
-        return self.CallAXMethod('gotoNextPage')
+        def AddRef(self):
+            return self.CallAXMethod('AddRef')
 
 
-    def gotoPreviousPage(self):
-        return self.CallAXMethod('gotoPreviousPage')
+        def Release(self):
+            return self.CallAXMethod('Release')
 
 
-    def setCurrentPage(self, n):
-        return self.CallAXMethod('setCurrentPage', n)
+        def GetTypeInfoCount(self):
+            return self.CallAXMethod('GetTypeInfoCount')
 
 
-    def goForwardStack(self):
-        return self.CallAXMethod('goForwardStack')
+        def GetTypeInfo(self, itinfo, lcid):
+            return self.CallAXMethod('GetTypeInfo', itinfo, lcid)
 
 
-    def goBackwardStack(self):
-        return self.CallAXMethod('goBackwardStack')
+        def GetIDsOfNames(self, riid, rgszNames, cNames, lcid):
+            return self.CallAXMethod('GetIDsOfNames', riid, rgszNames, cNames, lcid)
 
 
-    def setPageMode(self, pageMode):
-        return self.CallAXMethod('setPageMode', pageMode)
+        def Invoke(self, dispidMember, riid, lcid, wFlags, pdispparams):
+            return self.CallAXMethod('Invoke', dispidMember, riid, lcid, wFlags, pdispparams)
 
 
-    def setLayoutMode(self, layoutMode):
-        return self.CallAXMethod('setLayoutMode', layoutMode)
+        def LoadFile(self, fileName):
+            return self.CallAXMethod('LoadFile', fileName)
 
 
-    def setNamedDest(self, namedDest):
-        return self.CallAXMethod('setNamedDest', namedDest)
+        def setShowToolbar(self, On):
+            return self.CallAXMethod('setShowToolbar', On)
 
 
-    def Print(self):
-        return self.CallAXMethod('Print')
+        def gotoFirstPage(self):
+            return self.CallAXMethod('gotoFirstPage')
 
 
-    def printWithDialog(self):
-        return self.CallAXMethod('printWithDialog')
+        def gotoLastPage(self):
+            return self.CallAXMethod('gotoLastPage')
 
 
-    def setZoom(self, percent):
-        return self.CallAXMethod('setZoom', percent)
+        def gotoNextPage(self):
+            return self.CallAXMethod('gotoNextPage')
 
 
-    def setZoomScroll(self, percent, left, top):
-        return self.CallAXMethod('setZoomScroll', percent, left, top)
+        def gotoPreviousPage(self):
+            return self.CallAXMethod('gotoPreviousPage')
 
 
-    def setView(self, viewMode):
-        return self.CallAXMethod('setView', viewMode)
+        def setCurrentPage(self, n):
+            return self.CallAXMethod('setCurrentPage', n)
 
 
-    def setViewScroll(self, viewMode, offset):
-        return self.CallAXMethod('setViewScroll', viewMode, offset)
+        def goForwardStack(self):
+            return self.CallAXMethod('goForwardStack')
 
 
-    def setViewRect(self, left, top, width, height):
-        return self.CallAXMethod('setViewRect', left, top, width, height)
+        def goBackwardStack(self):
+            return self.CallAXMethod('goBackwardStack')
 
 
-    def printPages(self, from_, to):
-        return self.CallAXMethod('printPages', from_, to)
+        def setPageMode(self, pageMode):
+            return self.CallAXMethod('setPageMode', pageMode)
 
 
-    def printPagesFit(self, from_, to, shrinkToFit):
-        return self.CallAXMethod('printPagesFit', from_, to, shrinkToFit)
+        def setLayoutMode(self, layoutMode):
+            return self.CallAXMethod('setLayoutMode', layoutMode)
 
 
-    def printAll(self):
-        return self.CallAXMethod('printAll')
+        def setNamedDest(self, namedDest):
+            return self.CallAXMethod('setNamedDest', namedDest)
 
 
-    def printAllFit(self, shrinkToFit):
-        return self.CallAXMethod('printAllFit', shrinkToFit)
+        def Print(self):
+            return self.CallAXMethod('Print')
 
 
-    def setShowScrollbars(self, On):
-        return self.CallAXMethod('setShowScrollbars', On)
+        def printWithDialog(self):
+            return self.CallAXMethod('printWithDialog')
 
 
-    def AboutBox(self):
-        return self.CallAXMethod('AboutBox')
+        def setZoom(self, percent):
+            return self.CallAXMethod('setZoom', percent)
+
+        def setZoomScroll(self, percent, left, top):
+            return self.CallAXMethod('setZoomScroll', percent, left, top)
+
+        def setView(self, viewMode):
+            return self.CallAXMethod('setView', viewMode)
+
+        def setViewScroll(self, viewMode, offset):
+            return self.CallAXMethod('setViewScroll', viewMode, offset)
+
+        def setViewRect(self, left, top, width, height):
+            return self.CallAXMethod('setViewRect', left, top, width, height)
+
+        def printPages(self, from_, to):
+            return self.CallAXMethod('printPages', from_, to)
+
+        def printPagesFit(self, from_, to, shrinkToFit):
+            return self.CallAXMethod('printPagesFit', from_, to, shrinkToFit)
+
+        def printAll(self):
+            return self.CallAXMethod('printAll')
+
+        def printAllFit(self, shrinkToFit):
+            return self.CallAXMethod('printAllFit', shrinkToFit)
+
+        def setShowScrollbars(self, On):
+            return self.CallAXMethod('setShowScrollbars', On)
+
+        def GetVersions(self):
+            return self.CallAXMethod('GetVersions')
+
+        def setCurrentHighlight(self, a, b, c, d):
+            return self.CallAXMethod('setCurrentHighlight', a, b, c, d)
+
+        def postMessage(self, strArray):
+            return self.CallAXMethod('postMessage', strArray)
+
+        # Getters, Setters and properties
+        def _get_src(self):
+            return self.GetAXProp('src')
+        def _set_src(self, src):
+            self.SetAXProp('src', src)
+        src = property(_get_src, _set_src)
+
+        def _get_messageHandler(self):
+            return self.GetAXProp('messageHandler')
+        def _set_messageHandler(self, messageHandler):
+            self.SetAXProp('messageHandler', messageHandler)
+        messagehandler = property(_get_messageHandler, _set_messageHandler)
 
 
 #  PROPERTIES
 #  --------------------
 
 
 #  PROPERTIES
 #  --------------------
+#  src
+#      type:string  arg:string  canGet:True  canSet:True
+#  
+#  messagehandler
+#      type:VT_VARIANT  arg:VT_VARIANT  canGet:True  canSet:True
+#  
 #  
 #  
 #  
 #  METHODS
 #  --------------------
 #  
 #  
 #  
 #  METHODS
 #  --------------------
+#  QueryInterface
+#      retType:  VT_VOID
+#      params:
+#          riid
+#              in:True  out:False  optional:False  type:unsupported type 29
+#          ppvObj
+#              in:False  out:True  optional:False  type:unsupported type 26
+#  
+#  AddRef
+#      retType:  int
+#  
+#  Release
+#      retType:  int
+#  
+#  GetTypeInfoCount
+#      retType:  VT_VOID
+#      params:
+#          pctinfo
+#              in:False  out:True  optional:False  type:int
+#  
+#  GetTypeInfo
+#      retType:  VT_VOID
+#      params:
+#          itinfo
+#              in:True  out:False  optional:False  type:int
+#          lcid
+#              in:True  out:False  optional:False  type:int
+#          pptinfo
+#              in:False  out:True  optional:False  type:unsupported type 26
+#  
+#  GetIDsOfNames
+#      retType:  VT_VOID
+#      params:
+#          riid
+#              in:True  out:False  optional:False  type:unsupported type 29
+#          rgszNames
+#              in:True  out:False  optional:False  type:unsupported type 26
+#          cNames
+#              in:True  out:False  optional:False  type:int
+#          lcid
+#              in:True  out:False  optional:False  type:int
+#          rgdispid
+#              in:False  out:True  optional:False  type:int
+#  
+#  Invoke
+#      retType:  VT_VOID
+#      params:
+#          dispidMember
+#              in:True  out:False  optional:False  type:int
+#          riid
+#              in:True  out:False  optional:False  type:unsupported type 29
+#          lcid
+#              in:True  out:False  optional:False  type:int
+#          wFlags
+#              in:True  out:False  optional:False  type:int
+#          pdispparams
+#              in:True  out:False  optional:False  type:unsupported type 29
+#          pvarResult
+#              in:False  out:True  optional:False  type:VT_VARIANT
+#          pexcepinfo
+#              in:False  out:True  optional:False  type:unsupported type 29
+#          puArgErr
+#              in:False  out:True  optional:False  type:int
+#  
 #  LoadFile
 #      retType:  bool
 #      params:
 #          fileName
 #  LoadFile
 #      retType:  bool
 #      params:
 #          fileName
-#              in:False  out:False  optional:False  type:string
+#              in:True  out:False  optional:False  type:string
 #  
 #  setShowToolbar
 #      retType:  VT_VOID
 #      params:
 #          On
 #  
 #  setShowToolbar
 #      retType:  VT_VOID
 #      params:
 #          On
-#              in:False  out:False  optional:False  type:bool
+#              in:True  out:False  optional:False  type:bool
 #  
 #  gotoFirstPage
 #      retType:  VT_VOID
 #  
 #  gotoFirstPage
 #      retType:  VT_VOID
@@ -141,7 +623,7 @@ class PDFWindow(wx.activex.ActiveXWindow):
 #      retType:  VT_VOID
 #      params:
 #          n
 #      retType:  VT_VOID
 #      params:
 #          n
-#              in:False  out:False  optional:False  type:int
+#              in:True  out:False  optional:False  type:int
 #  
 #  goForwardStack
 #      retType:  VT_VOID
 #  
 #  goForwardStack
 #      retType:  VT_VOID
@@ -153,19 +635,19 @@ class PDFWindow(wx.activex.ActiveXWindow):
 #      retType:  VT_VOID
 #      params:
 #          pageMode
 #      retType:  VT_VOID
 #      params:
 #          pageMode
-#              in:False  out:False  optional:False  type:string
+#              in:True  out:False  optional:False  type:string
 #  
 #  setLayoutMode
 #      retType:  VT_VOID
 #      params:
 #          layoutMode
 #  
 #  setLayoutMode
 #      retType:  VT_VOID
 #      params:
 #          layoutMode
-#              in:False  out:False  optional:False  type:string
+#              in:True  out:False  optional:False  type:string
 #  
 #  setNamedDest
 #      retType:  VT_VOID
 #      params:
 #          namedDest
 #  
 #  setNamedDest
 #      retType:  VT_VOID
 #      params:
 #          namedDest
-#              in:False  out:False  optional:False  type:string
+#              in:True  out:False  optional:False  type:string
 #  
 #  Print
 #      retType:  VT_VOID
 #  
 #  Print
 #      retType:  VT_VOID
@@ -177,61 +659,61 @@ class PDFWindow(wx.activex.ActiveXWindow):
 #      retType:  VT_VOID
 #      params:
 #          percent
 #      retType:  VT_VOID
 #      params:
 #          percent
-#              in:False  out:False  optional:False  type:double
+#              in:True  out:False  optional:False  type:double
 #  
 #  setZoomScroll
 #      retType:  VT_VOID
 #      params:
 #          percent
 #  
 #  setZoomScroll
 #      retType:  VT_VOID
 #      params:
 #          percent
-#              in:False  out:False  optional:False  type:double
+#              in:True  out:False  optional:False  type:double
 #          left
 #          left
-#              in:False  out:False  optional:False  type:double
+#              in:True  out:False  optional:False  type:double
 #          top
 #          top
-#              in:False  out:False  optional:False  type:double
+#              in:True  out:False  optional:False  type:double
 #  
 #  setView
 #      retType:  VT_VOID
 #      params:
 #          viewMode
 #  
 #  setView
 #      retType:  VT_VOID
 #      params:
 #          viewMode
-#              in:False  out:False  optional:False  type:string
+#              in:True  out:False  optional:False  type:string
 #  
 #  setViewScroll
 #      retType:  VT_VOID
 #      params:
 #          viewMode
 #  
 #  setViewScroll
 #      retType:  VT_VOID
 #      params:
 #          viewMode
-#              in:False  out:False  optional:False  type:string
+#              in:True  out:False  optional:False  type:string
 #          offset
 #          offset
-#              in:False  out:False  optional:False  type:double
+#              in:True  out:False  optional:False  type:double
 #  
 #  setViewRect
 #      retType:  VT_VOID
 #      params:
 #          left
 #  
 #  setViewRect
 #      retType:  VT_VOID
 #      params:
 #          left
-#              in:False  out:False  optional:False  type:double
+#              in:True  out:False  optional:False  type:double
 #          top
 #          top
-#              in:False  out:False  optional:False  type:double
+#              in:True  out:False  optional:False  type:double
 #          width
 #          width
-#              in:False  out:False  optional:False  type:double
+#              in:True  out:False  optional:False  type:double
 #          height
 #          height
-#              in:False  out:False  optional:False  type:double
+#              in:True  out:False  optional:False  type:double
 #  
 #  printPages
 #      retType:  VT_VOID
 #      params:
 #          from
 #  
 #  printPages
 #      retType:  VT_VOID
 #      params:
 #          from
-#              in:False  out:False  optional:False  type:int
+#              in:True  out:False  optional:False  type:int
 #          to
 #          to
-#              in:False  out:False  optional:False  type:int
+#              in:True  out:False  optional:False  type:int
 #  
 #  printPagesFit
 #      retType:  VT_VOID
 #      params:
 #          from
 #  
 #  printPagesFit
 #      retType:  VT_VOID
 #      params:
 #          from
-#              in:False  out:False  optional:False  type:int
+#              in:True  out:False  optional:False  type:int
 #          to
 #          to
-#              in:False  out:False  optional:False  type:int
+#              in:True  out:False  optional:False  type:int
 #          shrinkToFit
 #          shrinkToFit
-#              in:False  out:False  optional:False  type:bool
+#              in:True  out:False  optional:False  type:bool
 #  
 #  printAll
 #      retType:  VT_VOID
 #  
 #  printAll
 #      retType:  VT_VOID
@@ -240,22 +722,58 @@ class PDFWindow(wx.activex.ActiveXWindow):
 #      retType:  VT_VOID
 #      params:
 #          shrinkToFit
 #      retType:  VT_VOID
 #      params:
 #          shrinkToFit
-#              in:False  out:False  optional:False  type:bool
+#              in:True  out:False  optional:False  type:bool
 #  
 #  setShowScrollbars
 #      retType:  VT_VOID
 #      params:
 #          On
 #  
 #  setShowScrollbars
 #      retType:  VT_VOID
 #      params:
 #          On
-#              in:False  out:False  optional:False  type:bool
+#              in:True  out:False  optional:False  type:bool
 #  
 #  
-#  AboutBox
+#  GetVersions
+#      retType:  VT_VARIANT
+#  
+#  setCurrentHightlight
+#      retType:  VT_VOID
+#      params:
+#          a
+#              in:True  out:False  optional:False  type:int
+#          b
+#              in:True  out:False  optional:False  type:int
+#          c
+#              in:True  out:False  optional:False  type:int
+#          d
+#              in:True  out:False  optional:False  type:int
+#  
+#  setCurrentHighlight
+#      retType:  VT_VOID
+#      params:
+#          a
+#              in:True  out:False  optional:False  type:int
+#          b
+#              in:True  out:False  optional:False  type:int
+#          c
+#              in:True  out:False  optional:False  type:int
+#          d
+#              in:True  out:False  optional:False  type:int
+#  
+#  postMessage
 #      retType:  VT_VOID
 #      retType:  VT_VOID
+#      params:
+#          strArray
+#              in:True  out:False  optional:False  type:VT_VARIANT
 #  
 #  
 #  
 #  
 #  EVENTS
 #  --------------------
 #  
 #  
 #  
 #  
 #  EVENTS
 #  --------------------
+#  Error
+#      retType:  VT_VOID
+#  
+#  Message
+#      retType:  VT_VOID
+#  
 #  
 #  
 #  
 #  
 #  
 #