|  |  | GTK+ Reference Manual |
Top | Description | Object Hierarchy | Implemented Interfaces | | Known Implementations | Properties | Signals

## GtkPrintOperation

GtkPrintOperation — Высший уровень Printing API

## Краткое описание

    #include <gtk/gtk.h>

                GtkPrintOperation;
    enum        GtkPrintStatus;
    enum        GtkPrintOperationAction;
    enum        GtkPrintOperationResult;
    enum        GtkPrintError;
    #define     GTK_PRINT_ERROR
    GtkPrintOperation* gtk_print_operation_new  (void);
    void        gtk_print_operation_set_allow_async

                                                (GtkPrintOperation *op,
                                                 gboolean allow_async);
    void        gtk_print_operation_get_error   (GtkPrintOperation *op,
                                                 GError **error);
    void        gtk_print_operation_set_default_page_setup

                                                (GtkPrintOperation *op,
                                                 GtkPageSetup *default_page_setup);
    GtkPageSetup* gtk_print_operation_get_default_page_setup
                                                (GtkPrintOperation *op);
    void        gtk_print_operation_set_print_settings

                                                (GtkPrintOperation *op,
                                                 GtkPrintSettings *print_settings);
    GtkPrintSettings* gtk_print_operation_get_print_settings
                                                (GtkPrintOperation *op);
    void        gtk_print_operation_set_job_name

                                                (GtkPrintOperation *op,
                                                 const gchar *job_name);
    void        gtk_print_operation_set_n_pages (GtkPrintOperation *op,
                                                 gint n_pages);
    void        gtk_print_operation_set_current_page

                                                (GtkPrintOperation *op,
                                                 gint current_page);
    void        gtk_print_operation_set_use_full_page
                                                (GtkPrintOperation *op,
                                                 gboolean full_page);
    void        gtk_print_operation_set_unit    (GtkPrintOperation *op,
                                                 GtkUnit unit);
    void        gtk_print_operation_set_export_filename

                                                (GtkPrintOperation *op,
                                                 const gchar *filename);
    void        gtk_print_operation_set_show_progress
                                                (GtkPrintOperation *op,
                                                 gboolean show_progress);
    void        gtk_print_operation_set_track_print_status

                                                (GtkPrintOperation *op,
                                                 gboolean track_status);
    void        gtk_print_operation_set_custom_tab_label
                                                (GtkPrintOperation *op,
                                                 const gchar *label);

    GtkPrintOperationResult gtk_print_operation_run
                                                (GtkPrintOperation *op,
                                                 GtkPrintOperationAction action,
                                                 GtkWindow *parent,
                                                 GError **error);
    void        gtk_print_operation_cancel      (GtkPrintOperation *op);

    GtkPrintStatus gtk_print_operation_get_status
                                                (GtkPrintOperation *op);
    const gchar* gtk_print_operation_get_status_string
                                                (GtkPrintOperation *op);

    gboolean    gtk_print_operation_is_finished (GtkPrintOperation *op);
    void        gtk_print_operation_get_error   (GtkPrintOperation *op,
                                                 GError **error);

    GtkPageSetup* gtk_print_run_page_setup_dialog
                                                (GtkWindow *parent,
                                                 GtkPageSetup *page_setup,
                                                 GtkPrintSettings *settings);
    void        (*GtkPageSetupDoneFunc)         (GtkPageSetup *page_setup,
                                                 gpointer data);
    void        gtk_print_run_page_setup_dialog_async

                                                (GtkWindow *parent,
                                                 GtkPageSetup *page_setup,
                                                 GtkPrintSettings *settings,
                                                 GtkPageSetupDoneFunc done_cb,
                                                 gpointer data);

                GtkPrintOperationPreview;
    void        gtk_print_operation_preview_end_preview

                                                (GtkPrintOperationPreview *preview);
    gboolean    gtk_print_operation_preview_is_selected
                                                (GtkPrintOperationPreview *preview,
                                                 gint page_nr);
    void        gtk_print_operation_preview_render_page

                                                (GtkPrintOperationPreview *preview,
                                                 gint page_nr);

## Иерархия объектов

      GObject

       +----GtkPrintOperation

      GInterface
       +----GtkPrintOperationPreview

## Предварительные требования

GtkPrintOperationPreview требует GObject.

## Реализуемые интерфейсы

GtkPrintOperation реализует GtkPrintOperationPreview.

## Известные реализации

GtkPrintOperationPreview реализован GtkPrintOperation.

## Свойства

      "allow-async"          gboolean              : Read / Write
      "current-page"         gint                  : Read / Write
      "custom-tab-label"     gchararray            : Read / Write
      "default-page-setup"   GtkPageSetup          : Read / Write
      "export-filename"      gchararray            : Read / Write
      "job-name"             gchararray            : Read / Write
      "n-pages"              gint                  : Read / Write
      "print-settings"       GtkPrintSettings      : Read / Write
      "show-progress"        gboolean              : Read / Write
      "status"               GtkPrintStatus        : Read
      "status-string"        gchararray            : Read
      "track-print-status"   gboolean              : Read / Write
      "unit"                 GtkUnit               : Read / Write
      "use-full-page"        gboolean              : Read / Write

