iOS7更新 - 在UIWebView中加载的Airprinting PDF将缩放的PDF缩小到字母页面大小的50%

时间:2013-11-22 01:40:28

标签: pdf uiwebview ios7 airprint

我的应用程序的一部分涉及打印加载到UIWebView中的PDF。

我用来封装在我的UIWebView中加载的这些PDF的代码在iOS版本6中运行良好。自iOS7更新以来,我的页面仍在我的应用程序上使用相同的代码进行打印,但是列出了几个问题:< / p>

  • 每次打印都会打印一个额外的空白页面。如果我的PDF文档长达2页,则打印机将打印2页PDF内容和第3页空白。这对我来说并不是很重要,因为没有浪费墨水或纸张,但是我试图实施的解决方案有点草率。

  • 我感兴趣的主要问题是iOS7更新后,iOS 6 iPad / iPhone设备上运行正常的相同代码现已破损。 该代码允许我打印PDF的全部内容,但内容缩小到纸张总面积的50%(在我的情况下是肖像字母大小的纸张)

尽管在苹果的开发网站上发表了评论,但我无法得到论坛成员的任何回复。

以下是我正在使用的代码:

-(void) printWebView:(UIWebView *)webView {
    UIPrintInfo *pi = [UIPrintInfo printInfo];
    pi.outputType = UIPrintInfoOutputGeneral;
    pi.jobName = webView.request.URL.absoluteString;
    pi.orientation = UIPrintInfoOrientationPortrait;
    UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];
    pic.printInfo = pi;
    pic.showsPageRange= NO;
    UIPrintPageRenderer *renderer = [[UIPrintPageRenderer alloc] init];
    webView.viewPrintFormatter.printPageRenderer.headerHeight = 30.0f;
    webView.viewPrintFormatter.printPageRenderer.footerHeight = 30.0f;
    webView.viewPrintFormatter.contentInsets = UIEdgeInsetsMake(0.0f, 30.0f, 0.0f, 30.0f);
    webView.viewPrintFormatter.startPage = 0;
    [renderer addPrintFormatter:webView.viewPrintFormatter startingAtPageAtIndex:0];
    pic.printPageRenderer = renderer;
    [pic presentAnimated:YES completionHandler:^(UIPrintInteractionController *pic2, BOOL completed, NSError *error) {
    // indicate done or error
}];

是否还有其他人遇到此问题,是否有解决方案,或者这是Apple在下次更新时需要修复的合法问题?

另外,虽然对我来说似乎不太可能,但Xcode的非当前版本(旧版本1)会导致此问题吗?

1 个答案:

答案 0 :(得分:1)

我在iOS 7中观察到了同样的问题。我能够想出的唯一解决方案是将UIPrintInteractionController的printingItem设置为指向所需PDF的URL,或者将printingItem设置为NSData表示形式。 PDF而不是设置printFormatter属性。我在iOS 5下使用了printingItem时遇到了一些问题,所以我有一个后备解决方案,如下所示。

// Work around for printing item not working with our document URL under iOS 5.
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0"))
{
    printController.printingItem = self.documentURL;
}
else
{
    printController.printFormatter = [self.webView viewPrintFormatter];
}