Come scaricare PDF e memorizzarlo localmente su iPhone?

Sono in grado di visualizzare correttamente un PDF da un sito Web. Voglio poter scaricare quel PDF sul dispositivo, quindi accedere a quel file localmente.

Quando l’app è aperta, controllerà la data del PDF online. Se è più recente del PDF archiviato localmente, l’app scaricherà il nuovo, altrimenti aprirà il PDF archiviato localmente.

Il codice che sto usando attualmente:

PDFAddress = [NSURL URLWithString:@"http://www.msy.com.au/Parts/PARTS.pdf"]; request = [NSURLRequest requestWithURL:PDFAddress]; [webView loadRequest:request]; webView.scalesPageToFit = YES; 

Come posso ottenere questo?

Ho trovato un metodo che ho provato a me stesso:

 // 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]; 

Questo memorizzerà il tuo PDF localmente e lo caricherà nel tuo UIWebView.

Spero che questo risolva il tuo problema.

È necessario leggere la Guida alla gestione dei file e dei dati da Apple. Descriverà quali posizioni sono disponibili nella sandbox dell’applicazione per il salvataggio dei file localmente e come ottenere un riferimento a tali posizioni. Ha anche una sezione per leggere e scrivere 🙂

Godere!

Ti consiglio anche di dare un’occhiata a ASIHTTPRequest per un facile download di file.

Ho trovato una versione veloce per questo:

 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) } 

Ricordati solo di salvare il file del percorso e sarai in grado di recuperarlo ogni volta che ne avrai bisogno.

In 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) 

Se si desidera salvare il Pdf in una cartella / directory particolare all’interno della directory del documento principale

 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]) 

Happy Coding 🙂

Con la syntax Swift versione 3.0:

 let url = NSURL(fileURLWithPath: "http://example.com/examplePDF.pdf") if let pdfData = NSData(contentsOf: url as URL) { let resourceDocPath = NSHomeDirectory().appending("/Documents/yourPDF.pdf") unlink(resourceDocPath) pdfData.write(toFile: resourceDocPath, atomically: true) }