ReactNative文檔查看組件:react-native-doc-viewer

事件背景:最近在寫一個(gè)項(xiàng)目击喂,要求本地打開维苔、查看和打開遠(yuǎn)程的文檔碰辅。找到了一個(gè)組件懂昂,使用起來挺方便的。就分享一下没宾。我是配合react-native-fs實(shí)用的凌彬,fs配置的一些東西看我另一篇隨筆沸柔。

react-native-doc-viewer,可以在手機(jī)上直接打開文檔铲敛,支持遠(yuǎn)程和本地文檔褐澎。

支持的文檔格式:xls,ppt,doc,xlsx,pptx,docx,png,jpg,pdf,mp4。支持iOS和Android伐蒋。

組件名稱:react-native-doc-viewer

首先安裝:npm install react-native-doc-viewer --save

其次自動(dòng)鏈接:react-native link react-native-doc-viewer


????????按理說是自動(dòng)連接是可以的工三。可是程序運(yùn)行一下發(fā)現(xiàn)還是報(bào)錯(cuò)先鱼。只能手動(dòng)來了。

先附上npm網(wǎng)址:https://www.npmjs.com/package/react-native-doc-viewer

檢查并鏈接:

一、ios端:

1芹彬、在XCode中玻熙,在項(xiàng)目導(dǎo)航器中,右鍵單擊Libraries?Add Files to [你的項(xiàng)目名字]

2宏多、轉(zhuǎn)到node_modules??react-native-doc-viewer并添加RNReactNativeDocViewer.xcodeproj

3儿惫、在XCode中,在項(xiàng)目導(dǎo)航器中伸但,選擇您的項(xiàng)目肾请。添加libRNReactNativeDocViewer.a到項(xiàng)目的Build Phases?Link Binary With Libraries

劃重點(diǎn),我的以上三條都鏈接上了更胖。只有下面的沒有鏈接上筐喳。

鏈接的框架和庫必須具有此2個(gè)庫(AssetsLibrary.framework和QuickLock.framework)

注意當(dāng)顯示http鏈接時(shí),不要忘記將APP傳輸安全設(shè)置 - >允許任意加載設(shè)置為YES

在info.plist里沒有的話添加上函喉。

二避归、android配置

去看npm網(wǎng)址吧,我的是直接連接一下就自動(dòng)配置上了管呵,所以懶得整理了梳毙。


附上API:

openDoc 打開遠(yuǎn)程貨或本地文檔

openDocb64 打開Base64字符串格式文檔

openDocBinaryinUrl 打開二進(jìn)制文件

playMovie 打開視頻文件

制作這個(gè)組件的作者估計(jì)是沒時(shí)間寫很詳細(xì),所以npm上也不是很詳細(xì)捐下。下面附上我寫的一部分程序账锹。

import React, { Component } from 'react';

import {

? ? StyleSheet,Text,View,

? ? Platform,Button,Alert,ActivityIndicator

} from 'react-native';

import OpenFile from 'react-native-doc-viewer';

var RNFS = require('react-native-fs');

//保存路徑可以跳進(jìn)去看,具體自己選擇

var SavePath = Platform.OS === 'ios' ? RNFS.LibraryDirectoryPath : RNFS.ExternalDirectoryPath;

