AppKit, распечатывающий API
Платформа AppKit публикует программируемый интерфейс, поддерживающий печать в Вашем приложении. API включает пять классов и один формальный протокол. Объектам этих классов и делегата, реализующего протокол, показали отношения во время выполнения на рисунке 2-1.
Эти классы находятся в уровне выше Базовой Печати, которая является 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
объект.
После получения сообщения для печати общий поток операций следующие:
Создайте
NSPrintOperation
объект управлять заданием печати, обеспечивая представление, содержащее содержание для печати.(Необязательно) Добавьте вспомогательное представление к панели печати задания.
Выполните работу печати.
(Необязательно) Для многостраничного задания, переопределите, как представление разделено между многократными страницами при помощи методов
NSView
класс.
Представление drawRect:
метод рисует содержание представления.
Реализация распечатывающий в Вашем приложении может быть столь же простой как пишущий эти немного строк кода:
- (IBAction)print:(id)sender { |
NSPrintOperation *op; |
op = [NSPrintOperation printOperationWithView:self]; |
if (op) |
[op runOperation]; |
else |
// handle error here |
} |
OS X, распечатывающий также, предоставляет поддержку для пользовательского форматирования и расположения. Когда Вы добавляете те задачи, поток операций является немного более сложным, но прямым. Посмотрите Печать От Своего Содержания Страницы Приложения и Разметки.