GtkPrintOperation
High-level Printing API
GtkPrintOperation is the high-level, portable printing API. It looks
a bit different than other GTK+ dialogs such as the #GtkFileChooser,
since some platforms don't expose enough infrastructure to implement
a good print dialog. On such platforms, GtkPrintOperation uses the
native print dialog. On platforms which do not provide a native
print dialog, GTK+ uses its own, see #GtkPrintUnixDialog.
The typical way to use the high-level printing API is to create a
#GtkPrintOperation object with gtk_print_operation_new() when the user
selects to print. Then you set some properties on it, e.g. the page size,
any #GtkPrintSettings from previous print operations, the number of pages,
the current page, etc.
Then you start the print operation by calling gtk_print_operation_run().
It will then show a dialog, let the user select a printer and options.
When the user finished the dialog various signals will be emitted on the
#GtkPrintOperation, the main one being ::draw-page, which you are supposed
to catch and render the page on the provided #GtkPrintContext using Cairo.
The high-level printing API
static GtkPrintSettings *settings = NULL;
static void
do_print (void)
{
GtkPrintOperation *print;
GtkPrintOperationResult res;
print = gtk_print_operation_new ();
if (settings != NULL)
gtk_print_operation_set_print_settings (print, settings);
g_signal_connect (print, "begin_print", G_CALLBACK (begin_print), NULL);
g_signal_connect (print, "draw_page", G_CALLBACK (draw_page), NULL);
res = gtk_print_operation_run (print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
GTK_WINDOW (main_window), NULL);
if (res == GTK_PRINT_OPERATION_RESULT_APPLY)
{
if (settings != NULL)
g_object_unref (settings);
settings = g_object_ref (gtk_print_operation_get_print_settings (print));
}
g_object_unref (print);
}
By default GtkPrintOperation uses an external application to do
print preview. To implement a custom print preview, an application
must connect to the preview signal. The functions
gtk_print_operation_print_preview_render_page(),
gtk_print_operation_preview_end_preview() and
gtk_print_operation_preview_is_selected() are useful
when implementing a print preview.
Printing support was added in GTK+ 2.10.
#GtkPrintContext, #GtkPrintUnixDialog
@printoperation:
@context:
@printoperation:
@Returns:
@printoperation:
@widget:
@printoperation: the object which received the signal.
@arg1:
@printoperation: the object which received the signal.
@arg1:
@arg2:
@printoperation: the object which received the signal.
@arg1:
@printoperation: the object which received the signal.
@arg1:
@Returns:
@printoperation: the object which received the signal.
@arg1:
@arg2:
@arg3:
@Returns:
@printoperation: the object which received the signal.
@arg1:
@arg2:
@arg3:
@printoperation: the object which received the signal.
@printoperation: the object which received the signal.
@widget:
@arg1:
@arg2:
The status gives a rough indication of the completion
of a running print operation.
@GTK_PRINT_STATUS_INITIAL: The printing has not started yet; this
status is set initially, and while the print dialog is shown.
@GTK_PRINT_STATUS_PREPARING: This status is set while the begin-print
signal is emitted and during pagination.
@GTK_PRINT_STATUS_GENERATING_DATA: This status is set while the
pages are being rendered.
@GTK_PRINT_STATUS_SENDING_DATA: The print job is being sent off to the
printer.
@GTK_PRINT_STATUS_PENDING: The print job has been sent to the printer,
but is not printed for some reason, e.g. the printer may be stopped.
@GTK_PRINT_STATUS_PENDING_ISSUE: Some problem has occurred during
printing, e.g. a paper jam.
@GTK_PRINT_STATUS_PRINTING: The printer is processing the print job.
@GTK_PRINT_STATUS_FINISHED: The printing has been completed successfully.
@GTK_PRINT_STATUS_FINISHED_ABORTED: The printing has been aborted.
The @action parameter to gtk_print_operation_run()
determines what action the print operation should perform.
@GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG: Show the print dialog.
@GTK_PRINT_OPERATION_ACTION_PRINT: Start to print without showing
the print dialog, based on the current print settings.
@GTK_PRINT_OPERATION_ACTION_PREVIEW: Show the print preview.
@GTK_PRINT_OPERATION_ACTION_EXPORT: Export to a file. This requires
the export-filename property to be set.
A value of this type is returned by gtk_print_operation_run().
@GTK_PRINT_OPERATION_RESULT_ERROR: An error has occured.
@GTK_PRINT_OPERATION_RESULT_APPLY: The print settings should be stored.
@GTK_PRINT_OPERATION_RESULT_CANCEL: The print operation has been canceled,
the print settings should not be stored.
@GTK_PRINT_OPERATION_RESULT_IN_PROGRESS: The print operation is not complete
yet. This value will only be returned when running asynchronously.
Error codes that identify various errors that can occur while
using the GTK+ printing support.
@GTK_PRINT_ERROR_GENERAL: An unspecified error occurred.
@GTK_PRINT_ERROR_INTERNAL_ERROR: An internal error occurred.
@GTK_PRINT_ERROR_NOMEM: A memory allocation failed.
@GTK_PRINT_ERROR_INVALID_FILE: An error occurred while loading a page setup
or paper size from a key file.
The #GQuark used for #GtkPrintError errors.
@Returns:
@op:
@allow_async:
@op:
@error:
@op:
@default_page_setup:
@op:
@Returns:
@op:
@print_settings:
@op:
@Returns:
@op:
@job_name:
@op:
@n_pages:
@op:
@Returns:
@op:
@current_page:
@op:
@full_page:
@op:
@unit:
@op:
@filename:
@op:
@show_progress:
@op:
@track_status:
@op:
@label:
@op:
@action:
@parent:
@error:
@Returns:
@op:
@op:
@op:
@op:
@Returns:
@op:
@Returns:
@op:
@Returns:
@op:
@support_selection:
@op:
@Returns:
@op:
@has_selection:
@op:
@Returns:
@op:
@embed:
@op:
@Returns:
@parent:
@page_setup:
@settings:
@Returns:
The type of function that is passed to gtk_print_run_page_setup_dialog_async().
This function will be called when the page setup dialog is dismissed, and
also serves as destroy notify for @data.
@page_setup: the #GtkPageSetup that has been
@data: user data that has been passed to
gtk_print_run_page_setup_dialog_async().
@parent:
@page_setup:
@settings:
@done_cb:
@data:
@printoperationpreview: the object which received the signal.
@arg1:
@arg2:
@printoperationpreview: the object which received the signal.
@arg1:
@preview:
@preview:
@page_nr:
@Returns:
@preview:
@page_nr: