【问题标题】:UIDocumentInteractionController displaying blank pdfUIDocumentInteractionController 显示空白 pdf
【发布时间】:2014-10-15 07:22:40
【问题描述】:

我正在尝试使用 UIDocumentInteractionController presentPreviewAnimated 方法在 iOS 设备上显示 pdf,但它一直显示空白文档。我认为这可能与字符编码有关,但我不确定。如果我使用 UIWebView,我可以显示 pdf,而不是使用文档交互控制器。

// 2014 年 9 月 18 日更新 这现在适用于 Xcode 6 的 GM 版本。

// 2014 年 8 月 22 日更新

奇怪的是,在 DocumentInteractionController 中,如果我点击右上角的“打开方式”图标并选择 iBooks 之类的内容,则 pdf 会正确显示。好像只是不想在屏幕上显示的预览。

这是我的代码(在 Swift 中):

// data is coming in as NSISOLatin1StringEncoding
func displayPdfInUIDocumentInteractionController(data: NSData) {

    let fileName = NSTemporaryDirectory().stringByAppendingPathComponent("myFile.pdf")
    let url: NSURL! = NSURL(fileURLWithPath: fileName)

    // this does not seem to make a difference
    // let pdfString = NSString(data: data, encoding: NSISOLatin1StringEncoding)
    // pdfString.writeToURL(url!, atomically: true, encoding: NSISOLatin1StringEncoding, error: nil)

    data.writeToURL(url, atomically: true)
    if url != nil {
        let docController = UIDocumentInteractionController(URL: url)
        docController.UTI = "com.adobe.pdf"
        docController.delegate = self
        docController.presentPreviewAnimated(true)
    }
}

此代码确实正确显示了 pdf:

// data is coming in as NSISOLatin1StringEncoding
func displayPdfInUIWebView(data: NSData) {

    let rect = UIScreen.mainScreen().bounds
    let screenSize = rect.size

    let webView = UIWebView(frame: CGRectMake(0,0,screenSize.width,screenSize.height))
    webView.autoresizesSubviews = true
    webView.autoresizingMask = (UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleWidth)

    webView.loadData(data, MIMETYype: "application/pdf", textEncodingName: "ISO-8859-1", baseUrl: nil)

    self.view.addSubview(webView)
}

第一个功能不应该工作有什么原因吗?它不会出错,只是显示一个空白页。

【问题讨论】:

  • 我也有同样的问题。我的代码和你的类似。你不是一个人 !如果我发现了什么,我会及时通知你:)
  • 谢谢@Emilie,这让我快疯了!
  • 您能提供 PDF 的 URL 吗?因为,我无法重现我的 PDF 文件的问题。(使用 Objective-C/iOS7)
  • 我也有同样的问题。只有 PDF,所有其他文件都可以正常工作。我想这只是一个错误,希望尽快修复。
  • 在 iOS7 上工作正常,我在 iOS8 上也有同样的问题,而不仅仅是 pdf。快速查看也会导致某些大型电影类型(例如 mkv)的内存问题。作为一种解决方法,我将 presentOpenInMenuFromRect 替换为 presentOptionsMenuFromRect,这种方式的快速查看选项不再可用。

标签: ios pdf swift uidocumentinteraction


【解决方案1】:

这适用于 Xcode 的 GM 版本。猜猜这只是一个错误。

【讨论】:

    【解决方案2】:

    我没有使用 Swift,但我在直接使用 Objective-C 时遇到了基本相同的问题。在 iOS8 之前,我的 UIDocumentInteractionController 显示了我扔给它的几乎所有文件类型,包括 PDF。但在 iOS8 中,PDF 文件将不再显示给我。

    我是这样创建的:

    [[[UIDocumentInteractionController alloc] init] autorelease]
    

    我将调用更改为这样创建它:

    [UIDocumentInteractionController interactionControllerWithURL:myUrl]
    

    现在我的 PDF 文件再次显示(其他文件似乎还可以)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      • 1970-01-01
      • 2011-09-09
      相关资源
      最近更新 更多