uiWebView打印pdf

时间:2014-11-13 13:27:12

标签: pdf iframe printing uiwebview

在uiwebview中,打印pdf文档的好方法是什么?

可以通过网址访问pdf,也可以将其加载到iframe中。

使用标准的javascript widnow.print()函数将无法正常工作。

我正在考虑使用javascript桥,例如:

- (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。

这是一个好方法吗?我正在搜索如何在uiWebView中打印pdf的示例。

1 个答案:

答案 0 :(得分:3)

由于我已经获得了没有投票且没有回复的风滚草徽章,我将发布我的解决方案。

这将获取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];
}