## Сигналы

    "begin-print"
                void        user_function      (GtkPrintOperation *operation,
                                                GtkPrintContext   *context,
                                                gpointer           user_data)      : Run last
    "create-custom-widget"
                GObject*    user_function      (GtkPrintOperation *operation,
                                                gpointer           user_data)      : Run last
    "custom-widget-apply"
                void        user_function      (GtkPrintOperation *operation,
                                                GtkWidget         *widget,
                                                gpointer           user_data)      : Run last
    "done"      void        user_function      (GtkPrintOperation      *operation,
                                                GtkPrintOperationResult result,
                                                gpointer                user_data)      : Run last
    "draw-page" void        user_function      (GtkPrintOperation *operation,
                                                GtkPrintContext   *context,
                                                gint               page_nr,
                                                gpointer           user_data)      : Run last
    "end-print" void        user_function      (GtkPrintOperation *operation,
                                                GtkPrintContext   *context,
                                                gpointer           user_data)      : Run last
    "paginate"  gboolean    user_function      (GtkPrintOperation *operation,
                                                GtkPrintContext   *context,
                                                gpointer           user_data)      : Run last
    "preview"   gboolean    user_function      (GtkPrintOperation        *operation,
                                                GtkPrintOperationPreview *preview,
                                                GtkPrintContext          *context,
                                                GtkWindow                *parent,
                                                gpointer                  user_data)      : Run last
    "request-page-setup"
                void        user_function      (GtkPrintOperation *operation,
                                                GtkPrintContext   *context,
                                                gint               page_nr,
                                                GtkPageSetup      *setup,
                                                gpointer           user_data)      : Run last
    "status-changed"
                void        user_function      (GtkPrintOperation *operation,
                                                gpointer           user_data)      : Run last

## Описание

GtkPrintOperation – это высший уровень, портируемого API печати. Он выглядит немного иначе чем другие диалоги GTK+, такие как GtkFileChooser, так как некоторые платформы не представляют достаточно инфраструктуры для реализации хороших диалогов печати. На таких платформах, GtkPrintOperation использует родные диалоги печати. На платформах которые не обеспечивают родные диалоги печати, GTK+ использует собственный, смотрите GtkPrintUnixDialog.

Обычный способ использования high-level printing API это создание объекта GtkPrintOperation с помощью `gtk_print_operation_new()` когда пользователь выбирает печать. Затем вы устанавливаете некоторые свойства, например размер страницы, любые GtkPrintSettings fиз предварительных операций печати, количество страниц, текущую страницу, и т.д..

Потом вы вызываете операцию печати используя `gtk_print_operation_run()`. Она покажет пользователю диалог, позволяя выбрать принтер и опции. Когда пользователь закончит, диалог издаст различные сигналы GtkPrintOperation, основным из которых является ::draw-page, вы должны перехватить его и создать страницу обеспечивая GtkPrintContext используя Cairo.

Пример 1. 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);
    }

По умолчанию GtkPrintOperation использует внешние приложения для предварительного просмотра печатаемой страницы. Для настройки предварительного просмотра печати приложение должно подключиться к сигналу предварительного просмотра. Функции `gtk_print_operation_print_preview_render_page()`, `gtk_print_operation_preview_end_preview()` и `gtk_print_operation_preview_is_selected()` полезны при реализации предварительного просмотра.

Печать поддерживается начиная с версии GTK+ 2.10.

## Детали

### GtkPrintOperation

    typedef struct _GtkPrintOperation GtkPrintOperation;

### enum GtkPrintStatus

    typedef enum {
      GTK_PRINT_STATUS_INITIAL,
      GTK_PRINT_STATUS_PREPARING,
      GTK_PRINT_STATUS_GENERATING_DATA,
      GTK_PRINT_STATUS_SENDING_DATA,
      GTK_PRINT_STATUS_PENDING,
      GTK_PRINT_STATUS_PENDING_ISSUE,
      GTK_PRINT_STATUS_PRINTING,
      GTK_PRINT_STATUS_FINISHED,
      GTK_PRINT_STATUS_FINISHED_ABORTED
    } GtkPrintStatus;

Выдаёт состояние приблизительно указывая выполнение запущенной операции печати.

`GTK_PRINT_STATUS_INITIAL` | Печать не началась; Это состояние устанавливается первоначально во время отображения диалога печати.
`GTK_PRINT_STATUS_PREPARING` | Это состояние устанавливается во время издания сигнала начала печати в течении разбора страниц.
`GTK_PRINT_STATUS_GENERATING_DATA` | Это состояние устанавливается во время формирования страниц.
`GTK_PRINT_STATUS_SENDING_DATA` | Задание печати отправлено на принтер.
`GTK_PRINT_STATUS_PENDING` | Задание печати отправлено на принтер, но по некоторым причинам не выполняется, например принтер может быть заблокирован.
`GTK_PRINT_STATUS_PENDING_ISSUE` | В течении печати произошла какая-то проблема, например заедание бумаги.
`GTK_PRINT_STATUS_PRINTING` | Принтер выполняет печать.
`GTK_PRINT_STATUS_FINISHED` | Печать полностью выполнена.
`GTK_PRINT_STATUS_FINISHED_ABORTED` | Печать прервана.

### enum GtkPrintOperationAction

    typedef enum {
      GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,
      GTK_PRINT_OPERATION_ACTION_PRINT,
      GTK_PRINT_OPERATION_ACTION_PREVIEW,
      GTK_PRINT_OPERATION_ACTION_EXPORT
    } GtkPrintOperationAction;

Параметр `action` в `gtk_print_operation_run()` определяет какое действие операции печати должно быть выполнено.

`GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG` | Показать диалог печати.
`GTK_PRINT_OPERATION_ACTION_PRINT` | Начать печать без отображения диалога печати, полагаясь на текущие установки печати.
`GTK_PRINT_OPERATION_ACTION_PREVIEW` | Показать предварительный просмотр печати.
`GTK_PRINT_OPERATION_ACTION_EXPORT` | Экспорт в файл. Это требует установки свойства имени файла для экспорта.

### enum GtkPrintOperationResult

    typedef enum {
      GTK_PRINT_OPERATION_RESULT_ERROR,
      GTK_PRINT_OPERATION_RESULT_APPLY,
      GTK_PRINT_OPERATION_RESULT_CANCEL,
      GTK_PRINT_OPERATION_RESULT_IN_PROGRESS
    } GtkPrintOperationResult;

Значение этого типа возвращается из `gtk_print_operation_run()`.

`GTK_PRINT_OPERATION_RESULT_ERROR` | Произошла ошибка.
`GTK_PRINT_OPERATION_RESULT_APPLY` | Настройки печати должны быть сохранены.
`GTK_PRINT_OPERATION_RESULT_CANCEL` | Операция печати завершена, установки печати не должны сохраняться.
`GTK_PRINT_OPERATION_RESULT_IN_PROGRESS` | Операция печати уже полностью выполнена. Это значение возвращается только при асинхронном выполнении.

### enum GtkPrintError

    typedef enum
    {
      GTK_PRINT_ERROR_GENERAL,
      GTK_PRINT_ERROR_INTERNAL_ERROR,
      GTK_PRINT_ERROR_NOMEM
    } GtkPrintError;

### GTK_PRINT_ERROR

    #define GTK_PRINT_ERROR gtk_print_error_quark ()

GQuark используется для GtkPrintError ошибок.

### gtk_print_operation_new ()

    GtkPrintOperation* gtk_print_operation_new  (void);

Создаёт новый GtkPrintOperation.

Возвращает : | новый GtkPrintOperation

Начиная с версии 2.10

### gtk_print_operation_set_allow_async ()

    void        gtk_print_operation_set_allow_async
                                                (GtkPrintOperation *op,
                                                 gboolean allow_async);

Устанавливает может ли `gtk_print_operation_run()` вернуть результат перед выполнением операции печати. Помните, некоторые платформы не позволяют асинхронные операции.

`op` : | GtkPrintOperation
`allow_async` : | `TRUE` позволяет асинхронные операции

Начиная с версии 2.10

### gtk_print_operation_get_error ()

    void        gtk_print_operation_get_error   (GtkPrintOperation *op,
                                                 GError **error);

Эта функция вызывается когда результат операции печати равен `GTK_PRINT_OPERATION_RESULT_ERROR`, любой возвращаемой `gtk_print_operation_run()`, или в обработчике сигнала ::done. Возвращаемый GError должен содержать подробности произошедшего.

`op` : | GtkPrintOperation
`error` : | Возвращаемая ошибка

Начиная с версии 2.10

### gtk_print_operation_set_default_page_setup ()

    void        gtk_print_operation_set_default_page_setup
                                                (GtkPrintOperation *op,
                                                 GtkPageSetup *default_page_setup);

Делает `default_page_setup` параметрами страницы по умолчанию для `op`.

Эта страница будет использована в `gtk_print_operation_run()`, но она может быть переписана на основании предварительной страницы подключением сигнала ::request-page-setup.

`op` : | GtkPrintOperation
`default_page_setup` : | GtkPageSetup, или `NULL`

Начиная с версии 2.10

### gtk_print_operation_get_default_page_setup ()

    GtkPageSetup* gtk_print_operation_get_default_page_setup
                                                (GtkPrintOperation *op);

Возвращает установки страницы по умолчанию, смотрите `gtk_print_operation_set_default_page_setup()`.

`op` : | GtkPrintOperation
Возвращает : | Установки страницы по умолчанию

Начиная с версии 2.10

### gtk_print_operation_set_print_settings ()

    void        gtk_print_operation_set_print_settings
                                                (GtkPrintOperation *op,
                                                 GtkPrintSettings *print_settings);

Устанавливает настройки принтера для `op`. Это обычно используется для переустановки настроек принтера из предыдущей операции, смотрите `gtk_print_operation_run()`.

`op` : | GtkPrintOperation
`print_settings` : | GtkPrintSettings, или `NULL`

Начиная с версии 2.10

### gtk_print_operation_get_print_settings ()

    GtkPrintSettings* gtk_print_operation_get_print_settings
                                                (GtkPrintOperation *op);

Возвращает текущие настройки принтера.

Помните что возвращаемое значение `NULL` до тех пор пока не вызвана `gtk_print_operation_set_print_settings()` или `gtk_print_operation_run()`.

`op` : | GtkPrintOperation
Возвращает : | Текущие настройки принтера `op`.

Начиная с версии 2.10

### gtk_print_operation_set_job_name ()

    void        gtk_print_operation_set_job_name
                                                (GtkPrintOperation *op,
                                                 const gchar *job_name);

Устанавливает имя задания принтера. Имя используется для идентификации задания (например в приложении контроля таком как eggcups).

Если вы не установили имя задания, GTK+ выберет один из номеров последовательности заданий печати.

`op` : | GtkPrintOperation
`job_name` : | Строка идентифицирующая задание печати

Начиная с версии 2.10

### gtk_print_operation_set_n_pages ()

    void        gtk_print_operation_set_n_pages (GtkPrintOperation *op,
                                                 gint n_pages);

Устанавливает количество страниц в документе.

Должно устанавливаться в положительное значение перед началом представления страниц. Может быть установлено обработчиком сигнала ::begin-print.

