Embed evince Python GI

2019-02-15 15:13发布

问题:

I want to view a pdf document by embedding it in Python using the gi repository. I am trying to follow the code here which is

#!/usr/bin/env python

from gi.repository import Gtk, Gio
from gi.repository import EvinceDocument
from gi.repository import EvinceView

class HelloWorldApp(Gtk.Application):
   def __init__(self):
       Gtk.Application.__init__(self, application_id="apps.test.helloevince", flags=Gio.ApplicationFlags.FLAGS_NONE)
       self.connect("activate", self.on_activate)

   def on_activate(self, data=None):
       window = Gtk.Window(type=Gtk.WindowType.TOPLEVEL)
       window.set_title("Evince Gtk3 Python Example")
       window.set_border_width(24)
       scroll = Gtk.ScrolledWindow()
       window.add(scroll)
       EvinceDocument.init()
       doc = EvinceDocument.Document.factory_get_document('file:///home/user/test.pdf')
       view = EvinceView.View()
       model = EvinceView.DocumentModel()
       model.set_document(doc)
       view.set_model(model)
       scroll.add(view)
       window.show_all()
       self.add_window(window)

if __name__ == "__main__":
   app = HelloWorldApp()
   app.run(None)

But I get the error

Traceback (most recent call last):
  File "./pdfViewer_pygi.py", line 19, in on_activate
    doc = EvinceDocument.Document.factory_get_document('file:///home/user/test.pdf')
AttributeError: type object 'Document' has no attribute 'factory_get_document'

It is obvious that there is no 'factory_get_document' method. What then is the alternative...? How can one embed a pdf document using python and gtk+3...?

回答1:

You need a newer version of Evince.

This is working for me in latest Evince, 3.3.3.1, using Fedora 17 (rawhide), and is not working in Evince 3.2.1 using Fedora 16.

Maybe you can compile Evince to get the bindings working.



标签: python pdf gtk