0

この関数を使用して、1 つの PDF を正常に印刷しました。

-(void)printPDF{

    NSString* fileName = @"Certificate.PDF";

    NSArray *arrayPaths =
    NSSearchPathForDirectoriesInDomains(
                                        NSDocumentDirectory,
                                        NSUserDomainMask,
                                        YES);
    NSString *path = [arrayPaths objectAtIndex:0];
    NSString* pdfFileName = [path stringByAppendingPathComponent:fileName];


    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
    ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) {
        if (!completed && error) NSLog(@"Print error: %@", error);
    };

    NSData *pdfData = [[NSFileManager defaultManager] contentsAtPath:pdfFileName];

    printController.printingItem = pdfData;

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        [printController presentFromRect:self.btnPrint.frame inView:self.btnPrint.superview
                                animated:YES completionHandler:completionHandler];
    } else {
        [printController presentAnimated:YES completionHandler:completionHandler];
    }

}

複数の PDF を印刷したい場合、配列 (Certificates) に入れました。プリンターを選択する前に printController ダイアログが消え、次のエラーが表示されます。「警告: プレゼンテーションまたは却下の進行中に、View Controller から却下しようとしています!」

printcontroller にデリゲート メソッドを使用する必要がありますか、または catch は何ですか?

これは、いくつかの PDF ドキュメントを印刷するための私の試みです。

-(void)printAllPDF{

    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
    ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) {
        if (!completed && error) NSLog(@"Print error: %@", error);

    };

    printController.printingItems = certificates;

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        [printController presentFromRect:self.btnPrintAll.frame inView:self.btnPrintAll.superview
                                animated:YES completionHandler:completionHandler];

    } else {
        [printController presentAnimated:YES completionHandler:completionHandler];
    }
}
4

1 に答える 1