iOS中加载含有电子签章的PDF
在iOS开发中,要加载PDF,一般可以直接使用WKWebview来加载。但是PDF中的电子签章常常显示失败。除了使用第三方库来解决之外,有没有其他解决方案呢?我的解决方案是下载PDF文件后保存到本地,然后使用QLPreviewController加载本地文件。
QLPreviewController简介
QLPreviewController API在iOS中用来预览文件,它支持的文件类型有iWork文档、RTF文档、PDF文件、图片、文本文件和CVS文件等。使用的时候需要遵守并实现QLPreviewControllerDataSource和QLPreviewControllerDelegate两个代理的方法。
1 | extension WebViewController:QLPreviewControllerDelegate,QLPreviewControllerDataSource { |
加载含有电子签章的PDF
下载PDF并保存到本地
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18// 自定义的下载方法
NetworkManager.download(url: url, successHandle: { [unowned self] (urlAddress) in
guard let address = urlAddress else {
return
}
self.previewURL = address
//初始化QLPreviewController
if self.previewer == nil {
self.previewer = QLPreviewController()
self.previewer?.delegate = self
self.previewer?.dataSource = self
self.previewer?.view.frame = (self?.webView.bounds)!
self.webView.addSubview((self?.previewer!.view)!)
}
self.previewer?.refreshCurrentPreviewItem()//刷新or加载当前要显示的url
}) { (error) in
print(error.localizedDescription)
}使用QLPreviewController加载文件
1
2
3
4
5
6
7
8
9// 实现QLPreviewControllerDelegate和QLPreviewControllerDataSource的代理方法
extension WebViewController:QLPreviewControllerDelegate,QLPreviewControllerDataSource {
func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
return 1
}
func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
return previewURL! as QLPreviewItem
}
}