Запомните, количество страниц помещаемое в ::request-page-setup и ::draw-page сигналы начинается с 0, то есть если пользователь выберет для печати все страницы, последний сигнал ::draw-page будет для страницы `n_pages` - 1.

`op` : | GtkPrintOperation
`n_pages` : | Количество страниц

Начиная с версии 2.10

### gtk_print_operation_set_current_page ()

    void        gtk_print_operation_set_current_page
                                                (GtkPrintOperation *op,
                                                 gint current_page);

Устанавливает текущую страницу.

Если она вызвана перед `gtk_print_operation_run()`, пользователь сможет выбрать печать только текущей страницы.

Отметьте сто это имеет смысл только для документов предварительно разбитых постранично.

`op` : | GtkPrintOperation
`current_page` : | Текущая страница, начиная с 0

Начиная с версии 2.10

### gtk_print_operation_set_use_full_page ()

    void        gtk_print_operation_set_use_full_page
                                                (GtkPrintOperation *op,
                                                 gboolean full_page);

Если параметр `full_page` равен `TRUE`, преобразует контекст GtkPrintContext в контекст cairo, помещая начало в верхний левый угол страницы (который может не быть верхним левым углом листа, зависит от ориентации страницы и номера строницы относительно листа). Иначе, начало в левом верхнем углу изображаемой области (то есть в пределах границ).

`op` : | GtkPrintOperation
`full_page` : | `TRUE` для установки GtkPrintContext заполняющего страницу

Начиная с версии 2.10

### gtk_print_operation_set_unit ()

    void        gtk_print_operation_set_unit    (GtkPrintOperation *op,
                                                 GtkUnit unit);

Устанавливает преобразование полученного GtkPrintContext в контекст cairo, таким образом что растояние измеряется в единицах `unit`.

`op` : | GtkPrintOperation
`unit` : | Используемые единицы

Начиная с версии 2.10

### gtk_print_operation_set_export_filename ()

    void        gtk_print_operation_set_export_filename
                                                (GtkPrintOperation *op,
                                                 const gchar *filename);

Устанавливает GtkPrintOperation для генерации файла, вместо отображения диалога печати. Эта функция используется для осуществления операции "Export to PDF". В настоящее время, PDF единственный поддерживаемый формат.

"Print to PDF" поддерживается независимо от этого, позволяя пользователю выбрать пункт "Print to PDF" из списка принтеров в диалоге печати.

`op` : | GtkPrintOperation
`filename` : | Имя файла для экспорта

Начиная с версии 2.10

### gtk_print_operation_set_show_progress ()

    void        gtk_print_operation_set_show_progress
                                                (GtkPrintOperation *op,
                                                 gboolean show_progress);

Если параметр `show_progress` равен `TRUE`, операция печати будет отображать диалог шкалы выполнения в процессе печати.

`op` : | GtkPrintOperation
`show_progress` : | `TRUE` для отображения диалога процесса выполнения

Начиная с версии 2.10

### gtk_print_operation_set_track_print_status ()

    void        gtk_print_operation_set_track_print_status
                                                (GtkPrintOperation *op,
                                                 gboolean track_status);

Если track_status равен `TRUE`, операция печати будет пытаться сообщать статус задания печати в очереди печати и принтера. Это позволит вашему приложению отображать такие сообщения как "закончилась бумага" или задание печати отправлено на принтер.

Эта функция часто реализуется используя некоторую форму опроса, поэтому она не должна использоваться без явной необходимости.

`op` : | GtkPrintOperation
`track_status` : | `TRUE` для отслеживания состояния после печати

Начиная с версии 2.10

### gtk_print_operation_set_custom_tab_label ()

    void        gtk_print_operation_set_custom_tab_label
                                                (GtkPrintOperation *op,
                                                 const gchar *label);

Устанавливает ярлык для вкладки содержащей виджеты настроек.

`op` : | GtkPrintOperation
`label` : | Используемый ярлык, или `NULL` для использования ярлыка по умолчанию

Начиная с версии 2.10

### gtk_print_operation_run ()

    GtkPrintOperationResult gtk_print_operation_run
                                                (GtkPrintOperation *op,
                                                 GtkPrintOperationAction action,
                                                 GtkWindow *parent,
                                                 GError **error);

Выполняет операцию печати, сначала позволяя пользователю изменить настройки печати с помощью диалога, а затем печатает документ.

Обычно эта функция не возвращается до тех пор пока не выполнит представление всех страниц. Вы можете подключить сигнал ::status-changed к `op` для определения некоторой информации о процессе выполнения печати. Кроме того, можно использовать рекурсию основного цикла (mainloop) для отображения диалога печати.

Если вы вызвали `gtk_print_operation_set_allow_async()` или установили свойство позволяющее асинхронные операции (allow-async) то эта операция будет выполняться асинхронно, если позволяет платформа. Сигнал ::done издаётся когда операция выполнена (то есть когда диалог прекращён, или когда печать прерывается ошибкой).

    if (settings != NULL)
      gtk_print_operation_set_print_settings (print, settings);

    if (page_setup != NULL)
      gtk_print_operation_set_default_page_setup (print, page_setup);

    g_signal_connect (print, "begin-print",
                      G_CALLBACK (begin_print), &data);
    g_signal_connect (print, "draw-page",
                      G_CALLBACK (draw_page), &data);

    res = gtk_print_operation_run (print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, parent, &error);

    if (res == GTK_PRINT_OPERATION_RESULT_ERROR)
     {
       error_dialog = gtk_message_dialog_new (GTK_WINDOW (parent),
                                                 GTK_DIALOG_DESTROY_WITH_PARENT,
                                                 GTK_MESSAGE_ERROR,
                                                 GTK_BUTTONS_CLOSE,
                                                 "Error printing file:\ns",
                                                 error->message);
       g_signal_connect (error_dialog, "response",
                         G_CALLBACK (gtk_widget_destroy), NULL);
       gtk_widget_show (error_dialog);
       g_error_free (error);
     }
    else 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));
     }