export default class Component extends Component {

? ? static navigationOptions = ({ navigation }) => ({

? ? ? ? title: `${navigation.state.params.name}`,

? ? });

? ? state = { animating: false }

//首先下載文件

? ? ?componentDidMount() {

? ? ? alert("開始")

? ? RNFS.exists(SavePath + "demo.docx").then(

? ? ? ? //判斷文件是否已存在坷襟,返回result為true說明存在奸柬,result為false說明不存在

? ? ? ? (result)=>{

? ? ? ? ? ? console.log(result);

? ? ? ? ? ? if(!result){

? ? ? ? ? ? ? ? var DownloadFileOptions = {

? ? ? ? ? ? ? ? ? ? fromUrl: "https://calibre-ebook.com/downloads/demos/demo.docx",// 下載文件的URL

? ? ? ? ? ? ? ? ? ? toFile: SavePath+"/demo.docx",? ? ? ? // 將文件保存到的本地文件系統(tǒng)路徑

? ? ? ? ? ? ? ? ? ? //進(jìn)度條

? ? ? ? ? ? ? ? ? ? begin: (res) => {

? ? ? ? ? ? ? ? ? ? ? ? console.log('begin', res);

? ? ? ? ? ? ? ? ? ? ? ? console.log('contentLength:', res.contentLength / 1024 / 1024, 'M');

? ? ? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? ? ? progress: (res) => {

? ? ? ? ? ? ? ? ? ? ? ? let pro = res.bytesWritten / res.contentLength;

? ? ? ? ? ? ? ? ? ? ? ? console.log(pro);

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? const ret = RNFS.downloadFile(DownloadFileOptions);

? ? ? ? ? ? ? ? ret.promise.then(res => {

? ? ? ? ? ? ? ? ? ? console.log('success', res);

? ? ? ? ? ? ? ? ? ? console.log('file://' + DownloadFileOptions.toFile)

? ? ? ? ? ? ? ? }).catch(err => {


? ? ? ? ? ? ? ? ? ? console.log('err', err);

? ? ? ? ? ? ? ? });

? ? ? ? ? ? }

? ? ? ? }

? ? ).catch(

? ? )

}

//打開本地文件

? ? handlePressLocal = () => {

? ? ? ? this.setState({ animating: true });

? ? ? ? if (Platform.OS === 'ios') {

? ? ? ? ? ? OpenFile.openDoc([{

? ? ? ? ? ? ? ? url: SavePath + "/demo.docx",

? ? ? ? ? ? ? ? fileNameOptional: "白皮書"

? ? ? ? ? ? }], (error, url) => {

? ? ? ? ? ? ? ? if (error) {

? ? ? ? ? ? ? ? ? ? this.setState({ animating: false });

? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? this.setState({ animating: false });

? ? ? ? ? ? ? ? ? ? console.log(url)

? ? ? ? ? ? ? ? }

? ? ? ? ? ? })

? ? ? ? } else {

? ? ? ? ? ? OpenFile.openDoc([{

? ? ? ? ? ? ? ? url: "file://"+SavePath+"/demo.docx",//打開本地文件必須加上file://

? ? ? ? ? ? ? ? fileName: "白皮書",

? ? ? ? ? ? ? ? cache: true,

? ? ? ? ? ? ? ? fileType: "docx"

? ? ? ? ? ? }], (error, url) => {

? ? ? ? ? ? ? ? if (error) {

? ? ? ? ? ? ? ? ? ? console. log(error)

? ? ? ? ? ? ? ? ? ? this.setState({ animating: false });

? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? this.setState({ animating: false });

? ? ? ? ? ? ? ? ? ? console.log(url)

? ? ? ? ? ? ? ? ? ? alert(url)

? ? ? ? ? ? ? ? }

? ? ? ? ? ? })

? ? ? ? }

? ? }

//打開遠(yuǎn)程文件

handlePress = () => {

? ? ? ? this.setState({ animating: true });

? ? ? ? if (Platform.OS === 'ios') {

? ? ? ? ? ? OpenFile.openDoc([{

? ? ? ? ? ? ? ? url: "https://calibre-ebook.com/downloads/demos/demo.docx",

? ? ? ? ? ? ? ? fileNameOptional: "test filename"

? ? ? ? ? ? }], (error, url) => {

? ? ? ? ? ? ? ? if (error) {

? ? ? ? ? ? ? ? ? ? this.setState({ animating: false });

? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? this.setState({ animating: false });

? ? ? ? ? ? ? ? ? ? console.log(url)

? ? ? ? ? ? ? ? }

? ? ? ? ? ? })

? ? ? ? } else {

? ? ? ? ? ? //Android

? ? ? ? ? ? this.setState({ animating: true });

? ? ? ? ? ? OpenFile.openDoc([{

? ? ? ? ? ? ? ? url: "https://www.huf-haus.com/fileadmin/Bilder/Header/ART_3/Header_HUF_Haus_ART_3___1_.jpg", // Local "file://" + filepath

? ? ? ? ? ? ? ? fileName: "sample",

? ? ? ? ? ? ? ? cache: false,

? ? ? ? ? ? ? ? fileType: "jpg"

? ? ? ? ? ? }], (error, url) => {

? ? ? ? ? ? ? ? if (error) {

? ? ? ? ? ? ? ? ? ? this.setState({ animating: false });

? ? ? ? ? ? ? ? ? ? console.error(error);

? ? ? ? ? ? ? ? } else {

? ? ? ? ? ? ? ? ? ? this.setState({ animating: false });

? ? ? ? ? ? ? ? ? ? console.log(url)

? ? ? ? ? ? ? ? }

? ? ? ? ? ? })

? ? ? ? }

? ? }

setToggleTimeout() {

? ? ? ? this.setTimeout(() => {

? ? ? ? ? ? this.setState({ animating: !this.state.animating });

? ? ? ? ? ? this.setToggleTimeout();

? ? ? ? }, 2000);

? ? }

render() {

? ? ? ? return (

? ? ? ? ? ? <View style={styles.container}>

? ? ? ? ? ? ? ? <ActivityIndicator

? ? ? ? ? ? ? ? ? ? animating={this.state.animating}

? ? ? ? ? ? ? ? ? ? style={[styles.centering, { height: 80 }]}

? ? ? ? ? ? ? ? ? ? size="large" />

? ? ? ? ? ? ? ? <Text style={styles.welcome}>

? ? ? ? ? ? ? ? ? ? Doc Viewer React Native

? ? ? ? ? ? ? ? </Text>

? ? ? ? ? ? ? ? <Button

? ? ? ? ? ? ? ? ? ? onPress={this.handlePress.bind(this)}

? ? ? ? ? ? ? ? ? ? title="打開遠(yuǎn)程文檔"

? ? ? ? ? ? ? ? ? ? accessibilityLabel="See a Document"

? ? ? ? ? ? ? ? />

? ? ? ? ? ? ? ? <Button

? ? ? ? ? ? ? ? ? ? onPress={this.handlePressLocal.bind(this)}

? ? ? ? ? ? ? ? ? ? title="打開本地文檔"

? ? ? ? ? ? ? ? ? ? accessibilityLabel="See a Document"

? ? ? ? ? ? ? ? />

? ? ? ? ? ? </View>

? ? ? ? );

? ? }

}

const styles = StyleSheet.create({

? ? container: {

? ? ? ? flex: 1,

? ? ? ? justifyContent: 'center',

? ? ? ? alignItems: 'center',

? ? ? ? backgroundColor: '#F5FCFF',

? ? },

? ? welcome: {

? ? ? ? fontSize: 20,

? ? ? ? textAlign: 'center',

? ? ? ? margin: 10,

? ? },

? ? instructions: {

? ? ? ? textAlign: 'center',

? ? ? ? color: '#333333',

? ? ? ? marginBottom: 5,

? ? },

});


上面我覺得重要的地方都有加注釋。有使用fs 有需要的可以點(diǎn)下FS婴程,去我的另一篇文章?廓奕。

再次劃重點(diǎn):打開本地文件失敗:打開本地文件的url:必須是file://+路徑+文件名字。上面也有注釋桌粉。我是遇到這個(gè)問題了蒸绩,所以就想嘮叨一下。

我只使用了打開遠(yuǎn)程的和下載后打開本地的铃肯。其他的官方上npm上有例子患亿。可以去查看押逼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末步藕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子挑格,更是在濱河造成了極大的恐慌漱抓,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恕齐,死亡現(xiàn)場離奇詭異乞娄,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)显歧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門仪或,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人士骤,你說我怎么就攤上這事范删。” “怎么了拷肌?”我有些...
    開封第一講書人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵到旦,是天一觀的道長。 經(jīng)常有香客問我巨缘,道長添忘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任若锁,我火速辦了婚禮搁骑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘又固。我一直安慰自己仲器,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開白布仰冠。 她就那樣靜靜地躺著乏冀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪洋只。 梳的紋絲不亂的頭發(fā)上辆沦,一...
    開封第一講書人閱讀 51,198評(píng)論 1 299
  • 那天昼捍,我揣著相機(jī)與錄音,去河邊找鬼众辨。 笑死端三,一個(gè)胖子當(dāng)著我的面吹牛舷礼,可吹牛的內(nèi)容都是我干的鹃彻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼妻献,長吁一口氣:“原來是場噩夢啊……” “哼蛛株!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起育拨,我...
    開封第一講書人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤谨履,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后熬丧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笋粟,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年析蝴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了害捕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闷畸,死狀恐怖尝盼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情佑菩,我是刑警寧澤盾沫,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站殿漠,受9級(jí)特大地震影響赴精,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜绞幌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一祖娘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧啊奄,春花似錦渐苏、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至庄新,卻和暖如春鞠眉,著一層夾襖步出監(jiān)牢的瞬間薯鼠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來泰國打工械蹋, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留出皇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓哗戈,卻偏偏與公主長得像郊艘,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子唯咬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1纱注、讀《奧巴馬回憶錄·我父親的夢想》有感 孫洋洋 生活是不公平的,你要去適應(yīng)它胆胰。有的人逆風(fēng)而行狞贱,也未必會(huì)失敗。奧...
    不如遇見閱讀 1,219評(píng)論 0 0
  • 保存圖片到系統(tǒng)相冊(cè) first, 先要講的是如何將一張圖片保存到系統(tǒng)的相冊(cè), 這里我們就不講保存到自定義的相冊(cè)什么...
    zhouyuhan閱讀 3,666評(píng)論 4 4
  • 落落大方,彬彬有禮厚柳,是我對(duì)星洲小學(xué)學(xué)生的印象氧枣。是的,一次班隊(duì)活動(dòng)草娜,展現(xiàn)了他們良好的精神風(fēng)貌挑胸,出色的班級(jí)凝聚力...
    浙大學(xué)習(xí)班學(xué)霸組閱讀 158評(píng)論 0 0
  • 今天參加讀寫訓(xùn)練營的讀書分享會(huì),其實(shí)我參與的時(shí)候已經(jīng)遲了宰闰,好多小伙伴已經(jīng)分享過了茬贵。我本可以用語音分享,但是因?yàn)楹⒆?..
    透明的橙閱讀 126評(píng)論 0 0
  • 只有復(fù)雜的環(huán)境螟左,才會(huì)造成這般扭曲的人性! 今天推薦的這部電影觅够,真需要一下子切入正題胶背! 不是因?yàn)榫d綿著急,只是對(duì)這部...
    Shawn必有人魚線閱讀 304評(píng)論 0 0