Adrian David Smith
Adrian David Smith

Reputation: 598

Loading PDF From Documents URL

I seem to be having issues while loading a PDF to my WebView in Swift. Printing out all the files in the Documents directory results in:

file:///Users/adriandavidsmith/Library/Developer/CoreSimulator/Devices/B537EBE4-14AE-439A-B84B-31342E233367/data/Containers/Data/Application/E791BF20-CC53-4FBB-B34A-F73CED74EB5D/Documents/DOCUMENT.pdf

However, when I attempt to load that file into a WebView nothing gets shown. As if it is unable to find the file.

if let pdf = NSBundle.mainBundle().URLForResource("DOCUMENT", withExtension: "pdf", subdirectory: "Documents", localization: nil){

let req = NSURLRequest(URL: pdf)
webView.loadRequest(req)

Any thoughts/ideas?

Upvotes: 2

Views: 10885

Answers (4)

Gerard G
Gerard G

Reputation: 3463

Swift 3 compatible

var pdfURL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)).last! as URL
pdfURL = pdfURL.appendingPathComponent( "example.pdf") as URL
            
let data = try! Data(contentsOf: pdfURL)
let webView = WKWebView(frame: CGRect(x:20,y:20,width:view.frame.size.width-40, height:view.frame.size.height-40))
webView.load(data, mimeType: "application/pdf", characterEncodingName:"", baseURL: pdfURL.deletingLastPathComponent())
view.addSubview(webView)

Upvotes: 12

Rahul
Rahul

Reputation: 241

The E791BF20-CC53-4FBB-B34A-F73CED74EB5D is application folder in which you have Documents folder containing the pdf file which you want to view.

This will give path of Documents folder.

let fileManager = NSFileManager.defaultManager()
 let documentsUrl = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
print(documentsUrl)

You need to change code

let pdf = documentsUrl + "/<your pdf file name>"

let req = NSURLRequest(URL: pdf)
webView.loadRequest(req)

Hope this works for you.

Upvotes: 2

Britto Thomas
Britto Thomas

Reputation: 2120

Please check you path has valid file exist or not before loading the file.

    let webView : UIWebView!
    webView = UIWebView()
    webView.frame = self.view.bounds
    self.view.addSubview(webView)
    let PDF_FILE_PATH  = NSBundle.mainBundle().pathForResource("ST_Business%20Times_07022016", ofType: "pdf")
    let checkValidation = NSFileManager.defaultManager()

    if (checkValidation.fileExistsAtPath(PDF_FILE_PATH!))
    {
        print("FILE AVAILABLE");
        let req = NSURLRequest(URL: NSURL(string: PDF_FILE_PATH!)!)
        webView.loadRequest(req)
    }
    else
    {
        print("FILE NOT AVAILABLE");
    }

Upvotes: 0

Nirav Gadhiya
Nirav Gadhiya

Reputation: 6342

You are fetching it from bundle not from document directory.

Try this....

var pdf = (NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)).last as? NSURL

pdf = pdf?.URLByAppendingPathComponent( "ST_Business%20Times_07022016.pdf")
let req = NSURLRequest(URL: pdf)
webView.loadRequest(req)

Upvotes: 1

Related Questions