`op` : | GtkPrintOperation
`action` : | Начинающее действие
`parent` : | Переходный родитель диалога, или `NULL`
`error` : | Ошибки, или `NULL`

Возвращает :

Результат операции печати. Возвращённое значение `GTK_PRINT_OPERATION_RESULT_APPLY` указывает что печать полностью выполнена. В этом случае, это хороший способ получить используемые настройки принтера с помощью `gtk_print_operation_get_print_settings()` и сохранить их для повторного использования операциями печати. Значение `GTK_PRINT_OPERATION_RESULT_IN_PROGRESS` означает асинхронно запущенную операцию и издаст сигнал ::done после выполнения.

Начиная с версии 2.10

### gtk_print_operation_cancel ()

    void        gtk_print_operation_cancel      (GtkPrintOperation *op);

Прекращает запущенную операцию печати. Эта функция может быть вызвана при начале печати, разбиении на страницы или при обработке сигнала draw-page для остановки текущей выполняемой операции печати.

`op` : | GtkPrintOperation

Начиная с версии 2.10

### gtk_print_operation_get_status ()

    GtkPrintStatus gtk_print_operation_get_status
                                                (GtkPrintOperation *op);

Определяет статус операции печати. Смотрите также `gtk_print_operation_get_status_string()`.

`op` : | GtkPrintOperation
Возвращает : | Статус операции печати

Начиная с версии 2.10

### gtk_print_operation_get_status_string ()

    const gchar* gtk_print_operation_get_status_string
                                                (GtkPrintOperation *op);

Возвращает строку представляющую статус операции печати. Строка преобразована и удобна для отображения состояния печати например в GtkStatusbar.

Используйте `gtk_print_operation_get_status()` для определения значения статуса подходящего для програмного использования.

`op` : | GtkPrintOperation
Возвращает : | Строка представляющая статус операции печати

Начиная с версии 2.10

### gtk_print_operation_is_finished ()

    gboolean    gtk_print_operation_is_finished (GtkPrintOperation *op);

Удобная функция для определения закончилась ли операция печати успешно (`GTK_PRINT_STATUS_FINISHED`) или нет (`GTK_PRINT_STATUS_FINISHED_ABORTED`).

Помните: когда вы позволяете отслеживание статуса операции печати, она может находиться в не завершённом состоянии даже после выполнения, так как статус операции отслеживает статус задания печати на принтере.

`op` : | GtkPrintOperation
Возвращает : | `TRUE`, если операция печати завершена.

Начиная с версии 2.10

### gtk_print_operation_get_error ()

    void        gtk_print_operation_get_error   (GtkPrintOperation *op,
                                                 GError **error);

Вызывается когда результат операции печати равен `GTK_PRINT_OPERATION_RESULT_ERROR`, любой возвращенный из `gtk_print_operation_run()`, или в обработчике сигнала ::done. Возвращаемый GError будет содержать подробности произошедшего.

`op` : | GtkPrintOperation
`error` : | ошибка

Начиная с версии 2.10

### gtk_print_run_page_setup_dialog ()

    GtkPageSetup* gtk_print_run_page_setup_dialog
                                                (GtkWindow *parent,
                                                 GtkPageSetup *page_setup,
                                                 GtkPrintSettings *settings);

Запускает диалог параметров страницы, позволяя пользователю изменять значения из `page_setup`. Если пользователь отменил диалог, возвращаемый GtkPageSetup идентичен переданному в `page_setup`, иначе он содержит изменения сделанные с помощью диалога.

Помните, эта функция может использовать рекурсию основного цикла (mainloop) для отображения диалога параметров страницы. Смотрите `gtk_print_run_page_setup_dialog_async()` если это проблема.

`parent` : | Переходный родитель, или `NULL`
`page_setup` : | Существующий GtkPageSetup, или `NULL`
`settings` : | GtkPrintSettings
Возвращает : | Новый GtkPageSetup

Начиная с версии 2.10

### GtkPageSetupDoneFunc ()

    void        (*GtkPageSetupDoneFunc)         (GtkPageSetup *page_setup,
                                                 gpointer data);

Тип функции помещаемой в `gtk_print_run_page_setup_dialog_async()`. Эта функция вызывается когда диалог параметров страницы отключен, а так же служит как уведомление завершения для `data`.

`page_setup` : | GtkPageSetup
`data` : | Пользовательские данные помещаемые в `gtk_print_run_page_setup_dialog_async()`.

### gtk_print_run_page_setup_dialog_async ()

    void        gtk_print_run_page_setup_dialog_async
                                                (GtkWindow *parent,
                                                 GtkPageSetup *page_setup,
                                                 GtkPrintSettings *settings,
                                                 GtkPageSetupDoneFunc done_cb,
                                                 gpointer data);

Запускает диалог параметров страницы, позволяя пользователю изменять значения из `page_setup`.

