在react中使用react-pdf-js 和 pdfjs-dist的区别和如何使用。以及分页和不分页是怎么处理的

1、首先讲下怎么使用react-pdf-js,以及需要注意的地方

// 引入
import ReactPdf from 'react-pdf-js'
下面如果你想要分页显示的话 https://www.jianshu.com/p/3edb2c1b5ae6 // 看这个就可以了,但是你如果想一页展示的话就需要做下面的操作了
<ReactPdf
  file={pdffile} // 这个地方是你的pdf文件或者是一个地址(推荐使用文件)
  onDocumentComplete={this.onDocumentComplete} // 这个是当pdf文件解析完成之后的回调函数,会返回给你一个pdf的总页数
  page={this.state.page} // 在state中保存的page,这个值可以手动写:1就代表第一页 2就代表第二页...,
/>

// 当pdf文件解析完成之后可以在state中设置page和pages,代表第几页和总页数
onDocumentComplete = (pages) => {
    this.setState({ page: 1, pages })
}
那么我们可以看到 他是支持一页一页展示的,但是如果你想一整页显示出来怎么办。那么我们就需要在render里遍历pages循环生成
1、首先在外层初始化加载一个,用来获取总页数,默认展示第一页。
<ReactPdf
    file={pdfUrl}
    onDocumentComplete={this.onDocumentComplete}
    page={1}
  />
2、获取到pages之后循环生成。另外注意的是index是从0开始,page需要从1开始,所以需要加1,因为上面已经加载过一次page=1的了所以我们就不需要再展示了。
另外要注意如果file传的不是下载好的文件,而是url 的话,会循环请求。解决办法就是先下载下来。不然会非常影响性能。如果请
求时长较短的可以
{
    this.state.pages ? new Array(this.state.pages).fill('').map((item, index) => {
        return index + 1 !== 1 ? (
            <ReactPdf
              file={pdfUrl}
             page={index + 1}
        />
    ) : ''
    }) : ''
}

ps:样式什么的就需要自己调了。

2、如何在react中使用pdfjs-dist

// 下载和引入npm install pdfjs-dist --save
import 'pdfjs-dist'

