
JavaGuide
Java 后端开发与面试学习指南,覆盖 Java 基础、并发、JVM、MySQL、Redis、分布式等核心知识。
在 React 应用中轻松显示 PDF 文件。
React-PDF 是一个面向 React 生态的 PDF 渲染组件库,核心目标是让开发者在 React 应用中无需引入额外插件或依赖浏览器原生 PDF 阅读器,即可完成 PDF 文件的展示与基础交互。项目托管于 projects.wojtekmaj.pl/react-pdf/,适用于文档预览、合同展示、报告内嵌等常见业务场景。
React-PDF 底层采用 Mozilla 维护的 PDF.js 进行文档解析,这意味着它继承了 PDF.js 对主流 PDF 规范(包括加密文档、内嵌字体、矢量图形等)的兼容能力。组件本身只负责 React 侧的封装与渲染调度,解析逻辑与浏览器端 PDF.js 保持同步演进。
该库提供三个核心组件,职责划分明确:
| 组件 | 作用 |
|---|---|
<Document> |
加载 PDF 文件,管理文档级状态(总页数、加载进度、错误) |
<Page> |
渲染指定页码的页面内容,支持缩放与旋转 |
<Outline> |
读取并展示 PDF 书签大纲,支持点击跳转 |
这种分层设计允许开发者按需组合,不必加载整个阅读器界面。
React-PDF 支持两种渲染后端:
<canvas> 元素,兼容性好,适合复杂排版与高保真场景。renderMode="svg" 启用,输出矢量 DOM 节点,便于对文本层做选择、复制或自定义样式覆盖,但性能开销高于 Canvas。此外,组件支持懒加载(仅渲染可视区域附近的页面)、自定义加载态与错误态,便于集成到长文档列表中。
import { Document, Page } from 'react-pdf';
function PDFViewer({ file }) {
return (
<Document file={file}>
<Page pageNumber={1} />
</Document>
);
}
file 属性接受 URL、本地文件对象或 base64 数据,满足不同来源的输入需求。对于需要页码导航的场景,可结合 onDocumentLoadSuccess 回调获取总页数后动态渲染。
Canvas、Worker),在 Node.js 环境中直接渲染会报错。SSR 项目中需通过动态导入或 useEffect 延迟加载。pdfjs.GlobalWorkerOptions.workerSrc 指向 CDN 或本地 worker 文件。react-pdf/dist/Page/TextLayer.css 和 AnnotationLayer.css,否则可能出现定位偏移。React-PDF 适合需要在 React 界面中嵌入轻量级 PDF 展示能力的项目。它没有提供完整阅读器的工具栏、缩略图侧栏等功能,但通过简洁的组件接口和稳定的解析内核,将“显示 PDF”这一高频需求降到了较低的集成成本。若业务场景要求批注、表单填写或复杂版面编辑,则需要评估在其基础上二次开发的投入,或考虑更重量级的专用方案。







