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

Swift: How to display a remote PDF file with multiple pages in iOS UIWebView?

我想使用 UIWebView 显示远程多页 pdf。这是我在 viewDidLoad:

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

webviewUIWebView 的实例,字符串 pdfFile 包含远程服务器上 pdf 的 URL。

当我 运行 这样做时,视图只显示 pdf 的第一页。如何显示所有页面?

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

Apple 的 CoreGraphics PDF 渲染器有很多已知问题 - 您完全有可能 运行 遇到这样的问题,它会错误地解析文件。也有可能文件本身有轻微损坏,但 Adob​​e Acrobat 有许多解决方法来处理此类文件,而其他解析器的弹性通常较差。我非常了解这一点 space,因为在过去的 5 年里我几乎所有的时间都花在了 PSPDFKit 上,这是一个用于渲染的第 3 方 SDK 和 iOS 上的 editing/annotating PDF 文档,您可以像上面的代码一样使用。 (只需使用 PSPDFViewController 而不是 UIWebView)。

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

相同的问题

如果您想要的只是更多的控制但渲染效果很好,并且您不需要智能缩放、文本选择或搜索,请查看 Apple 的 ZoomingPDFViewer example - 它会得到您开始了解如何最好地使用 CGContextDrawPDFPage 来绘制 PDF 并允许缩放。 (公平警告,如果您不编写自己的缓存层,速度会很慢。)

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