Table of Contents
At the application development level, gtkmm's printing API provides dialogs that are consistent across applications and allows use of Cairo's common drawing API, with Pango-driven text rendering. In the implementation of this common API, platform-specific backends and printer-specific drivers are used.
The primary object is Gtk::PrintOperation, allocated
for each print operation. To handle page drawing connect to its signals,
or inherit from it and override the default virtual signal handlers.
PrintOperation automatically handles all the settings
affecting the print loop.
The PrintOperation::run() method starts the print loop,
during which various signals are emitted:
      begin_print:
      You must handle this signal, because this is where you
      create and set up a Pango::Layout using the
      provided Gtk::PrintContext, and break up your
      printing output into pages.
    
      paginate: Pagination is potentially slow so if you
      need to monitor it you can call the
      PrintOperation::set_show_progress() method and
      handle this signal.
    
For each page that needs to be rendered, the following signals are emitted:
            request_page_setup: Provides a
            PrintContext, page number and
            Gtk::PageSetup. Handle this signal if you
            need to modify page setup on a per-page basis.
          
            draw_page: You must handle this signal, which provides a
            PrintContext and a page number.
            The PrintContext should be used
            to create a Cairo::Context into which
            the provided page should be drawn. To render text, iterate over
            the Pango::Layout you created in the
            begin_print handler.
          
      end_print: A handler for it is a safe place to free
      any resources related to a PrintOperation.
      If you have your custom class that inherits from
      PrintOperation, it is naturally simpler to do it
      in the destructor.
    
      done: This signal is emitted when printing is finished, meaning when the
      print data is spooled. Note that the provided
      Gtk::PrintOperationResult may indicate that
      an error occurred. In any case you probably want to notify the user
      about the final status.
    
      status_changed: Emitted whenever a print job's
      status changes, until it is finished. Call the
      PrintOperation::set_track_print_status() method to
      monitor the job status after spooling. To see the status, use
      get_status() or
      get_status_string().