PDF Webサイトから正常に表示できます。そのPDFをデバイスにダウンロードして、ローカルでそのファイルにアクセスできるようにしたいです。
アプリを開くと、オンラインPDFの日付がチェックされます。ローカルに保存されたPDFよりも新しい場合、アプリは新しいPDFをダウンロードします。それ以外の場合は、ローカルに保存されたPDFを開きます。
私が現在使用しているコード:
PDFAddress = [NSURL URLWithString:@"http://www.msy.com.au/Parts/PARTS.pdf"];
request = [NSURLRequest requestWithURL:PDFAddress];
[webView loadRequest:request];
webView.scalesPageToFit = YES;
どうすればこれを達成できますか?
私は自分で試した方法を1つ見つけました。
// Get the PDF Data from the url in a NSData Object
NSData *pdfData = [[NSData alloc] initWithContentsOfURL:[
NSURL URLWithString:@"http://www.example.com/info.pdf"]];
// Store the Data locally as PDF File
NSString *resourceDocPath = [[NSString alloc] initWithString:[
[[[NSBundle mainBundle] resourcePath] stringByDeletingLastPathComponent]
stringByAppendingPathComponent:@"Documents"
]];
NSString *filePath = [resourceDocPath
stringByAppendingPathComponent:@"myPDF.pdf"];
[pdfData writeToFile:filePath atomically:YES];
// Now create Request for the file that was saved in your documents folder
NSURL *url = [NSURL fileURLWithPath:filePath];
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];
[webView setUserInteractionEnabled:YES];
[webView setDelegate:self];
[webView loadRequest:requestObj];
PDFをローカルに保存し、UIWebViewにロードします。
Swift 4.1
// Url in String format
let urlStr = "http://www.msy.com.au/Parts/PARTS.pdf"
// Converting string to URL Object
let url = URL(string: urlStr)
// Get the PDF Data form the Url in a Data Object
let pdfData = try? Data.init(contentsOf: url!)
// Get the Document Directory path of the Application
let resourceDocPath = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)).last! as URL
// Split the url into a string Array by separator "/" to get the pdf name
let pdfNameFromUrlArr = urlStr.components(separatedBy: "/")
// Appending the Document Directory path with the pdf name
let actualPath = resourceDocPath.appendingPathComponent(pdfNameFromUrlArr[
pdfNameFromUrlArr.count - 1])
// Writing the PDF file data to the Document Directory Path
do {
_ = try pdfData.write(to: actualPath, options: .atomic)
}catch{
print("Pdf can't be saved")
}
// Showing the pdf file name in a label
lblPdfName.text = pdfNameFromUrlArr[pdfNameFromUrlArr.count - 1]
// URLRequest for the PDF file saved in the Document Directory folder
let urlRequest = URLRequest(url: actualPath)
webVw.isUserInteractionEnabled = true
webVw.delegate = self
webVw.loadRequest(urlRequest)
PDFをメインドキュメントディレクトリ内の特定のフォルダー/ディレクトリに保存する場合
let resourceDocPath = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)).last! as URL
// The New Directory/folder name
let newPath = resourceDocPath.appendingPathComponent("QMSDocuments")
// Creating the New Directory inside Documents Directory
do {
try FileManager.default.createDirectory(atPath: newPath.path, withIntermediateDirectories: true, attributes: nil)
} catch let error as NSError {
NSLog("Unable to create directory \(error.debugDescription)")
}
// Split the url into a string Array by separator "/" to get the pdf name
pdfNameFromUrlArr = urlStr.components(separatedBy: "/")
// Appending to the newly created directory path with the pdf name
actualPath = newPath.appendingPathComponent(pdfNameFromUrlArr[pdfNameFromUrlArr.count - 1])
ハッピーコーディング:)
Swiftを使用してWebviewでPDFをダウンロードして表示します。
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()
私はSwiftバージョンを見つけました:
let url = "http://example.com/examplePDF.pdf"
if let pdfData = NSData(contentsOfURL: url) {
let resourceDocPath = NSHomeDirectory().stringByAppendingString("/Documents/yourPDF.pdf")
unlink(resourceDocPath)
pdfData.writeToFile(resourceDocPath, atomically: true)
}
パスファイルを保存することを忘れないでください。そうすれば、必要なときにいつでもそれをフェッチできます。
また、ファイルを簡単にダウンロードできるように ASIHTTPRequest もご覧になることをお勧めします。
Appleから ファイルおよびデータ管理ガイド を読む必要があります。ローカルにファイルを保存するためにアプリケーションサンドボックスで使用できる場所と、それらの場所への参照を取得する方法について説明します。読み書きのためのセクションもあります:)
楽しい!