时间:2021-05-19
其实就是将iOS(iphone,ipad)上的内容,使用支持AirPrint的打印机打印出来。打印过程无线控制, 非常方便。
学习iOS, 第一手资料肯定非苹果官方文档莫属.
here。 (我下面叙述的内容基本上是对文档的总结, 英语可以的建议直接看文档。。。)
既然涉及打印功能,那么就需要有一台支持AirPrint 功能的打印机进行测试喽,你没有?没关系!苹果已经为我们准备好了模拟器。 这个模拟器在Xcode中没有, 需要自己到官网下载
打印模拟器位置
AirPrint的api包含 eight classes and one protocol。 下图是它们之间的关系。(下面这张图明白了, 那你基本就掌握了)。
AirPrint相关类
UIPrintInteractionController 属性:
需要打印的内容与相应参数的对应方式
在iPad上: presentFromBarButtonItem:animated:completionHandler:
或者 presentFromRect:inView:animated:completionHandler:;
在手机上: presentAnimated:completionHandler:
说了这么多, 理论知识就介绍的差不多了, 下面通过代码演示具体实现。
AirPrint可以直接打印一些内容。 这些内容是 NSData, NSURL, UIImage, and ALAsset 类的实例, 但是这些实例的内容, 或者引用的类型(NSURL)必须是 image 或者pdf.
对于 image来说, NSData, NSURL, UIImage, and ALAsset 类型都可以的。 对于PDF, 只能使用 NSData, NSURL。 然后需要将这些数据实例直接赋值 给 UIPrintInteractionController实例的 printingItem 或者 printingItems 属性。
打印pdf:
- (IBAction)printContent:(id)sender { UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController]; if (pic && [UIPrintInteractionController canPrintData: self.myPDFData] ) { pic.delegate = self; UIPrintInfo *printInfo = [UIPrintInfo printInfo]; printInfo.outputType = UIPrintInfoOutputGeneral; printInfo.jobName = [self.path lastPathComponent]; printInfo.duplex = UIPrintInfoDuplexLongEdge; pic.printInfo = printInfo; pic.showsPageRange = YES; pic.printingItem = self.myPDFData; void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *pic, BOOL completed, NSError *error) { self.content = nil; 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.printButton animated:YES completionHandler:completionHandler]; } else { [pic presentAnimated:YES completionHandler:completionHandler]; }}通过在iPhone上测试, 显示出的全部是英文的,不要担心, 因为这是系统的控件,也就是说系统会自动帮你作国际化处理,你不用作任何事情!
你唯一要作的事–––将Info.plist文件中的第一项 Localization native development region(CFBundleDevelopmentRegion)的值设为 China(zh_CN);
Printer Options显示英文
将英文修改成中文
系统提供了三个 Print Formatters类, 分别是:
英文介绍已经很详细了, 就不啰嗦了, 直接展示出打印HTML文档的代码:
- (IBAction)printContent:(id)sender { UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController]; pic.delegate = self; UIPrintInfo *printInfo = [UIPrintInfo printInfo]; printInfo.outputType = UIPrintInfoOutputGeneral; printInfo.jobName = self.documentName; pic.printInfo = printInfo; UIMarkupTextPrintFormatter *htmlFormatter = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:self.htmlString]; htmlFormatter.startPage = 0; htmlFormatter.contentInsets = UIEdgeInsetsMake(72.0, 72.0, 72.0, 72.0); // 1 inch margins pic.printFormatter = htmlFormatter; pic.showsPageRange = YES; void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) { if (!completed && error) { NSLog(@"Printing could not complete because of error: %@", error); } }; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { [pic presentFromBarButtonItem:sender animated:YES completionHandler:completionHandler]; } else { [pic presentAnimated:YES completionHandler:completionHandler]; }}将UIWebView 界面上显示的内容打印出来。
- (void)printWebPage:(id)sender { UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController]; void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) { if(!completed && error){ NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code); } }; UIPrintInfo *printInfo = [UIPrintInfo printInfo]; printInfo.outputType = UIPrintInfoOutputGeneral; printInfo.jobName = [urlField text]; printInfo.duplex = UIPrintInfoDuplexLongEdge; controller.printInfo = printInfo; controller.showsPageRange = YES; UIViewPrintFormatter *viewFormatter = [self.myWebView viewPrintFormatter]; viewFormatter.startPage = 0; controller.printFormatter = viewFormatter; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { [controller presentFromBarButtonItem:printButton animated:YES completionHandler:completionHandler]; }else [controller presentAnimated:YES completionHandler:completionHandler];}这部分内容是最复杂的了, 感觉不怎么用,暂且不深究了, 大家如果项目需要, 自己看文档吧。
以上就是使用IOS AirPrint实现打印功能详解的详细内容,更多关于IOS AirPrint打印功能的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
AirPrint是无线打印的意思。 AirPrint是可以让应用软件通过Apple的无驱动程序打印体系结构,创建无损打印输出的Apple技术。所有支持打印的i
ipad能连接打印机的,但需要一台支持AirPrint的HP打印机。当iPad上有了AirPrint,就可以轻松打印电子邮件、照片、网页和文档,而不必下载软件,
平板可以连接打印机。不过需要打印机具有无线直连功能的才行,可以通过ipad上的airprint功能,在没有wifi和不方便连接USB的时候直接对连就能打印了。
ipad能连接打印机的,但需要一台支持AirPrint的HP打印机。当iPad上有了AirPrint,就可以轻松打印电子邮件、照片、网页和文档,而不必下载软件,
airprint只有惠普的11台打印机与苹果签了协议。如HPEnvyeAllinOneseries(D410a)等。 打印机(Printer)是计算机的输出设