// 使用方法
getPdfData = () => {
 let pdfUrl = 'xxx.pdf' || url //同样是pdf文件或者是一个地址
let PDFJS = window.PDFJS // 引入后window中会有这个方法 可以在控制台打印下window看到 // 下面就是解析文件或者url PDFJS.getDocument(pdfUrl).then((pdfDoc_) => {   let pdfDoc = pdfDoc_  // 因为不想要分页所以循环生成canvas   for (let i = 1; i <= pdfDoc.numPages; i++) {    // 因为不知道把pdf解析了多少页,所以我们需要循环创建canvas并且一定要不同的id    let canvas = document.createElement('canvas')    canvas.id = `pdf${i}`     let ctx = canvas.getContext('2d')     // 通过getPage的方法获取到每一页的内容渲染,结束后把当前创建的canvas添加到页面中    pdfDoc.getPage(i).then((page) => {       let viewport = page.getViewport(1)      let desiredWidth = '1238'       let scale = desiredWidth / viewport.width       let scaledViewport = page.getViewport(scale)       canvas.height = scaledViewport.height       canvas.width = scaledViewport.width       // 进行文件读取加载       let renderContext = { canvasContext: ctx, viewport: scaledViewport, }       page.render(renderContext) })       // 获取到页面定义好的父元素,把生成的canvas添加进去      document.getElementById('pdfList').appendChild(canvas)   } }).catch(() => { message.error('pdf加载失败') }) }

如果哪里不对,或者有什么改进的地方 欢迎大家指出来

(0)

相关推荐

  • 前端PDF文件转图片方法

    第一步:先下载pdfjs,网址:PDF下载地址,再引入到项目中,我是标签直接引用的 <script src="pdfjs/build/pdf.js"></scri ...

  • vue实现pdf文档在线预览功能

    vue实现pdf文档在线预览功能 简介 针对android系统不支持pdf文档在线预览,可通过引入pdf.js插件实现,其具体实现步骤如下 一.引入插件 方式一:npm install --save ...

  • 使用create-react-app搭建TypeScript React Ant Design开发环境

    要创建一个支持TypeScript的Create React App项目,可以运行: npx create-react-app my-app --template typescript# oryarn ...

  • Grid.js - 跨框架的前端表格插件

    WEB前端开发社区 昨天 只想简简单单画个表格,但 React,Vue,Angular,-,这么多前端框架,各自都有不同的表格渲染库.就没有表格库能"一次画表,到处运行"吗?来看看 ...

  • 如何将Pdf文件转化成PNG图像?

    在青少年编程竞赛交流群中,我每周日晚20:00都会开展直播活动,带着小朋友们学习编程. 之后,我也会把每周要求小朋友做的题目以图文的形式发放出来,方便小朋友们复习.比如:Scratch等级考试(二级) ...

  • PDF导出为图片并生成WORD

    大家好,我消失了太久,不知道大家还记不记得我.前段时间有人提了个很奇怪的要求:他们要投标,投标方需要word形式的标书,标书内又要有公司内部几百号人的从业证书,现在标书写好了,每个人自己的从业证书各自 ...

  • 解读在React中使用JSX语法

    JSX是JavaScript的一种语法扩展,被应用到React体系结构中,它的格式与模板语言类似,但实际上完全在JavaScript内部实现.组成React应用程序的元素最小单元,JSX用于声明Rea ...

  • React中的高优先级任务插队机制

    在React的concurrent模式下,低优先级任务执行过程中,一旦有更高优先级的任务进来,那么这个低优先级的任务会被取消,优先执行高优先级任务.等高优先级任务做完了,低优先级任务会被重新做一遍. ...

  • react中实现可拖动div

    把拖动div功能用react封装成class,在页面直接引入该class即可使用. title为可拖动区域.panel为要实现拖动的容器. 优化了拖动框超出页面范围的情况,也优化了拖动太快时鼠标超出可 ...

  • 多种药制成的激发造血功能液及其在血液病治疗中的应用.pdf

    技术领域: 本发明涉及一种治疗再生障碍性贫血.血细胞减少症的药物,本发明还涉及该药物在血液病治疗中的应用. 背景技术: 血液病是国际上的疑难病症,它包括:白血病,再生障碍性贫血,血小板减少症等多个病种 ...

  • 茶氨酸在制备治疗中风后遗症或中风恢复期的药物中的应用.pdf

    茶氨酸在制备治疗中风后遗症或中风恢复期的药物中的应用 技术领域 本发明涉及茶氨酸的药物或保健应用,具体涉及茶氨酸在制备治疗和/或预防中风恢复期或中风后遗症的药物和/或保健品中的应用,属于药物或保健品领 ...

  • 季德胜蛇药片在防治中风及中风后遗症病症中的应用.pdf

    季德胜蛇药片在防治中风及中风后遗症病症中的应用.pdf

  • 缬沙坦氨氯地平胶囊在制备治疗脑中风的药物中的应用.pdf

    <缬沙坦氨氯地平胶囊在制备治疗脑中风的药物中的应用.pdf>由会员分享,可在线阅读,更多相关<缬沙坦氨氯地平胶囊在制备治疗脑中风的药物中的应用.pdf(3页珍藏版)>请在专利查 ...

  • 半导体表面势、空间电荷、能带结构等与外加电压的关系及其在MOS器件中的作用.pdf

    作者:何龙 院系:微电子研究院 学校:复旦大学 指导教师:江安全 半导体表面势.空间电荷.能带结构等与外加电压的关系 及其在MOS 器件中的作用 一.能带与费米能级 1. 能带的形成 自由电子的能级是 ...

  • 抗骨髓炎片在制备治疗风热感冒药物中的应用.pdf

    <抗骨髓炎片在制备治疗风热感冒药物中的应用.pdf>由会员分享,可在线阅读,更多相关<抗骨髓炎片在制备治疗风热感冒药物中的应用.pdf(5页完整版)>请在专利查询网上搜索. 1 ...