背景
接到一個需求,需要頁面同時展示多個PDF文件並且需要可以同時滾動。
一開始想到用iframe渲染PDf,但是考慮到用iframe渲染PDF文件不好控制,然后開始在網上找到兩個渲染PDF的庫
react-pdf-js 點擊進入官方文檔
react-pdf 點擊進入官方文檔
對比兩個庫后發現react-pdf用戶量更大,文檔更為清晰,功能也比較全面,所以選用了react-pdf。
安裝
注意:使用之前要根據自己項目的react版本去下載對應的react-pdf版本,通過npm默認安裝最新版本的react-pdf,React版本需要≥16.3,需要查找對應版本,點擊進入react-pdf官網進行查看
- 安裝react-pdf包
npm install react-pdf --save
- 引入組件及使用
import React, { Component } from 'react'; import { Document, Page } from 'react-pdf'; import 'react-pdf/dist/Page/AnnotationLayer.css' // 加入這個css可以顯示pdf中的批注以及連接 class MyApp extends Component { state = { numPages: null, pageNumber: 1, } onDocumentLoadSuccess = ({ numPages }) => { this.setState({ numPages }); } render() { const { pageNumber, numPages } = this.state; return ( <div> <Document file="一個PDF的連接.pdf" onLoadSuccess={this.onDocumentLoadSuccess} > <Page pageNumber={pageNumber} /> </Document> <p>Page {pageNumber} of {numPages}</p> </div> ); } }
顯示方式
翻頁
想控制翻頁的話只要動態改變pageNumber就好了
一屏幕顯示
可以根據onLoadSuccess獲取總頁數,然后根據總頁數循環生成Page組件,就可以一屏幕顯示所有頁面了
render() {
const { pageNumber, numPages } = this.state; return ( <div> <Document file="一個PDF的連接.pdf" onLoadSuccess={this.onDocumentLoadSuccess }> { new Array(numPages).fill('').map((item, index) => { return <Page key={index} pageNumber={index} /> }) } </Document> </div> ); }
結語
react-pdf有很多api,比如說加載中和加載失敗時顯示的提示、pdf文件縮放的比例等,所以如果需要滿足更多需求記得去看文檔!