Poodletooth-iLand/panda/python/Lib/site-packages/wx/lib/pdfwin.py
Master Jumblespeed d882959bfa switch to remote
2015-05-18 22:11:33 -04:00

295 lines
11 KiB
Python
Executable file

#----------------------------------------------------------------------
# Name: wx.lib.pdfwin
# Purpose: A class that allows the use of the Acrobat PDF reader
# ActiveX control
#
# Author: Robin Dunn
#
# Created: 22-March-2004
# Copyright: (c) 2008 by Total Control Software
# Licence: wxWindows license
#----------------------------------------------------------------------
import wx
_min_adobe_version = None
def get_min_adobe_version():
return _min_adobe_version
def get_acroversion():
" Included for backward compatibility"
return _min_adobe_version
#----------------------------------------------------------------------
if wx.PlatformInfo[1] == 'wxMSW':
import wx.lib.activex
import comtypes.client as cc
import comtypes
import ctypes
try: # Adobe Reader >= 7.0
cc.GetModule( ('{05BFD3F1-6319-4F30-B752-C7A22889BCC4}', 1, 0) )
progID = 'AcroPDF.PDF.1'
_min_adobe_version = 7.0
except:
try: # Adobe Reader 5 or 6
cc.GetModule( ('{CA8A9783-280D-11CF-A24D-444553540000}', 1, 0) )
progID = 'PDF.PdfCtrl.5'
_min_adobe_version = 5.0
except:
pass # Adobe Reader not installed (progID is not defined)
# Use get_min_adobe_version() before instantiating PDFWindow
#------------------------------------------------------------------------------
class PDFWindow(wx.lib.activex.ActiveXCtrl):
def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
size=wx.DefaultSize, style=0, name='PDFWindow'):
wx.lib.activex.ActiveXCtrl.__init__(self, parent, progID,
id, pos, size, style, name)
self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroyWindow)
def OnDestroyWindow(self, event):
wx.CallAfter(self.FreeDlls)
def FreeDlls(self):
"""
Unloads any DLLs that are no longer in use when all COM object instances are
released. This prevents the error 'The instruction at "0x0700609c" referenced
memory at "0x00000014". The memory could not be read' when application closes
"""
ctypes.windll.ole32.CoFreeUnusedLibraries()
def LoadFile(self, fileName):
"""
Opens and displays the specified document within the browser.
"""
return self.ctrl.LoadFile(fileName)
def GetVersions(self):
"""
Deprecated: No longer available - do not use.
"""
return self.ctrl.GetVersions()
def Print(self):
"""
Prints the document according to the specified options in a user dialog box.
"""
return self.ctrl.Print()
def goBackwardStack(self):
"""
Goes to the previous view on the view stack, if it exists.
"""
return self.ctrl.goBackwardStack()
def goForwardStack(self):
"""
Goes to the next view on the view stack, if it exists.
"""
return self.ctrl.goForwardStack()
def gotoFirstPage(self):
"""
Goes to the first page in the document.
"""
return self.ctrl.gotoFirstPage()
def gotoLastPage(self):
"""
Goes to the last page in the document.
"""
return self.ctrl.gotoLastPage()
def gotoNextPage(self):
"""
Goes to the next page in the document, if it exists
"""
return self.ctrl.gotoNextPage()
def gotoPreviousPage(self):
"""
Goes to the previous page in the document, if it exists.
"""
return self.ctrl.gotoPreviousPage()
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.
"""
return self.ctrl.printAll()
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.
"""
return self.ctrl.printAllFit(shrinkToFit)
def printPages(self, from_, to):
"""
Prints the specified pages without displaying a user dialog box.
"""
return self.ctrl.printPages(from_, to)
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.
"""
return self.ctrl.printPagesFit( from_, to, shrinkToFit)
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)
"""
return self.ctrl.printWithDialog()
def setCurrentHighlight(self, a, b, c, d):
return self.ctrl.setCurrentHighlight(a, b, c, d)
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)
"""
return self.ctrl.setCurrentPage(npage)
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
================= ====================================
"""
return self.ctrl.setLayoutMode(layoutMode)
def setNamedDest(self, namedDest):
"""
Changes the page view to the named destination in the specified string.
"""
return self.ctrl.setNamedDest(namedDest)
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)
"""
return self.ctrl.setPageMode(pageMode)
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)
"""
return self.ctrl.setShowScrollbars(On)
def setShowToolbar(self, On):
"""
Determines whether a toolbar will appear in the application.
"""
return self.ctrl.setShowToolbar(On)
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.
======== ==============================================
"""
return self.ctrl.setView(viewMode)
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.
"""
return self.ctrl.setViewRect(left, top, width, height)
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.
"""
return self.ctrl.setViewScroll(viewMode, offset)
def setZoom(self, percent):
"""
Sets the magnification according to the specified value
expressed as a percentage (float)
"""
return self.ctrl.setZoom(percent)
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.
"""
return self.ctrl.setZoomScroll(percent, left, top)
#------------------------------------------------------------------------------
if __name__ == '__main__':
app = wx.App(False)
frm = wx.Frame(None, title="AX Test Window")
pdf = PDFWindow(frm)
frm.Show()
import wx.lib.inspection
wx.lib.inspection.InspectionTool().Show()
app.MainLoop()