我正在使用返回Base64字符串的API,如下所示:
data:application/pdf;base64,**BASE64STRING**
BASE64STRING是我需要显示PDF的地方。
到目前为止,我只创建了一个获取Base64字符串的Data
对象:
let data = Data(base64Encoded: BASE64STRING)
我尝试在webview中加载它:
webView.load(data!, mimeType: "application/pdf", textEncodingName: "", baseURL: URL(string: "")!)
问题是我没有本地PDF文件,因此我不知道应该在baseURL
中放置什么。目前它正在给我fatal error: unexpectedly found nil while unwrapping an Optional value
如何在webView中加载PDF?有没有更好的方法呢?
答案 0 :(得分:0)
试试这个
webView.load(data, mimeType: "application/pdf", textEncodingName: "utf-8", baseURL: URL(fileURLWithPath: ""))
答案 1 :(得分:0)
首先将base64String转换为NSData,然后转换为Data并使用它。
PDF文件是二进制文件,因此不能直接表示为UITF8编码的字符串。
if let data = NSData(base64Encoded: base64String, options: NSData.Base64DecodingOptions.ignoreUnknownCharacters) as Data? {
self.webView.load(data, mimeType: "application/pdf", characterEncodingName: "", baseURL: URL(fileURLWithPath: ""))
}
答案 2 :(得分:0)
对于 Swift 5,这里是一个没有强制解包和临时文件的完整示例:
guard let data = Data(base64Encoded: base64), let fileUrl = try? saveTemporaryFile(from: data, filename: fileName) else {
// error handling
return
}
webView.load(data, mimeType: "application/pdf", textEncodingName: "", baseURL: fileUrl)
以及将数据保存在本地临时文件中的实用函数:
func saveTemporaryFile(from data: Data, filename: String? = nil) throws -> URL {
let filename = filename ?? UUID().uuidString
let fileURL = URL(fileURLWithPath: NSTemporaryDirectory(), isDirectory: true).appendingPathComponent(filename)
try? FileManager.default.removeItem(at: fileURL)
try data.write(to: fileURL)
return fileURL
}