В отличии от `gtk_print_run_page_setup_dialog()`, эта функция возвращается после отображения диалога парметров страницы на платформах которые это поддерживают, и вызывает `done_cb` из обработчика сигнала ::response диалога.

`parent` : | Переходный родитель, или `NULL`
`page_setup` : | Существующий GtkPageSetup, или `NULL`
`settings` : | GtkPrintSettings
`done_cb` : | Функция вызываемая когда пользователь сохраняет изменённые параметры страницы
`data` : | Пользовательские данные помещаемые в `done_cb`

Начиная с версии 2.10

### GtkPrintOperationPreview

    typedef struct _GtkPrintOperationPreview GtkPrintOperationPreview;

### gtk_print_operation_preview_end_preview ()

    void        gtk_print_operation_preview_end_preview
                                                (GtkPrintOperationPreview *preview);

Завершает предварительный промотр.

Эта функция должна вызываться для завершения выбранного предварительного просмотра печати.

`preview` : | GtkPrintOperationPreview

Начиная с версии 2.10

### gtk_print_operation_preview_is_selected ()

    gboolean    gtk_print_operation_preview_is_selected
                                                (GtkPrintOperationPreview *preview,
                                                 gint page_nr);

Определяет включена ли данная страница в набор страниц которые выбраны для печати.

`preview` : | GtkPrintOperationPreview
`page_nr` : | Номер страницы
Возвращает : | `TRUE` если страница выбрана для печати

Начиная с версии 2.10

### gtk_print_operation_preview_render_page ()

    void        gtk_print_operation_preview_render_page
                                                (GtkPrintOperationPreview *preview,
                                                 gint page_nr);

Представляет страницу для предварительного просмотра, используя контекст печати который передаётся в обработчик GtkPrintOperation::preview вместе с `preview`.

Помните, этой функции требуется чтобы контекст cairo был связан с контекстом печати.

`preview` : | GtkPrintOperationPreview
`page_nr` : | Представляемая страница

Начиная с версии 2.10

## Детали свойств

### Свойство "`allow-async`"

      "allow-async"          gboolean              : Read / Write

Определяет может ли операция печати выполняться в асинхронном режиме.

Некоторые системы не поддерживают асинхронную печать, но те которые это делают, возвращают `GTK_PRINT_OPERATION_RESULT_IN_PROGRESS` как статус, и издают сигнал выполнено когда операция фактически выполнится.

Windows порт не поддерживает асинхронные операции вообще (это вряд ли изменится). На других платформах, все действия за исключением `GTK_PRINT_OPERATION_ACTION_EXPORT` поддерживают асинхронные операции.

Значение по умолчанию: FALSE

Начиная с версии 2.10

### Свойство "`current-page`"

      "current-page"         gint                  : Read / Write

Текущая страница в документе.

Если установлена перед `gtk_print_operation_run()`, пользователь сможет выбрать только текущую страницу для печати.

Помните, это имеет смысл только для документов предварительно разбитых на страницы.

Допустимые значения: >= -1

Значение по умолчанию: -1

Начиная с версии 2.10

### Свойство "`custom-tab-label`"

      "custom-tab-label"     gchararray            : Read / Write

Используется как ярлык вкладки содержащей виджеты настройки. Это свойство может игнорироваться на некоторых платформах.

Если оно равно `NULL`, GTK+ использует ярлык по умолчанию.

Значение по умолчанию: NULL

Начиная с версии 2.10

### Свойство "`default-page-setup`"

      "default-page-setup"   GtkPageSetup          : Read / Write

GtkPageSetup используемый по умолчанию.

Эти настройки страницы используются в `gtk_print_operation_run()`, но они могут быть переписаны на основании предварительно установленной странице, подключив сигнал ::request-page-setup.

Начиная с версии 2.10

### Свойство "`export-filename`"

      "export-filename"      gchararray            : Read / Write

Имя файла для генерации вместо отображения диалога печати. В данный момент, поддерживается только формат PDF.

Преднамеренное использование этого свойства реализуется действием "Export to PDF".

"Print to PDF" поддерживается, независимо от того установлено это свойство или нет, с помощью пункта меню "Print to PDF" из списка принтеров в диалоге печати.

Значение по умолчанию: NULL

Начиная с версии 2.10

### Свойство "`job-name`"

      "job-name"             gchararray            : Read / Write

Строка используемая для идентификации задания (например в приложениях контроля таких как eggcups).

Если вы не установили имя задания, GTK+ выберет по умолчанию один из номеров последовательности заданий.

Значение по умолчанию: ""

Начиная с версии 2.10

### Свойство "`n-pages`"

      "n-pages"              gint                  : Read / Write

Количество страниц в документе.

Устанавливается в положительное число перед началом представления страниц. Может быть установлено обработчиком сигнала ::begin-print.

Помните, количество помещаемых сигналов ::request-page-setup и ::draw-page начинается с 0, то есть если пользователь выбрал печать всех страниц, последний сигнал ::draw-page будет для `n_pages` - 1.

Допустимые значения: >= -1

Значение по умолчанию: -1

Начиная с версии 2.10

### Свойство "`print-settings`"

      "print-settings"       GtkPrintSettings      : Read / Write

GtkPrintSettings используемый для инициализации диалога.

Установка этого свойства обычно используется для переустановки параметров печати из предыдущей операции печати, смотрите `gtk_print_operation_run()`.

Начиная с версии 2.10

### Свойство "`show-progress`"

      "show-progress"        gboolean              : Read / Write

Определяет показывается ли диалог выполнения в течении операции печати.

Значение по умолчанию: FALSE

