3

カスタムQLPreviewControllerのnavigationItemにアクションボタンを追加しました。アクションボタンをタップすると、UIPrintInteractionControllerが表示されます。アプリのドキュメントディレクトリからファイルを取得しています。プレビューしても問題ありません。しかし、アクションボタンをタップして同じファイルを印刷すると、[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];

    }
}
}

問題をイメージすることはできません。助けてください...

4

1 に答える 1

2

printingItemプロパティは、UIPrintInteractionControllerPDFおよび画像データのみをサポートするように文書化されています。

オブジェクトは、NSURL、NSData、UIImage、またはALAssetクラスのインスタンスである必要があります。最初の2つのタイプのオブジェクトは、画像データまたはPDFデータを参照または含む必要があります。

UIPrintInteractionControllerOfficeドキュメントなどの非PDF、非画像データの印刷に使用する場合は、代わりにプロパティを使用する必要がありprintFormatterます。

カスタムロジックを使用せずに、印刷フォーマッターを介してコンテンツをUIWebView印刷UITextViewできます。MKMapViewこれは、UIViewPrintFormatterのドキュメントに記載されています。

UIViewPrintFormatterクラスのインスタンスは、印刷用のビューの描画コンテンツをレイアウトします。ビューのコンテンツは複数のページにまたがることができます。

3つのシステムクラスのインスタンスは、アプリケーションに使用可能なビュー印刷フォーマッターを提供します。UIKitフレームワークのUIWebViewとUITextView、およびMapKitフレームワークのMKMapViewです。印刷ジョブのビュー印刷フォーマッターを取得するには、UIViewメソッドviewPrintFormatterを呼び出し、印刷フォーマッターの継承されたレイアウトプロパティを初期化します。

残念ながら、の見解はQLPreviewController有効なを返すものとして文書化されていませんviewPrintFormatter。これは、独自のカスタム印刷コードをでロールすることができないことを意味しますQLPreviewControllerUIWebView代わりに、を使用してドキュメントをレンダリングすることを検討できます。

于 2012-10-25T23:19:06.243 に答える