Управление и расширение панели печати

NSPrintPanel объект создает и выводит на экран панель Print, позволяющую пользователю изменять текущие настройки печати, такие как диапазон страницы, и число копирует в печать. Выполнение работы печати заставляет панель Print появляться. Можно препятствовать панели шоу путем предоставления No к setShowsPrintPanel: метод. (Операции печати, создающие PDF или данные EPS, никогда не выводят на экран панель Print.)

Подавление панели печати

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

Можно подавить дисплей панели Print путем отправки setShowsPrintPanel: с a NO параметр NSPrintOperation объект прежде, чем выполнить работу.

Однако удостоверьтесь что любые настройки не по умолчанию в NSPrintPanel объект, который обычно выбирался бы из NSPrintPanel объект установлен в рыночную стоимость — копия NSPrintPanel объект, используемый в предыдущем задании печати, будет иметь правильные значения, как показано в Перечислении 5-1.

Перечисление 5-1  , Гарантирующее объект панели печати, имеет рыночную стоимость

// Invoked in response to the standard "Print..." menu command
- (void)print:(id)sender {
    NSPrintOperation *op = [NSPrintOperation printOperationWithView:self
                                    printInfo:[self printInfo]];
    if ( [op runOperation] )
        [self setPrintInfo:[op printInfo]];
}
 
// Invoked in response to a custom "Print Now" menu command
- (void)printWithNoPanel:(id)sender {
    NSPrintOperation *op;
 
    op = [NSPrintOperation printOperationWithView:self
                printInfo:[self printInfo]];
    [op setShowsPrintPanel:NO];
    [op runOperation];
}

Изменение панели печати

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

Для добавления пользовательского вспомогательного представление к стандартной панели Print выполните эти шаги:

  1. Используйте Интерфейсного Разработчика в XCode для создания вспомогательного представление, помещая средства управления, соответствующие специфичным для приложения настройкам печати. (Например, посмотрите рисунок 5-1.)

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

  2. Подкласс NSViewController для создания аксессуара панели печати просматривают контроллер.

  3. Реализуйте метод требуемого протокола localizedSummaryItems.

  4. (Необязательно) Реализация keyPathsForValuesAffectingPreview.

  5. Свяжите панель печати с работой печати.

  6. Вызовите addAccessoryController: метод для добавления вспомогательного представление к панели печати.

  7. Выполните работу печати для инициирования показа панели Print

Рисунок 5-1  вспомогательное представление создается в Интерфейсном Разработчике

При выполнении работы печати Ваш вспомогательный, представление доступно для просмотра в панели Print. Рисунок 5-2 показывает вспомогательному представление для проекта примера кода TextEdit. Рисунок 5-1 показывает представление, как это появляется в Интерфейсном Разработчике.

Рисунок 5-2  представление аксессуара TextEdit

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

- (void)print:(id)sender {
    NSPrintOperation *op;
    MyPrintPanel *myPanel = [[MyPrintPanel alloc] init];
 
    op = [NSPrintOperation printOperationWithView:self];
    [op setPrintPanel:myPanel];
    [op runOperation];
    [myPanel release];
}