日常的生活與工作中晒来,有時(shí)候難免需要從 iPhone 手機(jī)上打印一些文件內(nèi)容竭宰。由于我們使用的 iPhone 手機(jī)與打印機(jī)兼贡,以及連接打印機(jī)的電腦系統(tǒng)平臺(tái)的差別屡拨,從而導(dǎo)致我們的手機(jī)不能直接連接打印機(jī)只酥。iPhone 其實(shí)是支持網(wǎng)絡(luò)打印的,但只是針對(duì)一些特殊的支持的 iPhone 的打印機(jī)呀狼。這里簡(jiǎn)單介紹一些方法裂允,可以讓我們的 iPhone 連接到網(wǎng)絡(luò)打印機(jī)或電腦上的普通打印機(jī),從而實(shí)現(xiàn)打印的功能哥艇。最近的項(xiàng)目中绝编,剛好遇到這樣的一個(gè)功能,把APP調(diào)用打印機(jī)整理一下貌踏;
首先感謝NSHipster
真機(jī)測(cè)試圖.png
功能原理:
利用蘋果iOS系統(tǒng)內(nèi)置AirPrint功能WiFi無線打印照片十饥,Word,PDF等各種文件到你的Air Printer打印機(jī)祖乳,但有個(gè)前提是你的打印機(jī)必須支持蘋果Air Print功能逗堵,即AirPrint-Enable Printer。
打印機(jī)型號(hào):
目前打印機(jī)品牌如兄弟眷昆、佳能蜒秤、戴爾、惠普亚斋、利盟和三星都開始制造兼容AirPrint的打印機(jī)作媚,對(duì)于普通打印機(jī)目前有些還不支持。
iPhone調(diào)取打印機(jī):
方法一帅刊、通過 QQ 來打印
無論是在電腦上纸泡,還是在 iPhone 手機(jī)上,相信大家都會(huì)安裝 QQ 這款通訊軟件厚掷。當(dāng)前 QQ 最新的版本支持手機(jī)連接電腦端的打印機(jī)弟灼,也就是說當(dāng)我們的 QQ 在電腦上登錄以后级解,在 iPhone 手機(jī)上的 QQ 可以遠(yuǎn)程連接到電腦上進(jìn)行文件的打印。
方法二勤哗、 iPhone中支持AirPrint的應(yīng)用
大多數(shù)來自蘋果的應(yīng)用都支持,象Mail掩驱,Safari和iPhoto芒划。你還可以從手機(jī)中打印電子郵件、文檔和圖片欧穴。
方法三民逼、 通過應(yīng)用打印
訪問iTunes應(yīng)用商店,找到打印應(yīng)用涮帘。你會(huì)找到一個(gè)供選擇的支持從iPhone打印的應(yīng)用列表拼苍。關(guān)于下載應(yīng)用的更多信息可以查閱如何從iTunes 應(yīng)用商店下載和使用應(yīng)用。
打印任務(wù),首先看下打印選項(xiàng)配置
UIPrintInteractionController
UIKit 打印 APIs 的核心是 UIPrintInteractionController调缨。這個(gè)類的一個(gè)共享實(shí)例管理著打印工作的細(xì)節(jié)和配置任何將要呈現(xiàn)給用戶的 UI疮鲫。它還為你的內(nèi)容的格式提供了三個(gè)級(jí)別的控制。
UIPrintInteractionController設(shè)置
這里有些關(guān)于UIPrintInteractionController的設(shè)置你需要配置下在開始展示打印UI之前弦叶。它們包括:
將你的內(nèi)容格式化
通過UIPrintInteractionController四個(gè)不同的屬性俊犯,你可以選擇你想要的內(nèi)容控制規(guī)格(復(fù)雜度)。
UIPrintInfo
UIPrintInfo實(shí)例中存放著打印任務(wù)詳情設(shè)置伤哺。你可以找到如下屬性:
代碼
打印PDF
/**
* PDF
*
* @param sender <#sender description#>
*/
-(void)printAction:(id)sender{
NSString *str = [[NSBundle mainBundle] pathForResource:@"123.pdf" ofType:nil];
self.myPDFData = [NSData dataWithContentsOfFile:str];
UIPrintInteractionController* pic = [UIPrintInteractionController sharedPrintController];
NSData *imageData = [NSData dataWithData:self.myPDFData];
if (pic && [UIPrintInteractionController canPrintData:imageData])
{
pic.delegate = self;
// 打印任務(wù)細(xì)節(jié)在 UIPrintInfo 實(shí)例中設(shè)置燕侠。可以使用以下屬性:
UIPrintInfo* printInfo = [UIPrintInfo printInfo];
// UIPrintInfoOutputType:給 UIKit 提供要打印內(nèi)容的類型提示立莉【钔可以是以下任意一個(gè):
// .General(默認(rèn)):文本和圖形混合類型;允許雙面打印桃序。
// .Grayscale:如果你的內(nèi)容只包括黑色文本杖虾,那么該類型比 .General 更好。
// .Photo:彩色或黑白圖像媒熊;禁用雙面打印,更適用于圖像媒體的紙張類型坟比。
// .PhotoGrayscale:對(duì)于僅灰度的圖像芦鳍,根據(jù)打印機(jī)的不同,該類型可能比 .Photo 更好葛账。
printInfo.outputType = UIPrintInfoOutputGeneral;
// jobName String:此打印任務(wù)的名稱柠衅。這個(gè)名字將被顯示在設(shè)備的打印中心,對(duì)于有些打印機(jī)則顯示在液晶屏上
printInfo.jobName = @"PrintingImage";
// UIPrintInfoDuplex:.None籍琳、.ShortEdge 或 .LongEd??ge。short- 和 long- 的邊界設(shè)置指示如何裝訂雙面頁(yè)面,而 .None 不支持雙面打硬ぷ(這里不是 UI 切換為雙面打印财饥,令人困惑)
printInfo.duplex = UIPrintInfoDuplexShortEdge;
// UIPrintInfo:之前所述的打印任務(wù)的配置
pic.printInfo = printInfo;
// showsPageRange Bool:當(dāng)值為 true 時(shí),讓用戶從打印源中選擇一個(gè)子范圍跟啤。這只在多頁(yè)內(nèi)容時(shí)有用,它默認(rèn)關(guān)閉了圖像。
pic.showsPageRange = NO;
pic.printingItem = imageData;
void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
if (!completed && error) {
NSLog(@"FAILED! due to error in domain %@ with error code %lu", error.domain, error.code);
}
};
// [pic presentAnimated:YES completionHandler:completionHandler];
if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
[pic presentFromRect:self.view.frame inView:self.view animated:YES completionHandler:completionHandler];
}
else {
[pic presentAnimated:YES completionHandler:completionHandler];
}
}
}
打印UIWebView
/**
* UIWebView粟耻、
*
* @param sender <#sender description#>
*/
- (IBAction)clike:(UIButton *)sender {
UIPrintInteractionController *printC = [UIPrintInteractionController sharedPrintController];//顯示出打印的用戶界面。
printC.delegate = self;
UIPrintInfo *printInfo = [UIPrintInfo printInfo];//準(zhǔn)備打印信息以預(yù)設(shè)值初始化的對(duì)象眉踱。
printInfo.outputType = UIPrintInfoOutputGeneral;//設(shè)置輸出類型挤忙。
printC.showsPageRange = YES;//顯示的頁(yè)面范圍
// 打印網(wǎng)頁(yè)
[self.myWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://nshipster.cn/uiprintinteractioncontroller/"]]];//網(wǎng)頁(yè)
printC.printFormatter = [self.myWebView viewPrintFormatter];//布局打印視圖繪制的內(nèi)容。
// // 打印文本
// UISimpleTextPrintFormatter *textFormatter = [[UISimpleTextPrintFormatter alloc]
// initWithText:@"ここの ういえい 子に うぃっl willingseal 20655322 你好么谈喳? #@¥%……&*"];
// textFormatter.startPage = 0;
// textFormatter.contentInsets = UIEdgeInsetsMake(200, 300, 0, 72.0); // 插入內(nèi)容頁(yè)的邊緣 1 inch margins
// textFormatter.maximumContentWidth = 16 * 72.0;//最大范圍的寬
// printC.printFormatter = textFormatter;
//
// 等待完成
void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
if (!completed && error) {
NSLog(@"可能無法完成册烈,因?yàn)橛∷㈠e(cuò)誤: %@", error);
}
};
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithCustomView:sender];//調(diào)用方法的時(shí)候,要注意參數(shù)的類型-下面presentFromBarButtonItem:的參數(shù)類型是 UIBarButtonItem..如果你是在系統(tǒng)的UIToolbar or UINavigationItem上放的一個(gè)打印button婿禽,就不需要轉(zhuǎn)換了赏僧。
[printC presentFromBarButtonItem:item animated:YES completionHandler:completionHandler];//在ipad上彈出打印那個(gè)頁(yè)面
// [printC presentFromRect:CGRectMake(500, 500, 100, 200) inView:self.webView animated:YES completionHandler:completionHandler];//第二種方法
} else {
[printC presentAnimated:YES completionHandler:completionHandler];//在iPhone上彈出打印那個(gè)頁(yè)面
}
}