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

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项目实现导入pdf

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

相关文章

react native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: node…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

如何记忆react

如何记忆react

理解核心概念 React的核心概念包括组件、状态(state)、属性(props)、生命周期方法(类组件)和钩子(函数组件)。掌握这些基础概念是记忆React的关键。组件是React应用的构建块,分为…

react如何查

react如何查

React 查询方法 React 提供了多种查询 DOM 元素的方式,以下是几种常见的方法: 使用 ref 通过 useRef 钩子可以获取 DOM 节点的引用,适用于直接操作 DOM 的场景。…

react架构如何

react架构如何

React 架构核心概念 React 的架构围绕组件化、虚拟 DOM 和单向数据流设计。组件是构建用户界面的独立模块,分为函数组件和类组件。虚拟 DOM 通过高效的 Diff 算法减少直接操作真实 D…

react如何卸载

react如何卸载

卸载 React 项目或依赖 如果需要完全卸载 React 项目或相关依赖,可以按照以下步骤操作: 删除项目文件夹 直接删除整个项目文件夹是最彻底的方式。确保已备份重要代码或配置文件。 卸载全…