2012-06-01 98 views
3

我添加了一個動作按鈕到我的自定義QLPreviewController的navigationItem。當點擊動作按鈕時,我呈現一個UIPrintInteractionController。 我從我的應用程序的文檔目錄中獲取文件。預覽時沒有問題。但是當我通過點擊操作按鈕打印相同的文件時,[UIPrintInteractionController canPrintData:data]返回false。但它的工作原理是,如果文件在我的應用程序根目錄中。UIPrintInteractionController打印問題

下面是代碼,點擊操作按鈕時執行。

- (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]; 

    } 
} 
} 

我無法想象這個問題。請幫助...

回答

2

UIPrintInteractionControllerprintingItem屬性是documented只支持PDF和圖像數據:

的對象必須是NSURL,NSData的,UIImage的,或ALAsset類的一個實例。前兩種類型的對象必須引用或包含圖像數據或PDF數據。

如果你想使用UIPrintInteractionController打印非PDF,非圖像數據,如Office文檔,您必須改用printFormatter屬性。

您可以通過其打印格式化程序打印UIWebViewUITextViewMKMapView內容,而無需任何自定義邏輯。這在UIViewPrintFormatter documentation中有記錄:

UIViewPrintFormatter類的一個實例展示了打印視圖的繪製內容。視圖的內容可以跨越多個頁面。

三個系統類的實例爲應用程序提供可用的視圖打印格式器:UIKit框架的UIWebView和UITextView以及Map Kit框架的MKMapView。要獲取打印作業的視圖打印格式化程序,請調用UIView方法viewPrintFormatter並初始化打印格式程序的繼承佈局屬性。

不幸的是,QLPreviewController的視圖沒有記錄爲回送有效的viewPrintFormatter。這意味着您將無法使用QLPreviewController滾動您自己的自定義打印代碼。取而代之,您可以考慮使用UIWebView來呈現文檔。