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…?
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.