2017-11-08 2 views
0

Es scheint, dass wx.lib.pdfwin_old Funktionen für das Gehen auf die vorherige und nächste Seite für eine pdf hat. Wie ändern Sie es, um zu einer bestimmten Seite eines PDFs zu gelangen, oder wie lautet der Code, um auf eine bestimmte Seite eines PDFs zu gelangen?Gehen Sie mit wx.lib.pdfwin_old zu einer bestimmten Seite auf einer PDF-Datei

import wx 
if wx.Platform == '__WXMSW__': 
    from wx.lib.pdfwin_old import PDFWindow 

class MyPanel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent, id=-1) 
     self.pdf = None 

     sizer = wx.BoxSizer(wx.VERTICAL) 


     self.pdf = PDFWindow(self, size=(parent.GetSize().width,parent.GetSize().height*3/5),style=wx.SUNKEN_BORDER) 
     sizer.Add(self.pdf, proportion=3, flag=wx.EXPAND|wx.ALL) 

     btn = wx.Button(self, wx.NewId(), "Open PDF File") 
     self.Bind(wx.EVT_BUTTON, self.OnOpenButton, btn) 
     sizer.Add(btn, proportion=1, flag=wx.EXPAND|wx.ALL) 

     self.SetSizer(sizer) 

    def OnOpenButton(self, event): 
     global current_pdf_path 
     dlg = wx.FileDialog(self, wildcard="*.pdf") 
     if dlg.ShowModal() == wx.ID_OK: 
      wx.BeginBusyCursor() 
      print(dlg.GetPath()) 
      self.pdf.LoadFile(dlg.GetPath()) 
      wx.EndBusyCursor() 

     dlg.Destroy() 

app = wx.App() 
frame = wx.Frame(None, -1, "PDFWindow", size = (640, 480)) 
MyPanel(frame) 
frame.Show(True) 
app.MainLoop() 

Antwort

0

Haben Sie

setCurrentPage(n) 

Von pdfwin_old.py versucht:

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() 

Edit: Leider Boikem, nicht helfen können! Ich wusste nicht, dass pdfwin nur Windows war, obwohl der Hinweis im Namen ist. Ich laufe unter Linux.
Als Trost, biete ich diesen Code unten, eine Methode, die einen Browser verwendet, der Ihnen möglicherweise einige Meilen geben kann oder nicht. (Python3)

import wx 
import webbrowser 

class MyPanel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent, id=-1) 
     sizer = wx.BoxSizer(wx.VERTICAL) 
     btn = wx.Button(self, wx.NewId(), "Open PDF File") 
     self.Bind(wx.EVT_BUTTON, self.OnOpenButton, btn) 
     sizer.Add(btn, 0, flag=wx.EXPAND|wx.ALL) 
     self.SetSizer(sizer) 

    def OnOpenButton(self, event): 
     dlg = wx.FileDialog(self, wildcard="*.pdf") 
     if dlg.ShowModal() == wx.ID_OK: 
      url = dlg.GetPath() 
     dlg.Destroy() 
     try: 
      if not url: 
       return 
     except: 
      return 
     url = "file://"+url+'#page=12' 
     url = url.encode('UTF-8') 
     print(url) 
     browser_list = ("chromium-browser","firefox") 
     for x in browser_list: 
      try: 
       browser = webbrowser.get(x) 
      except: 
       pass 
      else: 
       browser.open(url) 
       break 
     try: 
      if browser: 
       pass 
     except: 
      print("Neither Supported browsers Firefox or Chromium found") 

app = wx.App() 
frame = wx.Frame(None, -1, "PDF Via Browser", size = (640, 480)) 
MyPanel(frame) 
frame.Show(True) 
app.MainLoop() 

Der chromium Browser scheint die genau zu sein.
Persönlich, für die Anzeige help in meinen Projekten, erstelle ich eine einzige main pdf und Breakout davon, inhaltspezifische pdfs für jedes Thema mit sections innerhalb des Hauptdokuments. Diese Methode vermeidet Probleme, wenn sich die Seitenzahlen ändern, während sich die Dokumentation entwickelt.
Ich würde vorschlagen, dass Sie diese Antwort nicht akzeptieren, da sie eindeutig Ihre spezifische Frage nicht beantwortet.

+0

Aber ich bekomme eine Erhöhung PDFWindowError(): Ein PDF muss vor dem Aufruf dieser Methode geladen werden. Ich lud die pdf mit self.pdf.LoadFile (dlg.GetPath()) und nannte dann self.pdf.setCurrentPage (3) aber noch nicht arbeiten. – Boikem

+0

Es lädt die PDF in Ordnung, aber der Aufruf der setCurrentPage ist, was den Fehler verursacht – Boikem

+0

Weitere Tests auf den Code zeigt, dass es Self.ie.Navigate2 (Dateiname) anstelle von self.ie.Document.LoadFile (fileName) verwendet. Dies lädt PDF-Dateien (zumindest mit Foxit, aber nicht mit Adobe), aber ich kann keine Funktionen wie bestimmte Seiten aufrufen. Wie lösen Sie das auch? Danke für die Hilfe bis jetzt – Boikem

Verwandte Themen