Глава 19. !! Печать

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

Архитектура печати в X основана на повторном использовании большей части X протокола и библиотек интерфейсов прикладных программ с X сервером, который производит преобразование в такие языки принтеров как PostScript и PCL (см. спецификацию). Соответственно, выбранная для печати виджетов модель состоит в повторном использовании кода, который производит отрисовку виджета в видеорежиме (через метод expose виджета) для отрисовки в режиме печати через сервер печати X.

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

В результате выбора такого подхода не существует четкой границы между печатью только содержимого виджетов и печатью экранного образа виджетов с высоким разрешением. Разделение между текущим содержимым и текущим видом оставется за программистом

void OKCallback(Widget w, XtPointer client_data, XtPointer call_data)
{
   DtPrintSetupCallbackStruct *pbs = call_data;
   static Widget shell;
   static int num;           /* app data to print */

   if (!shell) {
      shell =
         XmPrintSetup(widget,
                      XpGetScreenOfContext(pbs->print_display,
                                           pbs->print_context)
                      "Print", NULL, 0);
      XtAddCallback(p->print_shell, XmNpageSetupCallback,
                    PageSetupCB, #);
      XtAddCallback(p->print_shell, XmNpdmNotificationCallback,
                    PdmNotifyCB, #);
   }
   num = 0;
   /* check print-to-file & print */
}