【问题标题】:Printing Pdf using AirPrint causes small output使用 AirPrint 打印 Pdf 导致输出小
【发布时间】:2014-04-18 13:53:35
【问题描述】:

我尝试打印带有UIPrintInteractionController 的pdf,它加载到UIWevView 中。好消息是我可以打印,不好的是打印的输出太小了。

any help would be appreciated :)


- (IBACTION) printPDF {


    if ((!_webView)) return;
    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 %ld",
                  error.domain, (long)error.code);
        }
    };
    UIPrintInfo *printInfo = [UIPrintInfo printInfo];
    printInfo.outputType = UIPrintInfoOutputGeneral;
    printInfo.duplex = UIPrintInfoDuplexLongEdge;
    controller.printInfo = printInfo;
    controller.showsPageRange = YES;
    _webView.scalesPageToFit = NO;
    UIViewPrintFormatter *viewFormatter = [_webView 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 objective-c printing uiwebview uiprintinteractioncntrler


【解决方案1】:

在@crescendolls 响应的基础上,这里有一段完整的代码,用于将您的 web 视图中的 PDF 转换为数据,并进行相应的打印。

-(void)printReport {
    UIPrintInfo *pi = [UIPrintInfo printInfo];
    pi.outputType = UIPrintInfoOutputGeneral;
    pi.jobName = webView.request.URL.absoluteString;
    pi.orientation = UIPrintInfoOrientationPortrait;
    pi.duplex = UIPrintInfoDuplexLongEdge;

    UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];
    pic.printInfo = pi;
    pic.showsPageRange = YES;

    //does not display PDF appropriately
    //pic.printFormatter = webView.viewPrintFormatter;

    //does display PDF appropriately
    NSCachedURLResponse* webResponse = [[NSURLCache sharedURLCache] cachedResponseForRequest:[webView request]];
    NSData* webData = [webResponse data];
    pic.printingItem = webData;

    [pic presentFromBarButtonItem:self.printBarButton animated:YES completionHandler:^(UIPrintInteractionController *pic2, BOOL completed, NSError *error) {
        // indicate done or error
    }];
} 

【讨论】:

    【解决方案2】:

    如果找到解决方法避免打印表单IUWebView。我直接下载NSData格式的PDF

    _data 代表我通过请求下载的 NSData。

     if (_data) {
        UIPrintInteractionController *printController = [UIPrintInteractionController sharedPrintController];
    
        printController.delegate = self;
    
        UIPrintInfo *printInfo = [UIPrintInfo printInfo];
        printInfo.outputType = UIPrintInfoOutputGeneral;
        //printInfo.jobName = [path lastPathComponent];
        printInfo.duplex = UIPrintInfoDuplexLongEdge;
        printController.printInfo = printInfo;
        printController.showsPageRange = YES;
        printController.printingItem = _data;
    
        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, (long)error.code);
            }
        };
    
        [printController presentAnimated:YES completionHandler:completionHandler];
    }
    

    【讨论】:

    【解决方案3】:

    尝试这种和平的代码..

    -(IBAction)printPDF
     {
            _webView.scalesPageToFit=YES;
            UIImage *img=[self imageWithView:_webView];
    
            UIPrintInteractionController *pic = [UIPrintInteractionController
                                                 sharedPrintController];
    
            UIPrintInfo *printInfo = [UIPrintInfo printInfo];
    
            printInfo.outputType = UIPrintInfoOutputGeneral;
            printInfo.duplex = UIPrintInfoDuplexLongEdge;
    
            pic.printInfo = printInfo;
            pic.showsPageRange = YES;
            pic.printingItem = img;
            pic.showsPageRange = YES;
    
    
            UIPrintInteractionCompletionHandler completionHandler =
            ^(UIPrintInteractionController *printController, BOOL completed,
              NSError *error) {
                if(!completed && error)
                {
                    NSLog(@"Print failed - domain: %@ error code %u", error.domain,
                          error.code);
                }
            };
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多