ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C часть 3

22. Дополнительно

AirPrint

В этом примере мы рассмотрим AirPrint – еще одну интересную технологию от Apple. Добавление базовой функциональности печати вiOS достаточно прост и требует несколько строк кода.

 

Конечно не обошлось и без аппаратных ограничений. Печать поддерживается только на тех устройствах, которые поддерживают многозадачность. А это означает что вы не сможете использовать AirPrint на таких устройствах как iPhone 3G, iPod touch 2G. А так же, на тех, у которых прошивка ниже 4.0.

 

Перейдем собственно к теме. Сегодня мы узнаем как с помощью технологии AirPrint распечатать избражение (ссылка на картинку, скачайте ее и добавьте в проект). Создадим проект на базе шаблона Single View Application и назовем его AirPrint.

 

Перейдем в ViewController.h, подключим протокол UIPrintInteractionControllerDelegate и добавим метод который будет вызывать печать:

 

<code data-result="[object Object]">#import &lt;UIKit/UIKit.h&gt;

@interface ViewController : UIViewController &lt;UIPrintInteractionControllerDelegate&gt;

- (IBAction)print;

@end</code>

 

Теперь добавим реализацию метода print в ViewController.m:

 

<code data-result="[object Object]">- (IBAction)print {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"logo" ofType:@"png"];
    NSData *dataFromPath = [NSData dataWithContentsOfFile:path];

    UIPrintInteractionController *printController = [UIPrintInteractionController sharedPrintController];
    if(printController &amp;&amp; [UIPrintInteractionController canPrintData:dataFromPath]) {
        printController.delegate = self;

        UIPrintInfo *printInfo = [UIPrintInfo printInfo];
        printInfo.outputType = UIPrintInfoOutputGeneral;
        printInfo.jobName = @"iMaladec";
        printInfo.duplex = UIPrintInfoDuplexLongEdge;
        printController.printInfo = printInfo;
        printController.showsPageRange = YES;
        printController.printingItem = dataFromPath;

        void (^completionHandler)(UIPrintInteractionController *, 
                                  BOOL, 
                                  NSError *) = ^(UIPrintInteractionController *printController, 
                                                 BOOL completed, 
                                                 NSError *error) {
            if (!completed &amp;&amp; error) {
                NSLog(@"Ошибка %@", error);
            }
        };

        [printController presentAnimated:YES completionHandler:completionHandler];
    }    
}</code>

 

Давайте разберем с вами основные моменты.

 

Считываем картинку с песочницы приложения. UIPrintInteractionController является классом для взаимодействия системы печати в iOS. Нам не требуется добавлять дополнительно фреймворк для работы с ним, так как этот класс есть в UIKit.framework, который добавляется автоматически. Затем следует проверка. Получилось ли создать объект вышеупомянутого класса и способен ли он распечатать нашу страничку. Если оба условия выполняются — делаем по порядку:

  • создаем объект класса UIPrintInfo (в нем будет храниться общая информация о печати)
  • задаем объету printInfo тип содержания печатной формы
  • устанавливаем имя печатной страници
  • устанавливаем ее тип (в нашем случае это одностороння страница)
  • передаем объекту printController заполненую информацию
  • передаем картинку для печати
Здесь следует сделать небольшое отступление. Свойсвто outputType класса UIPrintInfo может принимать следующие значения:
  • UIPrintInfoOutputGeneral – по умолчанию. Используется для печати текста, изображений, веб–страниц и пр.
  • UIPrintOutputPhoto – используется для печати фотографий.
  • UIPrintOutputGrayscale – используется строго для печати черного текста.
Следующий шаг является, отлов ошибок. Чтобы вывести сведения об ошибках необходимо объявить это в коде. Он будет вызываться при печати и будет выводить любые ошибки в консоль.
Осталось добавить кнопку в интерфейс приложения и связать ее с нашим методом.
Для отлавливания событий начала печати и окончания следует добавить два метода делегата:
<code data-result="[object Object]">- (void)printInteractionControllerWillStartJob:(UIPrintInteractionController *)printInteractionController 
{
    NSLog(@"Печать началась");
}

- (void)printInteractionControllerDidFinishJob:(UIPrintInteractionController *)printInteractionController
{
    NSLog(@"Печать окончена");
}</code>
В завершении хотелось бы сказать, для того чтобы проверить работу нам потребуется устройство с iOS 4.0 и выше и принтер с поддержкой AirPrint. Список таких принтеров можно найти здесь.
Исходный код проекта можно скачать здесь.

Comments are closed.