当前位置:首页 > React

react项目实现导入pdf

2026-01-27 10:41:55React

在React项目中实现PDF导入功能

使用react-pdf库

安装react-pdf库:

npm install react-pdf

基本使用示例:

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

function PDFViewer() {
  const [numPages, setNumPages] = useState(null);
  const [pageNumber, setPageNumber] = useState(1);

  function onDocumentLoadSuccess({ numPages }) {
    setNumPages(numPages);
  }

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

实现PDF文件上传

创建文件上传组件:

function PDFUploader() {
  const [file, setFile] = useState(null);

  const onFileChange = (event) => {
    setFile(event.target.files[0]);
  };

  return (
    <div>
      <input type="file" onChange={onFileChange} accept=".pdf" />
      {file && (
        <Document file={file}>
          <Page pageNumber={1} />
        </Document>
      )}
    </div>
  );
}

使用pdf-lib进行高级操作

安装pdf-lib:

react项目实现导入pdf

npm install pdf-lib

提取PDF文本内容:

import { PDFDocument } from 'pdf-lib';

async function extractText(pdfBytes) {
  const pdfDoc = await PDFDocument.load(pdfBytes);
  const pages = pdfDoc.getPages();
  let textContent = '';

  for (const page of pages) {
    const text = await page.getTextContent();
    textContent += text.items.map(item => item.str).join(' ');
  }

  return textContent;
}

处理大型PDF文件

分页加载优化性能:

react项目实现导入pdf

function PDFViewer() {
  const [pages, setPages] = useState([]);
  const [currentPage, setCurrentPage] = useState(1);

  const loadPage = async (pageNum) => {
    const newPage = (
      <Page 
        key={pageNum} 
        pageNumber={pageNum} 
        loading="Loading page..."
      />
    );
    setPages(prev => [...prev, newPage]);
  };

  useEffect(() => {
    loadPage(currentPage);
  }, [currentPage]);

  return (
    <div>
      <Document file="large.pdf">
        {pages}
      </Document>
      <button onClick={() => setCurrentPage(p => p + 1)}>
        Load Next Page
      </button>
    </div>
  );
}

自定义PDF渲染样式

调整页面样式:

<Page 
  pageNumber={1}
  width={600}
  renderTextLayer={false}
  renderAnnotationLayer={false}
  customTextRenderer={(textItem) => (
    <span style={{ color: 'red' }}>
      {textItem.str}
    </span>
  )}
/>

服务器端PDF处理

使用Node.js后端处理PDF:

const express = require('express');
const multer = require('multer');
const pdf = require('pdf-parse');

const app = express();
const upload = multer({ dest: 'uploads/' });

app.post('/upload', upload.single('pdf'), async (req, res) => {
  const dataBuffer = fs.readFileSync(req.file.path);
  const data = await pdf(dataBuffer);

  res.json({
    text: data.text,
    numPages: data.numpages
  });
});

前端调用API:

async function uploadPDF(file) {
  const formData = new FormData();
  formData.append('pdf', file);

  const response = await fetch('/upload', {
    method: 'POST',
    body: formData
  });

  return await response.json();
}

标签: 项目react
分享给朋友:

相关文章

vue实现项目依赖

vue实现项目依赖

Vue 项目依赖的实现方法 使用 npm 或 yarn 安装依赖 通过 npm 或 yarn 安装项目所需的依赖包。在项目根目录下运行以下命令安装 Vue 及相关库: npm install vue…

vue 实现的项目

vue 实现的项目

Vue 实现的项目类型 Vue.js 是一个渐进式 JavaScript 框架,适用于构建各种规模的项目。以下是一些常见的 Vue 实现项目类型: 单页应用 (SPA) Vue 非常适合构建单页应用…

react如何部署

react如何部署

部署 React 应用的常见方法 使用静态服务器部署 React 应用在构建后会生成静态文件,可以直接通过静态服务器部署。常用的静态服务器包括 Nginx、Apache 等。 运行构建命令生成静态文…

vue ui实现创建vue项目

vue ui实现创建vue项目

使用 Vue UI 创建 Vue 项目的步骤 Vue CLI 提供了一个图形化界面(Vue UI)来创建和管理 Vue 项目。以下是详细的操作步骤: 安装 Vue CLI 确保已安装 Node.js…

react如何启动

react如何启动

启动 React 项目的步骤 确保已安装 Node.js React 需要 Node.js 环境运行,建议安装最新稳定版(LTS)。可通过以下命令检查是否已安装: node -v npm -v…

react 如何精通

react 如何精通

掌握核心概念 深入理解React的基础概念,包括组件(函数组件与类组件)、状态(useState)、生命周期(useEffect)、Props传递、虚拟DOM与Diff算法。通过官方文档或《React…