printer mac os x

Архитектура печати Cocoa

Mac OS X

Архитектура печати Cocoa состоит из полдюжины взаимосвязанных классов. Отдельные классы представляют собой панели параметров страницы, панели печати, настройки печати, операцим печати, принтера, и объекта, который будет напечатан.

  • NSView генерирует данные для печати. Поскольку в Cocoa отрисовка устройствами независима, вид генерирует команду печати, просто отрисовывая себя с помощью команд рисования Application Kit и Core Graphics, после того, как устройство отображения было изменено на принтер. Виду можно сказать, чтобы распечатал себя сам, опираясь на свой метод print:.
  • NSPrintInfo хранит параметры, которые определяют, как выполняется задание на печать. Эта информация включает в себя размер бумаги, число копий, поля печати, и так далее. Общий экземпляр предоставляет значения по умолчанию, используемые другими объектами системы печати, если вы не предоставите собственный экземпляр для конкретного задания печати.
  • NSPageLayout отображает панель Параметров страницы, где пользователь выбирает тип бумаги и ориентацию. Настройки хранятся в NSPrintInfo объекте. Вы можете добавить пользовательский вид к панели Параметров страницы для отображения специфичных для приложения вариантов.
  • NSPrintPanel отображает панель печати, где пользователь выбирает параметры вывода на печать, такие как количество копий и страниц для печати. Настройки хранятся в NSPrintInfo объекте. Вы можете добавить пользовательский вид для панели печати, чтобы отобразить специфичные для приложения варианты.
  • NSPrintOperation управляет заданием на печать. Он отображает панель печати, при необходимости создает новый поток для обработки задания на печать, настраивает среду печати, и говорит NSView распечатать себя. Он также может генерировать Encapsulated PostScript (EPS) или Portable Document Format (PDF) данных вместо отправки результатов на принтер.
  • NSPrinter описывает возможности принтера, как это определено в его PostScript Printer Description (PPD-файле). (Несмотря на свое название, не-PostScript принтер может иметь PPDs, тоже.) Принтеры могут быть определены либо по имени, либо по типу (марка и модель). Вы также можете использовать несколько методов класса, чтобы получить список всех принтеров, организованный по имени или по типу, которые пользователь добавил в свой ​​список принтеров.

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

Работа с принтером

NSPrintOperation объект контролирует процесс, который создает задание на печать. Задание на печать, как правило, отправляется на принтер, но оно также может быть использовано для создания Portable Document Format (PDF) и Encapsulated PostScript (EPS) данных для вашего приложения. NSPrintOperation объект не генерирует сам код печати, он просто управляет всем процессом, опираясь на объект NSView для генерации кода.

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

Общий NSPrintInfo хорошо работает для приложений, которые не основанны на документах. Тем не менее, документ-приложения должны создавать NSPrintInfo для каждого документа, которые могут быть распечатаны и использовать этот объект вместо общего. Это позволяет пользователям устанавливать атрибуты печати для каждого документа.

После создания операция печати может быть настроена несколькими способами. По умолчанию, операция печати отображает панель печати, позволяя пользователю изменять текущие настройки печати. Вы можете это предотвратить с помощью метода setShowPanels:. Вы также можете указать операции печати, включить пользовательский вспомогательный вид в стандартную панель печати. Вспомогательный вид может представлять специфичных для приложения настройки печати для пользователей. (Операции печати, которые создают PDF или EPS данные никогда не отображают панели печати.)

По умолчанию выполняемые операции печати генерируют данные на текущий поток. Этот поток, как правило, либо, основной поток приложения, либо поток, который обрабатывает пользовательские события. Вы можете сказать, операции печати вместо этого породить новый поток и генерировать задания на печать на него, используя setCanSpawnSeparateThread: метод. Это позволяет приложению продолжить обработку событий, а не блокировать. (Операции печати, которые создают PDF или EPS данных всегда выполняются в текущем потоке.)

После настройки операции печати, вы говорите ей начать работать, отправив ей runOperation или runOperationModalForWindow:delegate:didRunSelector:contextInfo: сообщение. Первое запускает панель печати, как модальный диалог приложения и блокирует, пока операция печатати не завершится. Вторая отображает панель печати, как панель для указанного окна и возвращается немедленно, отправив сообщение на делегат при завершении операции печати.

Как хранится информация печати

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

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

В NSDocument-приложении, каждый NSDocument имеет свой собственный объект информации печати, который можно получить с помощью метода printInfo NSDocument класса. Если вы установите его самостоятельно, используя NSDocument метод setPrintInfo:, документ изначально использует копию общего объекта приложения. Когда пользователь вносит изменения в панели "Параметры страницы" для печати объект информации документа автоматически обновляется с новыми настройками печати.

NSPrintInfo объект содержит словарь, который хранит свои атрибуты настроек.

Есть несколько случаев, когда вы можете записать параметры объекта информации печати. Во-первых, вы можете запомнить параметры печати во время последнего вашего запуска приложения. В этом случае вы можете записать объект информации печати, как предпочтительное приложению каждый раз, когда пользователь печатает что-то, а затем восстановить настройки при запуске приложения. Однако, так как словарь, который хранит объект NSPrintInfo включает в себя неимущественные значения списка, он не является списком свойств. Таким образом, он не может быть преобразован в PLIST формат и сохранен непосредственно как предпочтительные значения. Вместо этого, вы должны использовать метод класса NSKeyedArchiver (или NSArchiver) archivedDataWithRootObject: для кодирования NSPrintInfo объекта как объекта NSData, который может быть сохранен в списке свойств или сохранен в файл. Для восстановления NSPrintInfo объекта, перезагрузите объект NSData, а затем используйте метод класса NSKeyedUnarchiver (или NSUnarchiver) unarchiveObjectWithData: для декодирования NSPrintInfo информации.

Пример использования NSUserDefaults для хранения объекта NSPrintInfo в настройках по умолчанию.

- (void)print :(BOOL)preview { // Метод выводит на печать или предпросмотр объект self view 
  NSPrintInfo* printinfo;
  NSString* sKeyPrih = @"prihord"; // Ключ в котором расположен объект NSPrintInfo
  
  // Пробуем извлечь 
  NSUserDefaults* userDef = [[NSUserDefaults alloc] init];
  NSData* printinfod = [userDef dataForKey:sKeyPrih];
  if(printinfod){ // Если удачно извлекли
    printinfo = [NSUnarchiver unarchiveObjectWithData:printinfod];
  }
  else { // Иначе выводим панель настройки печати
    NSPageLayout* pl = [[NSPageLayout alloc]init];
    if([pl runModal]== NSOKButton){
      printinfo = pl.printInfo;
      
      // сохраним введенные настройки в User Defaults
      NSData* dt = [NSArchiver archivedDataWithRootObject:printinfo];
      [userDef setObject:dt forKey:sKeyPrih];
    }
  }
  NSPrintOperation* pro;
  if(printinfo)
    pro = [NSPrintOperation printOperationWithView:[self view] printInfo:printinfo];
  else
    pro = [NSPrintOperation printOperationWithView:[self view]];
  [pro setShowsPrintPanel:preview]; // Выводим на печать или предпросмотр
  [pro runOperation];
}
 
 
homeЗаметили ошибкукарта сайта 
   Made on a Mac