当前位置: 首页 > article >正文

【react-pdf】实现在线pdf加载——翻页加载和下拉滚动加载

react-pdf插件地址

目录

    • 一、安装插件
    • 二、组件引用
    • 三、简单使用
    • 四、实现简单的上一页 / 下一页翻页加载
    • 五、实现简单的下拉滚动加载

一、安装插件

$ npm install react-pdf 
# or
$ yarn add react-pdf

二、组件引用

import { Document, Page } from "react-pdf";

三、简单使用

file可以是 URL、base64 内容、Uint8Array 等;

import { useState } from "react";
import { Document, Page } from "react-pdf";
import pdfFile from '../../../assets/探索自然之美_20250107105901.pdf'

const PdfOperate = () => {
  const [numPages, setNumPages] = useState<number>();
  const [pageNumber] = useState<number>(1);

  function onDocumentLoadSuccess({ numPages }: { numPages: number }): void {
    setNumPages(numPages);
  }

  return (
    <div>
      <Document file={pdfFile} onLoadSuccess={onDocumentLoadSuccess}>
        <Page pageNumber={pageNumber} />
      </Document>
      <p>
        Page {pageNumber} of {numPages}
      </p>
    </div>
  );
};

export default PdfOperate;

在这里插入图片描述

四、实现简单的上一页 / 下一页翻页加载

<Button onClick={handlePreviousPage}>上一页</Button>
<Button onClick={handleNextPage}>下一页</Button>
 
 const handlePreviousPage = () => {
    if (pageNumber > 1) {
      setPageNumber(pageNumber - 1);
    }
  };
 const handleNextPage = () => {
   if (pageNumber < numPages) {
     setPageNumber(pageNumber + 1);
   }
 };

五、实现简单的下拉滚动加载

下拉滚动加载完整代码:

import React, { useState } from "react";
import { pdfjs } from "react-pdf";
import { Document, Page } from "react-pdf";
import "react-pdf/dist/Page/AnnotationLayer.css";
import "react-pdf/dist/Page/TextLayer.css";
import pdfUrl from "../../../assets/探索自然之美_20250107105901.pdf";

type PDFFile = string | File | null;

const maxWidth = 800;

const options = {
  cMapUrl: `https://unpkg.com/pdfjs-dist@${pdfjs.version}/cmaps/`,
  standardFontDataUrl: `https://unpkg.com/pdfjs-dist@${pdfjs.version}/standard_fonts`,
};

pdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;

export default function CeshiOperate() {
  const [file] = useState<PDFFile>(pdfUrl);
  const [numPages, setNumPages] = useState<number | undefined>();
  const [containerWidth] = useState<number>(800);

  const onDocumentLoadSuccess = ({ numPages }: { numPages: number }): void => {
    setNumPages(numPages);
  };


  return (
    <div>
      <Document
        file={file}
        onLoadSuccess={onDocumentLoadSuccess}
        options={options}
      >
        {Array.from(new Array(numPages), (el, index) => (
          <Page
            key={`page_${index + 1}`}
            pageNumber={index + 1}
            width={
              containerWidth ? Math.min(containerWidth, maxWidth) : maxWidth
            }
          />
        ))}
      </Document>
    </div>
  );
}

不同的点也就是在这里对当前的numpages页进行了遍历。numPages是总页数,设置唯一标识key,也可以用index。

这里是我的一个简单使用,详解可看点击上方查看react-pdf插件地址的一些其他用法;


http://www.kler.cn/a/488810.html

相关文章:

  • H2数据库在单元测试中的应用
  • C++【深入底层,从零模拟实现string类】
  • 语音机器人外呼的缺点
  • 后端Java开发:第十二天
  • STL——二叉搜索树
  • 基于 Python 自动化接口测试(踩坑与实践)
  • Vue.js组件开发-实现滚动加载下一页
  • HOW - Form 表单 label 和 wrapper 对齐场景
  • 统信桌面常用运维命令
  • 【华为OD-E卷 - 服务失效判断 100分(python、java、c++、js、c)】
  • LeetCode 747. 至少是其他数字两倍的最大数
  • C++—14、C++ 中的指针最基础的原理
  • React 元素渲染
  • 苍穹外卖的微信支付和接单和催单提醒
  • 青少年编程与数学 02-006 前端开发框架VUE 16课题、组件基础
  • 初学stm32 --- ADC多通道采集
  • 鸿蒙原生应用如何才能拉起系统浏览器?
  • Linux 命令与日志查看实用指南
  • 详解Sonar与Jenkins 的集成使用!
  • 【C++】Muduo库
  • vivado 时钟指南
  • .gitignore记录
  • 前端全局水印, 拖拉拽图片 ,拽入等比压缩,上传服务器后,java 转base64 加水印,然后前端http预览,确认保存,拽出删除。
  • VS Code 可视化查看 C 调用链插件 C Relation
  • 腾讯云AI代码助手编程挑战赛-知识百科AI
  • Unity3D Huatuo热更环境安装与示例项目详解