AppKit, распечатывающий API

Платформа AppKit публикует программируемый интерфейс, поддерживающий печать в Вашем приложении. API включает пять классов и один формальный протокол. Объектам этих классов и делегата, реализующего протокол, показали отношения во время выполнения на рисунке 2-1.

Рисунок 2-1  классы и протокол в AppKit, распечатывающем API

Эти классы находятся в уровне выше Базовой Печати, которая является API C, используемым, чтобы создать инструменты командной строки или выполнить задачи печати, не выводящие на экран пользовательский интерфейс. NSPrintInfo класс обеспечивает прямой доступ к Базовой функциональности Печати. В приложениях Какао Базовая Печать может использоваться для расширения функциональности AppKit, распечатывающего классы. Однако, большинство приложений не должно должно быть использовать Ядро, Распечатывающее API, таким образом, оно не обсуждено далее в этом документе. Если Вы хотите узнать больше о Базовой Печати, посмотрите, что Какао проекта примера кода Распечатывает Печать Ядра использования и техническое примечание Используя Какао и Ядро, Распечатывающее Вместе.

Обзор классов печати и протокол

Объекты AppKit, распечатывающего классы, имеют определенные роли и обязанности.

NSPrintOperation управляет заданием печати

NSPrintOperation объект является центральным к печати; без него Ваше приложение не может распечатать. Это выводит на экран панель Print, дополнительно порождает новый поток для обработки задания печати, устанавливает среду печати и говорит NSView распечатать себя и руки от получающегося содержания к уровню CUPS системы. Это может также генерировать данные Portable Document Format (PDF) вместо того, чтобы отправить результаты в принтер.

NSPrintOperation сотрудничает с двумя другими объектами: NSPrintInfo объект, указывающий, как код должен быть сгенерирован, и NSView объект, выполняющий фактическую генерацию кода. Когда Вы создаете, необходимо указать представление NSPrintOperation объект. Можно дополнительно указать NSPrintInfo объект.

Опции Хранилищ NSPrintInfo, Который Управление, Как Выполнена Работа Печати

Информация о печати включает формат бумаги, число копий, печатных полей, использовать ли заголовок и нижний колонтитул и т.д. Система печати автоматически создает совместно используемое NSPrintInfo объект, содержащий настройки значений по умолчанию, используемые другими объектами системы печати.

Обычно Вы не устанавливаете NSPrintInfo атрибуты непосредственно — это сделано экземплярами NSPageLayout и NSPrintPanel. NSView это генерирует содержание печати, мог бы также заменить некоторых NSPrintInfo настройки, такие как разбиение на страницы и атрибуты ориентации.

Ваше приложение не должно создавать NSPrintInfo возразите, если это не должно изменить настройки по умолчанию или сохранить и восстановить пользовательские настройки. Посмотрите Управляющие Информационные объекты Печати.

NSPrintPanel создает и выводит на экран панель печати

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

Если Вы добавляете вспомогательное представление к панели Print для отображения специфичных для приложения опций, необходимо принять NSPrintPanelAccessorizing протокол. Посмотрите Управление и Расширение Панели Печати.

Протокол NSPrintPanelAccessorizing управляет пользовательским вспомогательным представление

NSPrintPanelAccessorizing протокол объявляет два метода что NSPrintPanel использование класса для получения информации от распечатывающего вспомогательного контроллер. Вы обязаны реализовывать localizedSummaryItems метод, возвращающий массив словарей, содержащих локализованные сводные строки для установки в Вашем вспомогательном представление. Это является дополнительным для Вас для реализации keyPathsForValuesAffectingPreview.

Посмотрите управление и расширение панели печати.

NSPageLayout выводит на экран панель установки страницы

Этот класс управляет стандартной системной панелью Page Setup. Ваше приложение не должно создавать NSPageLayout возразите, если Вы не хотите управлять потоком операций печати сами. Если для Вашего приложения действительно нужна к чесотке панель Page Setup, это должно вывести на экран панель Page Setup и впоследствии инициировать желаемое поведение печати.

Это не типично для приложений для создания NSPageLayout объекты. Посмотрите Управляющие Объекты Макета страницы.

NSView рисует содержание Ваша печать приложения

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

В дополнение к рисованию Вашего пользовательского содержания, NSView класс имеет методы для:

  • Рисование заголовка и содержания нижнего колонтитула

  • Разбиение на страницы содержания

  • Указание меток выравнивания или виртуального листа граничит с каждой логической страницей

  • Указание получения обрезает метки или строки сгиба на каждом печатном листе

Для получения дополнительной информации о рисовании содержания к NSView объекты, посмотрите, что Какао Рисует Руководство.

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

Основной поток операций печати

В приложении Какао печать обычно инициируется пользователем, выбирающим команду Меню печати, обычно отправляющую любому a print: или printDocument: передайте цепочку респондента. То, которое отправляется сообщение, зависит от того, основано ли приложение на документе. Приложение получает сообщение любой в пользовательском NSView объект (если это имеет клавиатурный фокус), делегат окна, или NSDocument объект.

После получения сообщения для печати общий поток операций следующие:

  1. Создайте NSPrintOperation объект управлять заданием печати, обеспечивая представление, содержащее содержание для печати.

  2. (Необязательно) Добавьте вспомогательное представление к панели печати задания.

  3. Выполните работу печати.

  4. (Необязательно) Для многостраничного задания, переопределите, как представление разделено между многократными страницами при помощи методов NSView класс.

Представление drawRect: метод рисует содержание представления.

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

- (IBAction)print:(id)sender {
      NSPrintOperation *op;
      op = [NSPrintOperation printOperationWithView:self];
      if (op)
           [op runOperation];
      else
          // handle error here
}

OS X, распечатывающий также, предоставляет поддержку для пользовательского форматирования и расположения. Когда Вы добавляете те задачи, поток операций является немного более сложным, но прямым. Посмотрите Печать От Своего Содержания Страницы Приложения и Разметки.