当前位置:首页 > 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:

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文件

分页加载优化性能:

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:

react项目实现导入pdf

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
分享给朋友:

相关文章

react性能如何

react性能如何

React 性能特点 React 通过虚拟 DOM(Virtual DOM)和高效的 diff 算法优化性能。虚拟 DOM 减少了直接操作真实 DOM 的开销,仅在必要时更新变化的部分。React 的…

vue项目如何实现

vue项目如何实现

安装Vue.js 通过npm或yarn安装Vue.js。确保Node.js环境已配置完成。 npm install vue # 或 yarn add vue 创建Vue项目 使用Vue CLI工具快…

react项目如何启动

react项目如何启动

启动React项目的步骤 确保已安装Node.js(建议版本12以上)和npm/yarn。可通过以下命令检查版本: node -v npm -v 全局安装create-react-app脚手架工具(…

react如何滚动scroll

react如何滚动scroll

React 实现滚动的方法 使用 useRef 和 scrollTo 方法 通过 useRef 获取 DOM 元素的引用,调用 scrollTo 方法实现滚动。 import React, { us…

react如何创建框架

react如何创建框架

React 创建框架的方法 React 本身是一个用于构建用户界面的 JavaScript 库,但可以通过多种方式创建框架或项目结构。以下是几种常见的方法: 使用 Create React App…

如何设计react组件

如何设计react组件

设计 React 组件的核心原则 React 组件的设计需要遵循高内聚、低耦合的原则,确保组件功能独立且易于维护。组件的设计可以分为展示组件和容器组件两类,展示组件负责 UI 渲染,容器组件负责逻辑处…