Начиная с версии 2.10

### Свойство "`status`"

      "status"               GtkPrintStatus        : Read

Статус операции печати.

Значение по умолчанию: GTK_PRINT_STATUS_INITIAL

Начиная с версии 2.10

### Свойство "`status-string`"

      "status-string"        gchararray            : Read

Строка представляющая статус операции. Строка преобразуется для удобного отображения статуса печати, например в GtkStatusbar.

Смотрите свойство ::status которое удобно для програмного использования.

Значение по умолчанию: ""

Начиная с версии 2.10

### Свойство "`track-print-status`"

      "track-print-status"   gboolean              : Read / Write

Если `TRUE`, операция печати попытается сообщать статус задания печати в очереди принтера и печати. Это позволяет вашему приложению отображать такие случаи как "закончилась бумага", и когда задание печати фактически отправлено на принтер. Однако, это часто реализуется используя опрос и не должно задействоваться без особой необходимости.

Значение по умолчанию: FALSE

Начиная с версии 2.10

### Свойство "`unit`"

      "unit"                 GtkUnit               : Read / Write

Преобразование в контекст cairo полученного из GtkPrintContext установленного таким образом что расстояния измеряются в единицах `unit`.

Значение по умолчанию: GTK_UNIT_PIXEL

Начиная с версии 2.10

### Свойство "`use-full-page`"

      "use-full-page"        gboolean              : Read / Write

Если `TRUE`, преобразование в контекст cairo полученного из GtkPrintContext помещает начало в верхний левый угол страницы (который может не быть верхним левым углом листа, в зависимости от ориентации страницы и количества страниц в листе). Иначе, начало это верхний левый угол области изображения (то есть в пределах границ).

Значение по умолчанию: FALSE

Начиная с версии 2.10

## Детали сигналов

### Сигнал "begin-print"

    void        user_function                  (GtkPrintOperation *operation,
                                                GtkPrintContext   *context,
                                                gpointer           user_data)      : Run last

Издаётся после завершения настроек печати пользователем с помощью диалога, пред фактическим началом представления страниц.

Обычное использование этого сигнала – это установка параметров из GtkPrintContext и разбиение на страницы соответственно, а затем установка количества страниц с помощью `gtk_print_operation_set_n_pages()`.

`operation` : | GtkPrintOperation в которой издаётся сигнал
`context` : | GtkPrintContext для текущей операции
`user_data` : | Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10

### Сигнал "create-custom-widget"

    GObject*    user_function                  (GtkPrintOperation *operation,
                                                gpointer           user_data)      : Run last

Издаётся при отображении диалога печати. Если вы вернёте виджет в обработчик этого сигнала он будет добавлен во вкладку настройки диалога печати. Обычно возвращается контейнер со множеством виджетов в нем.

Возвращаемым виджетом владеет диалог печати, а время его существования контролирует приложение. Однако, виджет гарантировано останется в течении издания сигнала custom-widget-apply в операции. Тогда вы сможете прочесть вывод любой информации в которой нуждаетесь от виджетов.

`operation` : | GtkPrintOperation в которой издаётся сигнал
`user_data` : | Пользовательские данные помещаемые при подключении обработчика сигнала.
Возвращает : | Виджет настройки который встраивается в диалог печати, или `NULL`

Начиная с версии 2.10

### Сигнал "custom-widget-apply"

    void        user_function                  (GtkPrintOperation *operation,
                                                GtkWidget         *widget,
                                                gpointer           user_data)      : Run last

Издаётся непосредственно перед началом печати, если вы добавили виджет настройки в обработчик create-custom-widget. Когда вы получаете этот сигнал, вам нужно прочесть информацию из виджетов настройки, так как не гарантировано что она будет доступна длительное время.

`operation` : | GtkPrintOperation в которой издаётся сигнал
`widget` : | Виджет настройки добавляемый в create-custom-widget
`user_data` : | Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10

### Сигнал "done"

    void        user_function                  (GtkPrintOperation      *operation,
                                                GtkPrintOperationResult result,
                                                gpointer                user_data)      : Run last

Издаётся когда операция печати завершила выполнять все запросы печати. `result` выдаёт вам информацию о произошедшем во время печати. Если `result` это `GTK_PRINT_OPERATION_RESULT_ERROR` то для получения подробностей произошедшего можно вызвать `gtk_print_operation_get_error()`.

Если вы включили отслеживание состояния печати, тогда `gtk_print_operation_is_finished()` может продолжить возвращать `FALSE` после издания этого сигнала.

`operation` : | GtkPrintOperation в которой издаётся сигнал
`result` : | Результат операции печати
`user_data` : | Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10

### Сигнал "draw-page"

    void        user_function                  (GtkPrintOperation *operation,
                                                GtkPrintContext   *context,
                                                gint               page_nr,
                                                gpointer           user_data)      : Run last

