Skip to content

Instantly share code, notes, and snippets.

@clefebvre
Created November 14, 2018 10:15
Show Gist options
  • Select an option

  • Save clefebvre/013e0e409201559af2a8a63befbe193b to your computer and use it in GitHub Desktop.

Select an option

Save clefebvre/013e0e409201559af2a8a63befbe193b to your computer and use it in GitHub Desktop.
Python GTK Print preview
#!/usr/bin/python3
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Poppler', '0.18')
from gi.repository import GObject, Gtk, Poppler
class MyApp():
def __init__(self):
settings = Gtk.Settings.get_default()
Gtk.Settings.get_default().set_property("gtk-print-preview-command", "xreader-previewer --unlink-tempfile --print-settings %s %f")
self.window = Gtk.Window()
button = Gtk.Button()
button.set_label("Click me")
self.window.add(button)
self.window.show_all()
self.window.connect("destroy", Gtk.main_quit)
button.connect("clicked", self.on_button_clicked)
self.operation = Gtk.PrintOperation()
self.operation.connect('begin-print', self.begin_print, None)
self.operation.connect('draw-page', self.draw_page, None)
# self.operation.connect('preview', self.preview, None)
self.doc = Poppler.Document.new_from_file("file:///home/clem/AttestationScolaire.pdf")
def begin_print(self, operation, print_ctx, print_data):
operation.set_n_pages(self.doc.get_n_pages())
def draw_page(self, operation, print_ctx, page_num, print_data):
cr = print_ctx.get_cairo_context()
page = self.doc.get_page(page_num)
page.render(cr)
def preview(self, operation, preview, print_ctx, parent, print_data):
print("PREVIEW")
return True
def on_button_clicked(self, button):
result = self.operation.run(Gtk.PrintOperationAction.PRINT_DIALOG, self.window)
app = MyApp()
Gtk.main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment