⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pdfwin.py

📁 Wxpython Implemented on Windows CE, Source code
💻 PY
📖 第 1 页 / 共 2 页
字号:
#----------------------------------------------------------------------
# Name:        wx.lib.pdfwin
# Purpose:     A class that allows the use of the Acrobat PSF reader
#              ActiveX control
#
# Author:      Robin Dunn
#
# Created:     22-March-2004
# RCS-ID:      $Id: pdfwin.py,v 1.3 2006/07/17 20:54:02 RD Exp $
# Copyright:   (c) 2004 by Total Control Software
# Licence:     wxWindows license
#----------------------------------------------------------------------

import wx

#----------------------------------------------------------------------

_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 Docuemnt property after a PDF file
# has been loaded.

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):
            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):
            if self.ie.Document:
                return self.ie.Document.GetVersions()
            else:
                raise PDFWindowError()
            
        def Print(self):
            if self.ie.Document:
                return self.ie.Document.Print()
            else:
                raise PDFWindowError()
            
        def goBackwardStack(self):
            if self.ie.Document:
                return self.ie.Document.goBackwardStack()
            else:
                raise PDFWindowError()

        def goForwardStack(self):
            if self.ie.Document:
                return self.ie.Document.goForwardStack()
            else:
                raise PDFWindowError()

        def gotoFirstPage(self):
            if self.ie.Document:
                return self.ie.Document.gotoFirstPage()
            else:
                raise PDFWindowError()

        def gotoLastPage(self):
            if self.ie.Document:
                return self.ie.Document.gotoLastPage()
            else:
                raise PDFWindowError()

        def gotoNextPage(self):
            if self.ie.Document:
                return self.ie.Document.gotoNextPage()
            else:
                raise PDFWindowError()

        def gotoPreviousPage(self):
            if self.ie.Document:
                return self.ie.Document.gotoPreviousPage()
            else:
                raise PDFWindowError()

        def printAll(self):
            if self.ie.Document:
                return self.ie.Document.printAll()
            else:
                raise PDFWindowError()

        def printAllFit(self, shrinkToFit):
            if self.ie.Document:
                return self.ie.Document.printAllFit()
            else:
                raise PDFWindowError()

        def printPages(self, from_, to):
            if self.ie.Document:
                return self.ie.Document.printPages()
            else:
                raise PDFWindowError()

        def printPagesFit(self, from_, to, shrinkToFit):
            if self.ie.Document:
                return self.ie.Document.printPagesFit()
            else:
                raise PDFWindowError()

        def printWithDialog(self):
            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()
            else:
                raise PDFWindowError()

        def setCurrentHightlight(self, a, b, c, d):
            if self.ie.Document:
                return self.ie.Document.setCurrentHightlight()
            else:
                raise PDFWindowError()

        def setCurrentPage(self, n):
            if self.ie.Document:
                return self.ie.Document.setCurrentPage()
            else:
                raise PDFWindowError()

        def setLayoutMode(self, layoutMode):
            if self.ie.Document:
                return self.ie.Document.setLayoutMode()
            else:
                raise PDFWindowError()

        def setNamedDest(self, namedDest):
            if self.ie.Document:
                return self.ie.Document.setNamedDest()
            else:
                raise PDFWindowError()

        def setPageMode(self, pageMode):
            if self.ie.Document:
                return self.ie.Document.setPageMode()
            else:
                raise PDFWindowError()

        def setShowScrollbars(self, On):
            if self.ie.Document:
                return self.ie.Document.setShowScrollbars()
            else:
                raise PDFWindowError()

        def setShowToolbar(self, On):
            if self.ie.Document:
                return self.ie.Document.setShowToolbar()
            else:
                raise PDFWindowError()

        def setView(self, viewMode):
            if self.ie.Document:
                return self.ie.Document.setView()
            else:
                raise PDFWindowError()

        def setViewRect(self, left, top, width, height):
            if self.ie.Document:
                return self.ie.Document.setViewRect()
            else:
                raise PDFWindowError()

        def setViewScroll(self, viewMode, offset):
            if self.ie.Document:
                return self.ie.Document.setViewScroll()
            else:
                raise PDFWindowError()

        def setZoom(self, percent):
            if self.ie.Document:
                return self.ie.Document.setZoom()
            else:
                raise PDFWindowError()

        def setZoomScroll(self, percent, left, top):
            if self.ie.Document:
                return self.ie.Document.setZoomScroll()
            else:
                raise PDFWindowError()

        

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)


    # 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 QueryInterface(self, riid):
            return self.CallAXMethod('QueryInterface', riid)

        def AddRef(self):
            return self.CallAXMethod('AddRef')

        def Release(self):
            return self.CallAXMethod('Release')

        def GetTypeInfoCount(self):
            return self.CallAXMethod('GetTypeInfoCount')

        def GetTypeInfo(self, itinfo, lcid):
            return self.CallAXMethod('GetTypeInfo', itinfo, lcid)

        def GetIDsOfNames(self, riid, rgszNames, cNames, lcid):
            return self.CallAXMethod('GetIDsOfNames', riid, rgszNames, cNames, lcid)

        def Invoke(self, dispidMember, riid, lcid, wFlags, pdispparams):
            return self.CallAXMethod('Invoke', dispidMember, riid, lcid, wFlags, pdispparams)

        def LoadFile(self, fileName):
            return self.CallAXMethod('LoadFile', fileName)

        def setShowToolbar(self, On):
            return self.CallAXMethod('setShowToolbar', On)

        def gotoFirstPage(self):
            return self.CallAXMethod('gotoFirstPage')

        def gotoLastPage(self):
            return self.CallAXMethod('gotoLastPage')

        def gotoNextPage(self):
            return self.CallAXMethod('gotoNextPage')

        def gotoPreviousPage(self):
            return self.CallAXMethod('gotoPreviousPage')

        def setCurrentPage(self, n):
            return self.CallAXMethod('setCurrentPage', n)

        def goForwardStack(self):
            return self.CallAXMethod('goForwardStack')

        def goBackwardStack(self):
            return self.CallAXMethod('goBackwardStack')

        def setPageMode(self, pageMode):
            return self.CallAXMethod('setPageMode', pageMode)

        def setLayoutMode(self, layoutMode):
            return self.CallAXMethod('setLayoutMode', layoutMode)

        def setNamedDest(self, namedDest):
            return self.CallAXMethod('setNamedDest', namedDest)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -