iOS開發(fā)--APP調(diào)用打印機(jī)(非藍(lán)牙)

日常的生活與工作中晒来,有時(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 上登錄 QQ 軟件田绑,點(diǎn)擊底部的“聯(lián)系人”欄目.png

方法二勤哗、 iPhone中支持AirPrint的應(yīng)用

大多數(shù)來自蘋果的應(yīng)用都支持,象Mail掩驱,Safari和iPhoto芒划。你還可以從手機(jī)中打印電子郵件、文檔和圖片欧穴。

iPhoto.png

方法三民逼、 通過應(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之前弦叶。它們包括:

UIPrintInteractionController設(shè)置.png

將你的內(nèi)容格式化

通過UIPrintInteractionController四個(gè)不同的屬性俊犯,你可以選擇你想要的內(nèi)容控制規(guī)格(復(fù)雜度)。

內(nèi)容格式化.png

UIPrintInfo

UIPrintInfo實(shí)例中存放著打印任務(wù)詳情設(shè)置伤哺。你可以找到如下屬性:

UIPrintInfo.png

代碼

打印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è)面  
    }  
    
    
}

iOS打印 AirPrint

隨手點(diǎn)個(gè)喜歡吧~

關(guān)注我

QQ--iOS 交流群:107548668

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市谈宛,隨后出現(xiàn)的幾起案子次哈,更是在濱河造成了極大的恐慌,老刑警劉巖吆录,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窑滞,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡恢筝,警方通過查閱死者的電腦和手機(jī)哀卫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來撬槽,“玉大人此改,你說我怎么就攤上這事≈度幔” “怎么了共啃?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)暂题。 經(jīng)常有香客問我移剪,道長(zhǎng),這世上最難降的妖魔是什么薪者? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任纵苛,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘攻人。我一直安慰自己取试,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布怀吻。 她就那樣靜靜地躺著瞬浓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烙博。 梳的紋絲不亂的頭發(fā)上瑟蜈,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音渣窜,去河邊找鬼铺根。 笑死,一個(gè)胖子當(dāng)著我的面吹牛乔宿,可吹牛的內(nèi)容都是我干的位迂。 我是一名探鬼主播,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼详瑞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼掂林!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起坝橡,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤泻帮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后计寇,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锣杂,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年番宁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了元莫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蝶押,死狀恐怖踱蠢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棋电,我是刑警寧澤茎截,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站赶盔,受9級(jí)特大地震影響稼虎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜招刨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沉眶,春花似錦打却、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至片习,卻和暖如春捌肴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背藕咏。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工状知, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人孽查。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓饥悴,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親盲再。 傳聞我的和親對(duì)象是個(gè)殘疾皇子西设,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 最近競(jìng)品公司出了一個(gè)接入藍(lán)牙打印機(jī)的功能,作為競(jìng)爭(zhēng)對(duì)手公司肯定不能少所以就給我分了任務(wù)答朋,搞定藍(lán)牙打印機(jī) 首先介紹一...
    呆北默閱讀 3,285評(píng)論 12 10
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,325評(píng)論 25 707
  • 我生于江蘇偏北塊兒靠海的一座小城贷揽。小城小城,歲月靜好梦碗。一條蜿蜒曲折河禽绪,流經(jīng)小城,流向遠(yuǎn)方叉弦,小城生活便在河流前行中安...
    玥九爺閱讀 601評(píng)論 5 2
  • 當(dāng)下的我丐一,因?yàn)樯。缭缟洗残菹⒀捅挥孟駜芍芮盀榱藦?fù)習(xí)熬夜讀書到十二點(diǎn)多库车,然后還失眠到一點(diǎn)多。 當(dāng)下的我樱拴,可以盡情...
    逸包包閱讀 255評(píng)論 0 1
  • 尊重客觀性柠衍,一切從實(shí)際出發(fā),注意時(shí)間和地點(diǎn)的變化晶乔,處理事情的方式會(huì)不同珍坊,明者因時(shí)而變,知者隨時(shí)而制
    一片小心情閱讀 116評(píng)論 0 0