我需要创建允许用户从我的基于HTML5 / JavaScript的移动应用程序下载PDF文件的功能。我将把PDF文件作为Base 64编码的字节流。如何在单击页面中的按钮时允许用户将PDF下载到他们的设备?
答案 0 :(得分:0)
对于iOS: 您可以在iPhone应用程序上下载pdf并在WebView中显示。 此(链接的)问题列出了一些方法。您还可以在此处找到如何将pdf放入运行该应用的设备/ iPhone的文件夹中:How to download PDF and store it locally on iPhone?
let request = URLRequest(url: URL(string: "http://www.msy.com.au/Parts/PARTS.pdf")!)
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
let task = session.dataTask(with: request, completionHandler: {(data, response, error) in
if error == nil{
if let pdfData = data {
let pathURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("\(filename).pdf")
do {
try pdfData.write(to: pathURL, options: .atomic)
}catch{
print("Error while writting")
}
DispatchQueue.main.async {
self.webView.delegate = self
self.webView.scalesPageToFit = true
self.webView.loadRequest(URLRequest(url: pathURL))
}
}
}else{
print(error?.localizedDescription ?? "")
}
}); task.resume()
对于Android: 有许多方法可以在Android上实现。在大多数情况下,该程序应该可以正常工作:
URL u = new URL("http://www.path.to/a.pdf");
//open a connection
HttpURLConnection c = (HttpURLConnection) u.openConnection();
c.setRequestMethod("GET");
c.setDoOutput(true);
c.connect();
FileOutputStream f = new FileOutputStream(new File(root,"file.pdf"));
//read the file
InputStream in = c.getInputStream();
byte[] buffer = new byte[1024];
int len1 = 0;
while ( (len1 = in.read(buffer)) > 0 ) {
f.write(buffer,0, len1);
}
f.close();
该另一行选项可以在android中下载pdf,但根据设备和其他已安装的应用(pdf阅读器)的不同,其行为似乎有所不同:
`startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("path/filename.pdf")));`
我使用了这个问题,它的答复是一个工作代码示例。您可以在文章的底部找到一个长长的答案,其中包含许多不同的用例及其解决方案,请参见同一篇文章。How to download a pdf file in Android?