3

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

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

  • 每次打印都会打印一个额外的空白页。如果我的 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 个旧版本)是否会导致问题?

4

1 回答 1

1

我在 iOS 7 下观察到了同样的问题。我能想出的唯一解决方案是将 UIPrintInteractionController 的 printingItem 设置为指向所需 PDF 的 URL,或者将 printItem 设置为 PDF 的 NSData 表示,而不是而不是设置 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];
}
于 2014-02-05T16:12:57.820 回答