react-native-doc-viewer ![npm version](https://img.shields.io/npm/v/react-native-doc-viewer.svg?style=flat)
![Platform](https://img.shields.io/badge/platform-react--native%20%5Bios%20%26%20android%5D-blue.svg)
![License](https://img.shields.io/npm/l/express.svg)
![nodei.co](https://nodei.co/npm/react-native-doc-viewer.png?downloads=true&downloadRank=true&stars=true)
A React Native bridge module: Document Viewer for files (pdf, png, jpg, xls, doc, ppt, xlsx, docx, pptx etc.)
2017 Roadmap
- Download Progess Event Listener for big Files IOS and Android
2018 Roadmap
- Android file without external Application
- Windows Phone Support
IMPORTANT INFORMATION: THIS IS A OPEN SOURCE PROJECT, SOMETIMES I HAVE NO TIME TO DEVELOP THIS PROJECT. THANK YOU FOR YOUR PULL REQUEST AND YOUR SUPPORT. I will continue to develop it as it is possible in time.
Changelog:
2.7.1 - Fix Progress IOS Download
2.6.9 - Progress IOS DOWNLOAD Document Callback in Native Code
2.6.0 - Android Openbase64
2.5.2 - OpenDocAndroid
2.5.1 - Cleanings
2.5.0 - Update Project for React Native 0.50.3
Getting started
$ npm install react-native-doc-viewer --save
Automatic installation
$ react-native link react-native-doc-viewer
Manual installation
iOS
-
In XCode, in the project navigator, right click Libraries
➜ Add Files to [your project's name]
-
Go to node_modules
➜ react-native-doc-viewer
and add RNReactNativeDocViewer.xcodeproj
-
In XCode, in the project navigator, select your project. Add libRNReactNativeDocViewer.a
to your project's Build Phases
➜ Link Binary With Libraries
-
Linked Frameworks and Libraries must have this 2 Libraries (AssetsLibrary.framework & QuickLock.framework). When not you have to add them.
![Xcode add Library Alt text](https://raw.githubusercontent.com/philipphecht/react-native-doc-viewer/master/Screenshots/screenshot_xcode_addlibrary.png)
![Xcode add Library Alt text](https://raw.githubusercontent.com/philipphecht/react-native-doc-viewer/master/Screenshots/screenshot_xcode_addlibrary2.png)
-
When you Show http Links don't forget to set APP Transport Security Settings ->
Allow Arbitrary Loads to YES
![Plist Alt text](https://raw.githubusercontent.com/philipphecht/react-native-doc-viewer/master/Screenshots/plist_file.png)
- Run your project (
Cmd+R
)<
Android
- Open up
android/app/src/main/java/[...]/MainActivity.java
- Add
import com.reactlibrary.RNReactNativeDocViewerPackage;
to the imports at the top of the file - Add
new RNReactNativeDocViewerPackage()
to the list returned by the getPackages()
method
- Append the following lines to
android/settings.gradle
:
include ':react-native-doc-viewer'
project(':react-native-doc-viewer').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-doc-viewer/android')
- Insert the following lines inside the dependencies block in
android/app/build.gradle
:
compile project(':react-native-doc-viewer')
Windows on the Roadmap
Read it! :D
- In Visual Studio add the
RNReactNativeDocViewer.sln
in node_modules/react-native-react-native-doc-viewer/windows/RNReactNativeDocViewer.sln
folder to their solution, reference from their app. - Open up your
MainPage.cs
app
- Add
using Com.Reactlibrary.RNReactNativeDocViewer;
to the usings at the top of the file - Add
new RNReactNativeDocViewerPackage()
to the List<IReactPackage>
returned by the Packages
method
API DOC
IOS Document Viewer Doc
resource | description |
---|
openDoc | {url:String,fileNameOptional:String (optional)} |
openDocb64 | {url:String,fileName:String,fileType:String } |
openDocBinaryinUrl | {url:String,fileName:String,fileType:String } |
Android Document Viewer Doc
resource | description |
---|
openDoc | {url:String,fileName:String, cache:boolean} |
openDocb64 | {url:String,fileName:String,fileType:String, cache:boolean } |
openDocBinaryinUrl | not implemented yet |
Usage
import {
AppRegistry,
StyleSheet,
Text,
View,
Platform,
Button,
Alert
} from 'react-native';
import OpenFile from 'react-native-doc-viewer';
var RNFS = require('react-native-fs');
var SavePath = Platform.OS === 'ios' ? RNFS.MainBundlePath : RNFS.DocumentDirectoryPath;
handlePress = () => {
if(Platform.OS === 'ios'){
OpenFile.openDoc([{
url:"https://www.cmu.edu/blackboard/files/evaluate/tests-example.xls",
fileNameOptional:"sample-test"
}], (error, url) => {
if (error) {
console.error(error);
} else {
console.log(url)
}
})
}else{
OpenFile.openDoc([{
url:"http://mail.hartl-haus.at/uploads/tx_hhhouses/htf13_classic153s(3_giebel_haus).jpg",
fileName:"sample",
cache:false,
fileType:"jpg"
}], (error, url) => {
if (error) {
console.error(error);
} else {
console.log(url)
}
})
}
}
handlePressBinaryinUrl = () => {
if(Platform.OS === 'ios'){
OpenFile.openDocBinaryinUrl([{
url:"https://storage.googleapis.com/need-sure/example",
fileName:"sample",
fileType:"xml"
}], (error, url) => {
if (error) {
console.error(error);
} else {
console.log(url)
}
})
}else{
Alert.alert("Coming soon for Android")
}
}
handlePressLocalFile = () => {
if(Platform.OS === 'ios'){
OpenFile.openDoc([{
url:SavePath+"filename.pdf",
fileNameOptional:"sample"
}], (error, url) => {
if (error) {
console.error(error);
} else {
console.log(url)
}
})
}else{
OpenFile.openDoc([{
url:SavePath+"filename.pdf",
fileName:"sample",
cache:true
}], (error, url) => {
if (error) {
console.error(error);
} else {
console.log(url)
}
})
}
}
handlePressb64 = () => {
if(Platform.OS === 'ios'){
OpenFile.openDocb64([{
base64:"{BASE64String}"
fileName:"sample",
fileType:"png"
}], (error, url) => {
if (error) {
console.error(error);
} else {
console.log(url)
}
})
}else{
OpenFile.openDocb64([{
base64:"{BASE64String}"
fileName:"sample",
fileType:"png",
cache:true
}], (error, url) => {
if (error) {
console.error(error);
} else {
console.log(url)
}
})
}
handlePressVideo = () => {
if(Platform.OS === 'ios'){
OpenFile.playMovie(video, (error, url) => {
if (error) {
console.error(error);
} else {
console.log(url)
}
})
}else{
Alert.alert("Android coming soon");
}
}
<Button
onPress={this.handlePress.bind(this)}
title="Press Me Open Doc Url"
accessibilityLabel="See a Document"
/>
<Button
onPress={this.handlePressBinaryinUrl.bind(this)}
title="Press Me Open BinaryinUrl"
accessibilityLabel="See a Document"
/>
<Button
onPress={this.handlePressb64.bind(this)}
title="Press Me Open Base64 String"
accessibilityLabel="See a Document"
/>
<Button
onPress={()=>this.handlePressVideo("http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4")}
title="Press Me Open Video"
accessibilityLabel="See a Document"
/>
Screenshots
![Screenshot 1 Alt text](https://raw.githubusercontent.com/philipphecht/react-native-doc-viewer/master/Screenshots/Screenshot.png)
![Screenshot 2 Alt text](https://raw.githubusercontent.com/philipphecht/react-native-doc-viewer/master/Screenshots/Screenshot1.png)
![Screenshot 3 Alt text](https://raw.githubusercontent.com/philipphecht/react-native-doc-viewer/master/Screenshots/Screenshot2.png)
Copyright (c) 2017-present, Philipp Hecht
philipp.hecht@icloud.com
Donation
If this project help you reduce time to develop, you can give me a cup of coffee :)
![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)