How to open local PDF files from ng-click for an android app?

I have stored a bunch of PDF files in: www//pdf/ and want to parse the files to show a list - however to save time, I’ve just stored all the filepaths in a pdfController as an array.

Now I have an ng-repeat listing each item and want to use ng-click myFunction() to open the pdf file as a popup for the application or similar.

Is there anyway to do this in Android ?

Open this pdf in In App browser:

window.open('http://whitelisted-url.com/pdftoopen.pdf', '_blank');

in your case it should look something like this:

window.open(encodeURI('full/path/to/file.pdf'), '_system');

Plugin: https://github.com/apache/cordova-plugin-inappbrowser

Or you can use this plugin: https://github.com/don/FileOpener

Update: Don’t use FileOpener plugin, it’s deprecated. Use ngCordova FileOpener2. Just one warning, it can’t open assets content, file must be placed in a real system directory. I wrote a tutorial on this topic, read it here.

4 Likes

i would use this:

and let the system handle it → on android you get a list of apps which can handle the filetype or uses the default app automatically

What would the full PDF file path be ? Because doing:

window.open(encodeURI(‘pdf/file.pdf’), ‘_system’); - works for web test in my browser but doesn’t work on the Android app.

I get ‘invalid path’ - do I need to prefix it with www/ ?

nope you need the fullpath to the file on your local device.
In which folder is the pdf?

or is it referenced to a website

It’s localhost, it’s inside the ionic app’s folder: www/pdf/file.pdf

Unsure how to create a full file path once the app is installed ? Is it possible to get these values ? If not, I know I won’t change the name of the app and it’s just for 2 Android devices (same devices) so can hard-code it directly

@bengtler if it’s not possible to easily access the pdf files within www/ then I can install them do Download/pdf file on sdcard or similar manually.

In that case, what would the file path be ?

sry i forgot to answer the question.

for the download approach you need the file and file-transfer plugin.
with both you can first request the local filesystem --> so get access to the sdcard and so on. after that you can create own directories like “com.youCompany.youApp” and with file-transfer plugin you can download a file. on the filesystem you can get directories and files. a fileentry has a function toURL(), where you get the fullpath of the file.

Ok, but I don’t want to code my app to “download” the files. I put the files inside the app already… unless I can “download” from the localhost version inside the app ?

Anyway, if I manually put all pdf files in a folder on the sdcard Download folder - can I access these ? If so, what would the fullpath be ?

Thanks

for that you can also use cordova-file plugin,

request the filesystem:

$window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fileSystem) {
});

with the filesystem you get now access to your sdcard/localFileSystem and with

fileSystem.root.toURL()

you can get the basepath of that --> and then you can concat your folder-structure and the filenames

1 Like

fileSystem.root.toURL() returns file:///storage/emulated/0/

But I need:

file:///sdcard/Download/pdf

EDIT: ah never mind, the storage/emulated/0 is sdcard so I just had to remove that from my path concat and it works :smile:

Thanks @bengtler