この関数を使用して、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];
}
}