react项目中实现pdf预览功能

789 阅读1分钟

1、引入react-pdf插件

npm install  react-pdf

2、开始编写相关逻辑代码

  • react-hook实现
import React, { Component} from 'react'

import { Document, Page, pdfjs } from 'react-pdf'

pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`

const  PdfComponent=()=>{

     let [totalPage, setTotalPage] = useState(1)

     function onDocumentLoadSuccess({numPages}) {

          setTotalPage(numPages)

     }

     return(

            <Document

                file={this.props.pdfUrl}//pdf路径

                onLoadSuccess={this.onDocumentLoadSuccess} //成功加载文档后调用

                renderMode="canvas"   //定义文档呈现的形式 

            >

                {

                    new Array(totalPage).fill('').map((item, index) => {

                        return <Page key={index} pageNumber={index + 1} />

                    })

                }

            </Document>

        );

}

export default PdfComponent
  • react中class类的写法


import React, { Component} from 'react'

import { Document, Page, pdfjs } from 'react-pdf'

pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`

class PdfComponent extends Component{

    constructor(props){

        super(props)

        this.state={

            totalPage:1

        }

    }

    onDocumentLoadSuccess=({ numPages })=> {

        this.setState({

            totalPage: numPages

        })

    }

    render(){

        const { totalPage}=this.state



        return(

            <Document

                file={this.props.pdfUrl} //pdf路径

                onLoadSuccess={this.onDocumentLoadSuccess} //成功加载文档后调用

                renderMode="canvas"   //定义文档呈现的形式 

            >

                {

                    new Array(totalPage).fill('').map((item, index) => {

                        return <Page key={index} pageNumber={index + 1} />

                    })

                }

            </Document>

        );

    }

}
export default PdfComponent