2014-11-13 6 views
1

Внутри uiwebview, что такое хороший способ распечатать документ в формате PDF?uiWebView печать a pdf

PDF доступен через URL-адрес или может быть загружен внутри iframe.

Использование стандартных функций javascript widnow.print() не будет работать.

Я рассматриваю с помощью яваскрипта моста, таких как:

- (BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType { 
    NSURL *URL = [request URL]; 

    if ([[URL scheme] isEqualToString:@"native"]) { 
     NSString *urlString = [[request URL] absoluteString]; 
     NSArray *urlParts = [urlString componentsSeparatedByString:@":"]; 
     NSString *cmd = [urlParts objectAtIndex:1]; 

     if ([cmd isEqualToString:@"printPdf"]) { 
      // [self dosomething]; 
     } 
    } 
    return YES; 
} 

На данный момент мне нужен какой-то функции Xcode, которая принять путь к PDF и отправить его в airPrinter.

Это хороший подход? Я ищу примеры того, как печатать PDF внутри uiWebView.

ответ

2

Поскольку я заработал значок переполненности без голосований и ответов, я отправлю свое решение.

Это извлекает документ pdf и открывает диалоговое окно airPrint - все в пределах uiWebView.

Так что если IOS просто позволит javascript window.print() функционировать внутри uiWebView, мое приложение не будет устанавливаться в магазине приложений, ожидающем утверждения и повторного выпуска.

Во всяком случае, вот рабочий раствор:

- (void)printInit:(NSString *)parm { 

    UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController]; 
    if(!controller){ 
     NSLog(@"Couldn't get shared UIPrintInteractionController!"); 
     return; 
    } 

    NSString *base = @"https://someurl.com/"; 
    NSString *ustr = [base stringByAppendingString:parm]; 

    //NSURL *url = [NSURL fileURLWithPath:ustr]; 
    NSURL *url = [NSURL URLWithString:ustr];  
    NSData *thePdf = [NSData dataWithContentsOfURL:url]; 

    controller.printingItem = thePdf; 
    UIPrintInfo *printInfo = [UIPrintInfo printInfo]; 
    printInfo.outputType = UIPrintInfoOutputGeneral; 
    printInfo.jobName = @"PDFDoc"; 
    controller.printInfo = printInfo; 

    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = 
    ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) { 
     if (!completed && error) { 
      NSLog(@"FAILED! error = %@",[error localizedDescription]); 
     } 
    }; 

    CGRect rect = CGRectMake(310, 5, 100, 5); 
    [controller presentFromRect:rect inView:self.webView animated:YES completionHandler:completionHandler]; 
}