react预览pdf

3 篇文章 0 订阅
2 篇文章 0 订阅

pdfjs-dist

js

//pdf控制页码,用来渲染canvas和绑定对应的id
const [pdfNum, setPdfNum] = useState(0)
const pdf = require('pdfjs-dist')
        pdf.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.entry')
        pdf
          .getDocument(fileUrl)
          .promise.then((pdfDocument) => {
          //渲染个数,绘画出空的canvas
            setPdfNum(pdfDocument.numPages)
            for (let i = 1; i <= pdfDocument.numPages; i++) {
            //读取每一页的信息
              pdfDocument.getPage(i).then((pdfPage) => {
              //绘制canvas
              //找出适配屏幕大小的宽度
                const vp = pdfPage.getViewport({ scale: 1.0 })
                const viewport = pdfPage.getViewport({ scale: window.innerWidth / vp.width })
                const canvas: any = document.getElementById('canvasDom' + i)
                if (!canvas) {
                  // eslint-disable-next-line prefer-promise-reject-errors
                  return Promise.reject()
                }
                canvas.width = viewport.width
                canvas.height = viewport.height
                // const ctx = canvas.getContext("2d") as CanvasRenderingContext2D
                const ctx = canvas.getContext('2d')
                const renderTask = pdfPage.render({
                  canvasContext: ctx,
                  viewport,
                })
                return renderTask.promise
              })
            }

          })
          .catch((err) => {
            console.log(err)
          })

tsx

//简单的渲染 id要不同
new Array(pdfNum)
            .fill(0)
            .map((item, index) => <canvas id={'canvasDom' + (index + 1)} key={index} />)
2.4版本以上就不兼容苹果和chrome之外的浏览器了,建议降低版本到2.2.228
如果打包时候出现了webpack5的问题,建议在alias里面配置上"url":require(‘/url’)

作者还将pdfjs-dist封装成一个组件 感兴趣的可以看下

封装一个react pdf插件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值