Проблема с печатью UIPrintInteractionController

Я добавил кнопку действия в элемент навигации моего пользовательского QLPreviewController. при нажатии на кнопку действия я представляю UIPrintInteractionController. Я получаю файлы из каталога Documents моего приложения. При предварительном просмотре проблем нет. Но когда я печатаю тот же файл, нажимая кнопку действия, [UIPrintInteractionController canPrintData:data] возвращает false. Но это работает, если файл находится в корне моего приложения.

Ниже приведен код, который выполняется при нажатии на кнопку действия.

- (void)tappedPrintButton:(id) sender { 
UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];

NSURL *fileURL = (NSURL *)[self currentPreviewItem];

NSData *data = [NSData dataWithContentsOfURL:fileURL];

if  (pic && [UIPrintInteractionController canPrintData:data] ) {

    pic.delegate = self;



    UIPrintInfo *printInfo = [UIPrintInfo printInfo];

    printInfo.outputType = UIPrintInfoOutputGeneral;

    printInfo.jobName = [(NSURL *)[self.files objectAtIndex:0] lastPathComponent];

    printInfo.duplex = UIPrintInfoDuplexLongEdge;

    pic.printInfo = printInfo;

    pic.showsPageRange = YES;

    pic.printingItem = data;



    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =

    ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) {

        if (!completed && error)

            NSLog(@"FAILED! due to error in domain %@ with error code %u",

                  error.domain, error.code);

    };

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

        [pic presentFromBarButtonItem:self.myActionBarButton animated:YES

                    completionHandler:completionHandler];

    } else {

        [pic presentAnimated:YES completionHandler:completionHandler];

    }
}
}

Я не могу представить проблему. Пожалуйста помоги...


person chinthakad    schedule 01.06.2012    source источник


Ответы (1)


Свойство printingItem объекта UIPrintInteractionController задокументировано для поддержки только данных PDF и изображений:

Объект должен быть экземпляром класса NSURL, NSData, UIImage или ALAsset. Объект первых двух типов должен ссылаться или содержать данные изображения или данные PDF.

Если вы хотите использовать UIPrintInteractionController для печати данных, отличных от PDF и изображений, таких как документы Office, вместо этого вы должны использовать свойство printFormatter.

Вы можете печатать содержимое UIWebView, UITextView и MKMapView через их форматировщики печати без какой-либо пользовательской логики. Это описано в документации UIViewPrintFormatter:

Экземпляр класса UIViewPrintFormatter размещает нарисованное содержимое представления для печати. Содержимое представления может занимать несколько страниц.

Экземпляры трех системных классов предлагают приложениям удобные форматировщики печати представлений: UIWebView и UITextView платформы UIKit и MKMapView платформы Map Kit. Чтобы получить средство форматирования представления для задания на печать, вызовите метод UIView viewPrintFormatter и инициализируйте унаследованные свойства макета средства форматирования печати.

К сожалению, представление QLPreviewController не задокументировано как возвращающее действительный viewPrintFormatter. Это означает, что вы не сможете создать свой собственный код печати с помощью QLPreviewController. Вместо этого вы можете рассмотреть возможность использования UIWebView для рендеринга документа.

person Stephen Poletto    schedule 25.10.2012