Swift:如何在iOS UIWebView中显示包含多个页面的远程PDF文件?

时间:2016-05-11 14:11:45

标签: ios iphone swift pdf uiwebview

我想使用 UIWebView 显示远程多页pdf。这是我在viewDidLoad中所做的事情:

self.webView.scalesPageToFit = true
self.webView.contentMode = UIViewContentMode.ScaleAspectFit
let url : NSURL! = NSURL(string: pdfFile)
webView.loadRequest(NSURLRequest(URL: url ))

webview UIWebView 的一个实例,字符串pdfFile包含远程服务器上pdf的URL。

当我运行此视图时,视图显示的是pdf的第一页。如何显示所有页面?

1 个答案:

答案 0 :(得分:3)

您的代码看起来是正确的。 PDF文件在Safari / iOS中有效吗?

Apple的CoreGraphics PDF渲染器存在很多已知问题 - 您只是遇到这样的问题并且错误地解析了该文件是绝对可能的。也可能是文件本身有点损坏,但是当其他解析器通常弹性较差时,Adobe Acrobat有许多处理这些文件的解决方法。我非常了解这个空间,因为我在过去的5年里花了很多时间在PSPDFKit上,这是一个用于在iOS上渲染和编辑/注释PDF文档的第三方SDK,你可以像上面的代码一样使用它。 (仅使用PSPDFViewController代替UIWebView)。

这是一个商业解决方案,我们有一个由25人组成的团队 - 在我们发现Apple的渲染器存在太多缺陷和问题后,我们编写了自己的PDF渲染器。您可以找到的大多数开源解决方案都会使用CGPDF,并会遇到与UIWebView相同的问题。

如果您正在寻找的只是更多控制但渲染效果很好,并且您不需要智能缩放,文字选择或搜索,请查看Apple的ZoomingPDFViewer example - 这将帮助您开始如何最好地使用CGContextDrawPDFPage绘制PDF并允许缩放。 (公平警告,如果你不编写自己的缓存层,那将会很慢。)

有时,在Apple Preview中打开PDF并简单地重新保存它也会解决您的问题,因为此过程会重写整个树。您将丢失大量数据,例如PDF小部件和一些注释,但在某些情况下,这足以纠正部分损坏的文档,以便在移动设备上呈现它们。我们有a support article about 3rd-party support,您可以在这里了解更多相关信息。