Издаётся для каждой печатаемой страницы. Обработчик сигнала должен представлять `page_nr`'s страницу в контексте cairo полученном из `context` используя `gtk_print_context_get_cairo_context()`.

    static void
    draw_page (GtkPrintOperation *operation,
               GtkPrintContext   *context,
               gint               page_nr,
               gpointer           user_data)
    {
      cairo_t *cr;
      PangoLayout *layout;
      gdouble width, text_height;
      gint layout_height;
      PangoFontDescription *desc;

      cr = gtk_print_context_get_cairo_context (context);
      width = gtk_print_context_get_width (context);

      cairo_rectangle (cr, 0, 0, width, HEADER_HEIGHT);

      cairo_set_source_rgb (cr, 0.8, 0.8, 0.8);
      cairo_fill (cr);

      layout = gtk_print_context_create_pango_layout (context);

      desc = pango_font_description_from_string ("sans 14");
      pango_layout_set_font_description (layout, desc);
      pango_font_description_free (desc);

      pango_layout_set_text (layout, "some text", -1);
      pango_layout_set_width (layout, width);
      pango_layout_set_alignment (layout, PANGO_ALIGN_CENTER);

      pango_layout_get_size (layout, NULL, &layout_height);
      text_height = (gdouble)layout_height / PANGO_SCALE;

      cairo_move_to (cr, width / 2,  (HEADER_HEIGHT - text_height) / 2);
      pango_cairo_show_layout (cr, layout);

      g_object_unref (layout);
    }

Используйте `gtk_print_operation_set_use_full_page()` и `gtk_print_operation_set_unit()` перед началом операции печати для преобразования в контекст cairo согласно вашим потребностям.

`operation` : | GtkPrintOperation в которой издаётся сигнал
`context` : | GtkPrintContext для текущей операции
`page_nr` : | Номер текущей печатаемой страницы
`user_data` : | Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10

### Сигнал "end-print"

    void        user_function                  (GtkPrintOperation *operation,
                                                GtkPrintContext   *context,
                                                gpointer           user_data)      : Run last

Издаётся после представления всех страниц (rendered). Обработчик сигнала может очистить любой ресурс который был распределён в обработчике ::begin-print.

`operation` : | GtkPrintOperation в которой издаётся сигнал
`context` : | GtkPrintContext для текущей операции
`user_data` : | Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10

### Сигнал "paginate"

    gboolean    user_function                  (GtkPrintOperation *operation,
                                                GtkPrintContext   *context,
                                                gpointer           user_data)      : Run last

Издаётся после сигнала begin-print, но перед фактическим началом представления страниц (rendering). Издаётся пока не вернёт `FALSE`.

Этот сигнал предназначен для постраничного разбиения документа в небольших частях, избегая блокировки пользовательского интерфейса в течении длительного времени. Обработчик сигнала должен обновлять количество страниц используя `gtk_print_operation_set_n_pages()`, и возвращать `TRUE` если документ полностью разобран постранично.

Если вам не нужно разбиение по частям, вы можете просто сделать всё в обработчике begin-print, и оттуда же установить количество страниц.

`operation` : | GtkPrintOperation в которой издаётся сигнал
`context` : | GtkPrintContext для текущей операции
`user_data` : | Пользовательские данные помещаемые при подключении обработчика сигнала.
Возвращает : | `TRUE` если постраничный разбор выполнен

Начиная с версии 2.10

### Сигнал "preview"

    gboolean    user_function                  (GtkPrintOperation        *operation,
                                                GtkPrintOperationPreview *preview,
                                                GtkPrintContext          *context,
                                                GtkWindow                *parent,
                                                gpointer                  user_data)      : Run last

Издаётся при запросе предварительного просмотра из родного диалога.

Обработчик по умолчанию для этого сигнала, использует внешнее приложение для предварительного просмотра печати.

Для осуществления выбора предварительного просмотра печати, приложение должно вернуть `TRUE` из этого обработчика сигнала. Чтобы использовать поставляемый `context` для осуществления предварительного просмотра, нужно преобразовать в подходящий cairo контекст с помощью `gtk_print_context_set_cairo_context()`.

Реализованный предварительный просмотр может использовать `gtk_print_operation_preview_is_selected()` и `gtk_print_operation_preview_render_page()` для определения страниц которые выбраны для печати и представлять их. Предварительный просмотр должен заканчиваться вызовом `gtk_print_operation_preview_end_preview()` (обычно в ответ на нажатие пользователем кнопки close).

`operation` : | GtkPrintOperation в которой издаётся сигнал
`preview` : | GtkPrintContext для текущей операции
`context` : | GtkPrintContext который будет использоваться
`parent` : | GtkWindow для использования в качестве родительского окна, или `NULL`
`user_data` : | Пользовательские данные помещаемые при подключении обработчика сигнала.
Возвращает : | `TRUE` если слушающий хочет принять управление контролем предварительного просмотра

Начиная с версии 2.10

### Сигнал "request-page-setup"

    void        user_function                  (GtkPrintOperation *operation,
                                                GtkPrintContext   *context,
                                                gint               page_nr,
                                                GtkPageSetup      *setup,
                                                gpointer           user_data)      : Run last

Издаётся один раз для каждой печатаемой страницы, давая приложению возможность изменить параметры страницы. Любые изменения выполненные для `setup` будут в силе только для печати этой страницы.

`operation` : | GtkPrintOperation в которой издаётся сигнал
`context` : | GtkPrintContext для текущей операции
`page_nr` : | Номер текущей печатаемой страницы
`setup` : | GtkPageSetup
`user_data` : | Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10

### Сигнал "status-changed"

    void        user_function                  (GtkPrintOperation *operation,
                                                gpointer           user_data)      : Run last

Издаётся между различными фазами операции печати. Смотрите GtkPrintStatus описывающий различные фазы. Используйте `gtk_print_operation_get_status()` для определения текущего состояния.

`operation` : | GtkPrintOperation в которой издаётся сигнал
`user_data` : | Пользовательские данные помещаемые при подключении обработчика сигнала.

Начиная с версии 2.10

## Смотрите также

GtkPrintContext, GtkPrintUnixDialog