React下實現(xiàn)pdf在線預(yù)覽

問題背景

因為項目需要,在react項目中需要實現(xiàn)pdf文件的預(yù)覽舟铜。


環(huán)境配置

  1. node: v10.18.1
  2. react: v16.8.x
  3. yarn: v1.21.1

技術(shù)調(diào)研

截止2020年2月戈盈,市面上的主流在線可視化底層庫為viewjspdf.js。兩者定位不同谆刨,前者覆蓋pdf塘娶,office等多種文檔格式,部署復(fù)雜痊夭;后者由mozilla項目組創(chuàng)建和管理血柳,相對輕巧。

而google搜索react pdf js等關(guān)鍵詞生兆,一般給出以下的幾個庫:

  1. [react-pdf](https://www.npmjs.com/package/react-pdf](https://www.npmjs.com/package/react-pdf): star較多
  2. react-pdf-js
  3. react-native-view-pdf

前兩個都是基于pdf.js ,后者屬于react-native,不做考慮。

因此優(yōu)先的選擇是使用react-pdf膝宁,yarn安裝后開始使用鸦难,官方的建議如下:

import { Document } from 'react-pdf';
// 還有下面的一種,說是針對webpack的配置
import { Document } from 'react-pdf/dist/entry.webpack';

但是測試后發(fā)現(xiàn)本地的yarn start起不了了员淫,提示如下報錯信息:

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of me...

暫時估計是pdf等庫需要加載大文件導(dǎo)致的合蔽,被迫放棄。需要手動基于pdfjs來實現(xiàn)介返,搜索后發(fā)現(xiàn)PDFTron上有一篇簡單教學(xué)可以用拴事。原理也是清晰的:
https://www.pdftron.com/blog/react/how-to-build-a-react-pdf-viewer/

  • 下載pdf.js的版本到本地public目錄
  • 本地pdf的文件通過創(chuàng)建的iframe元素,設(shè)計iframe.src來顯示圣蝎,典型的路徑為:/pdfjs-1.9.426-dist/web/viewer.html?file=${source},其中的pdfjs-1.9xxx就是下載的pdfjs版本
  • react 里面封裝PDFViewer刃宵,目的是綁定加載pdf路徑和上一步的iframe,而這個路徑既可以是遠程的pdf url徘公,也可以是通過接口獲得的blob數(shù)據(jù)牲证,最后使用URL.createObjectUrl生成的本地路徑
  • 最上層就是調(diào)用層,傳入對應(yīng)的src路徑即可关面;

最后測試可以坦袍,分享給大家十厢,具體問題可以私信筆者!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捂齐,一起剝皮案震驚了整個濱河市蛮放,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奠宜,老刑警劉巖包颁,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挎塌,居然都是意外死亡徘六,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門榴都,熙熙樓的掌柜王于貴愁眉苦臉地迎上來待锈,“玉大人,你說我怎么就攤上這事嘴高「鸵簦” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵拴驮,是天一觀的道長春瞬。 經(jīng)常有香客問我,道長套啤,這世上最難降的妖魔是什么宽气? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮潜沦,結(jié)果婚禮上萄涯,老公的妹妹穿的比我還像新娘。我一直安慰自己唆鸡,他們只是感情好涝影,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著争占,像睡著了一般燃逻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上臂痕,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天伯襟,我揣著相機與錄音,去河邊找鬼握童。 笑死逗旁,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播片效,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼红伦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了淀衣?” 一聲冷哼從身側(cè)響起昙读,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎膨桥,沒想到半個月后蛮浑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡只嚣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年沮稚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片册舞。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蕴掏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出调鲸,到底是詐尸還是另有隱情盛杰,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布藐石,位于F島的核電站即供,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏于微。R本人自食惡果不足惜逗嫡,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望株依。 院中可真熱鬧祸穷,春花似錦、人聲如沸勺三。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吗坚。三九已至,卻和暖如春呆万,著一層夾襖步出監(jiān)牢的瞬間商源,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工谋减, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留牡彻,地道東北人。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像庄吼,于是被迫代替她去往敵國和親缎除。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

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