[特殊字符] 超强 Web React版 PDF 阅读器!支持分页、缩放、旋转、全屏、懒加载、缩略图!

news2025/6/2 19:40:45

在现代 Web 项目中,PDF 浏览是一个常见需求:从政务公文到合同协议,PDF 文件无处不在。但很多方案要么体验不佳,要么集成复杂。今天,我给大家带来一个开箱即用、功能全面的 PDF 预览组件 —— [`PDFView`](https://www.npmjs.com/package/react-nexlif)!

预览地址 :https://nexlif.xiaoyaoai.fun/components/pdf-viewhttps://nexlif.xiaoyaoai.fun/components/pdf-view  

✨ 它基于 `react-pdf` 封装,支持分页浏览、放大缩小、旋转、缩略图导航、全屏模式,甚至懒加载优化大文件性能!

## 🔧 快速上手

### 安装组件

```bash
npm install react-nexlif
# 或者
yarn add react-nexlif

引入示例:一键预览 PDF!

import React, { useState } from 'react';
import { PDFView } from 'react-nexlif';

const App = () => {
  const [visible, setVisible] = useState(false);
  const fileUrl = 'https://www.gov.cn/zhengce/pdfFile/2023_PDF.pdf'; // 可替换为你的链接

  return (
    <div>
      <button onClick={() => setVisible(true)}>打开 PDF</button>
      {visible && (
        <PDFView
          file={fileUrl}
          onClose={() => setVisible(false)}
        />
      )}
    </div>
  );
};

export default App;

💡 功能全景

功能项描述
✅ 分页浏览支持上一页、下一页、跳转页面
🔍 缩放支持放大 / 缩小,适配不同显示尺寸
🔄 旋转功能向左 / 向右旋转每页 PDF(支持 90° 递增)
🖥️ 全屏模式Ctrl+F 一键全屏,沉浸式阅读
🎯 缩略图导航Ctrl+T 快速切换缩略图预览,点击即跳转
🧠 懒加载多页 PDF 仅加载可视区附近页面,大幅提升性能
⚙️ 自定义控制栏可配置每个按钮是否展示(关闭、缩放、旋转等)
🧩 错误提示文件不存在或格式异常会显示错误页面,避免白屏

🎮 进阶用法:懒加载+缩略图预览

import React, { useState, useRef, useEffect } from 'react';
import { PDFView } from 'react-nexlif';

const App = () => {
  const ref = useRef<HTMLDivElement>(null);
  const [fileUrl, setFileUrl] = useState<string | null>(null);

  useEffect(() => {
    setFileUrl('https://www.gov.cn/zhengce/pdfFile/2023_PDF.pdf');
  }, []);

  return (
    <div ref={ref} style={{ height: '100%', width: '100%' }}>
      <PDFView
        parentDom={ref.current}
        file={fileUrl}
        lazyLoad={true}
        width={650}
        lazyLoadConfig={{
          threshold: 400,
          pagesPerLoad: 4
        }}
        onClose={() => setFileUrl(null)}
      />
    </div>
  );
};

export default App;

⚙️ 全部 Props 一览

interface PDFViewProps {
  file?: string | null;
  parentDom?: HTMLDivElement | null;
  onClose?: () => void;
  operationConfig?: {
    showPage?: boolean;
    zoom?: boolean;
    rotate?: boolean;
    screenScale?: boolean;
    thumbnails?: boolean;
    close?: boolean;
  };
  width?: number;
  lazyLoad?: boolean;
  lazyLoadConfig?: {
    threshold?: number;
    pagesPerLoad?: number;
  };
}

🎨 样式自定义

可以自由定制 PDF 查看器样式(例如背景色、按钮栏、缩略图风格):

.view {
  background-color: #f5f5f5;
  padding: 20px;
}

.pageMain {
  border: 1px solid #e8e8e8;
  border-radius: 4px;
}

.thumbnail:hover {
  border-color: #1890ff;
}

🚧 注意事项

  1. 📂 跨域 PDF 文件需配置 CORS

  2. 🔍 建议使用懒加载应对大型 PDF

  3. 💬 按钮支持 ARIA 属性,键盘可操作,增强无障碍体验

  4. 🧪 已支持在现代浏览器(Chrome/Edge)运行


🔚 总结

如果你正在寻找一个轻量、可扩展、高性能的 PDF 浏览器组件,那么 PDFView 绝对值得你试试!

快速集成、易于配置、丰富功能,是中后台系统 PDF 查看功能的终极利器!

欢迎大家使用组件并 ⭐Star 支持作者!如果你喜欢这篇文章,记得 👍点赞 + ❤️收藏 + 💬评论交流!


📎 开源组件地址:react-nexlif - NPM

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2394103.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

wireshark分析国标rtp ps流

1.将抓到的tcp或者udp视频流使用decode as 转为rtp包 2.电话->RTP->RTP播放器 选择Export 里面的Payload 就可以导出原始PS流

【STM32+LAN9252+HAL库】EtherCAT从站搭建 保姆级教程

目录 一、生成协议栈及XML文件 二、使用stm32CuboMX配置外设 三、协议栈移植 鉴于本人对EtherCAT的掌握程度十分有限&#xff0c;这篇文章仅作为我搭建基础从站的过程记录不做更多讲解。本文内容主要为SPI模式的基础搭建&#xff0c;更多深入的学习资料和细节&#xff0c;大家…

【harbor】--基础使用

推送 不同的管理工具都有说明 以docker为例 # 第一步--打标签 docker tag SOURCE_IMAGE[:TAG] 192.168.121.201:801/haohao_fist/REPOSITORY[:TAG] # 第二步--推送 docker push 192.168.121.201:801/haohao_fist/REPOSITORY[:TAG]默认push推送为https push会失败 解决办法…

JAVA学习 DAY1 初识JAVA

本系列可作为JAVA学习系列的笔记&#xff0c;文中提到的一些练习的代码&#xff0c;小编会将代码复制下来&#xff0c;大家复制下来就可以练习了&#xff0c;方便大家学习。 点赞关注不迷路&#xff01;您的点赞、关注和收藏是对小编最大的支持和鼓励&#xff01; 系列文章目录…

Vue能启动但访问空白?并报”export ‘default’ (imported as ‘Vue’) was not found in ‘vue’

场景 如图&#xff0c;vue项目的node_modules下载顺利&#xff0c;启动也顺利&#xff0c;但是访问却为空白页面 虽然页面是空白&#xff0c;但是通过浏览器控制台可以看出并非简单的空白&#xff0c;确实有不兼容问题在里面 分析问题 从上图浏览器控制台可以看出&#xff0c…

Electron-vite【实战】MD 编辑器 -- 系统菜单(含菜单封装,新建文件,打开文件,打开文件夹,保存文件,退出系统)

最终效果 整体架构 src/main/index.ts import { createMenu } from ./menu在 const mainWindow 后 // 加载菜单createMenu(mainWindow)src/main/menu.ts import { BrowserWindow, Menu, MenuItem, MenuItemConstructorOptions, dialog, shell } from electron import fs from…

【Docker系列】Docker 容器内安装`ps`命令

博客目录 一、为什么需要在 Docker 容器中安装ps命令二、不同 Linux 发行版的安装方法1. Alpine Linux 镜像的安装方法2. Debian/Ubuntu 镜像的安装方法3. CentOS/RHEL 镜像的安装方法 三、验证安装与基本使用四、永久解决方案&#xff1a;修改 Dockerfile1. Alpine 基础镜像的…

华为OD机试真题——生成哈夫曼树(2025A卷:100分)Java/python/JavaScript/C/C++/GO六种最佳实现

2025 A卷 100分 题型 本文涵盖详细的问题分析、解题思路、代码实现、代码详解、测试用例以及综合分析; 并提供Java、python、JavaScript、C++、C语言、GO六种语言的最佳实现方式! 本文收录于专栏:《2025华为OD真题目录+全流程解析/备考攻略/经验分享》 华为OD机试真题《生成…

大厂前端研发岗位设计的30道Webpack面试题及解析

文章目录 一、基础核心二、配置进阶三、性能优化四、Loader原理五、Plugin机制六、高级应用七、工程化实战八、原理深挖九、异常处理十、综合场景一、基础核心 Webpack的核心概念是什么? 解析:入口(entry)、输出(output)、加载器(loader)、插件(plugins)、模式(mode)。Loader…

Oracle中EXISTS NOT EXISTS的使用

目录 1.IN与EXISTS EXISTS用法总结 2.NOT IN与NOT EXISTS 3.not in 中 null的用法 4.EXISTS和IN的区别 (面试常问) 1.IN与EXISTS 示例&#xff1a;在 DEPT 表中找出在 EMP 表中存在的部门编号&#xff1b; 方法一&#xff1a;使用in select DEPTNO from DEPT where D…

01.认识Kubernetes

什么是Kubernets 套用官方文档对Kubernetes的定义&#xff0c;翻译成中文的意思是&#xff1a; Kubernetes&#xff0c;也称为k8&#xff0c;是一个用于自动化部署、扩展和管理容器化应用程序的开源系统。 它将组成应用程序的容器分组为逻辑单元&#xff0c;以便于管理和发现…

【PostgreSQL 02】PostgreSQL数据类型革命:JSON、数组与地理信息让你的应用飞起来

PostgreSQL数据类型革命&#xff1a;JSON、数组与地理信息让你的应用飞起来 关键词 PostgreSQL高级数据类型, JSONB, 数组类型, PostGIS, 地理信息系统, NoSQL, 文档数据库, 空间数据, 数据库设计, PostgreSQL扩展 摘要 PostgreSQL的高级数据类型是其区别于传统关系数据库的核心…

Acrobat DC v25.001 最新专业版已破,像word一样编辑PDF!

在数字化时代&#xff0c;PDF文件以其稳定性和通用性成为了文档交流和存储的热门选择。无论是阅读、编辑、转换还是转曲&#xff0c;大家对PDF文件的操作需求日益增加。因此&#xff0c;一款出色的PDF处理软件不仅要满足多样化的需求&#xff0c;还要通过简洁的界面和强大的功能…

桥 接 模 式

在玩游戏的时候我们常常会遇到这样的机制&#xff1a;我们可以随意选择不同的角色&#xff0c;搭配不同的武器。这时只有一个抽象上下文的策略模式就不那么适用了&#xff0c;因为一旦我们使用继承的方式&#xff0c;武器和角色总有一方会变得难以扩展。这时&#xff0c;我们就…

基于 Flink+Paimon+Hologres 搭建淘天集团湖仓一体数据链路

摘要&#xff1a;本文整理自淘天集团高级数据开发工程师朱奥老师在 Flink Forward Asia 2024 流式湖仓论坛的分享。内容主要为以下五部分&#xff1a; 1、项目背景 2、核心策略 3、解决方案 4、项目价值 5、未来计划 01、项目背景 1.1 当前实时数仓架构 当前的淘天实时架构是从…

多杆合一驱动城市空间治理智慧化

引言&#xff1a;城市“杆林困境”与智慧化破局 走在现代城市的街道上&#xff0c;路灯、监控、交通信号灯、5G基站等杆体林立&#xff0c;不仅侵占公共空间&#xff0c;更暴露了城市治理的碎片化问题。如何让这些“沉默的钢铁”升级为城市的“智慧神经元”&#xff1f;答案在…

用QT写一个车速表

主要包含以下绘制步骤&#xff1a; 1、绘制画布&#xff1a; /** 绘制画布 */ void Widget::initCanvas(QPainter &painter) {//消除锯齿painter.setRenderHint(QPainter::Antialiasing,true);//设置底色painter.setBrush(QColor(0,0,0));painter.drawRect(rect());//平移…

数控技术应用理实一体化平台VR实训系统

::产品概述:: 目前我国本科类院校学生普遍存在的问题就是缺少对实际工作的了解&#xff0c;一直在学习相关专业的理论知识&#xff0c;对社会的相关企业的用人情况不了解。这也就直接导致了毕业的学生和社会上的用人单位需求有点脱节&#xff0c;这也是由于我国的现行本科教育侧…

C# 将HTML文档、HTML字符串转换为图片

在.NET开发中&#xff0c;将HTML内容转换为图片的需求广泛存在于报告生成、邮件内容存档、网页快照等场景。Free Spire.Doc for .NET作为一款免费的专业文档处理库&#xff0c;无需Microsoft Word依赖&#xff0c;即可轻松实现这一功能。本文将深入解析HTML文档和字符串转图片两…

界面控件DevExpress WinForms v24.2新版亮点:富文本编辑器功能全新升级

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…