我正在try 加载我的本地存储的PDF文件,然后在没有任何后端的React.js中提取内容.

我试图在谷歌上找到类似的模块,但还没有找到合适的模块. 有很多解析PDF的 node 模块,我可以在后台提取PDF的内容,但我不确定我们是否可以在Web浏览器中使用它.

推荐答案

要在React.js应用程序中提取PDF内容,可以使用pdfjs-dist库,它提供了处理PDF文件的功能.下面是一个如何实现这一点的例子:

  1. 安装所需的程序包: 首先使用NPM或Yarn 安装pdfjs-dist包:

    npm install pdfjs-dist
    
  2. 在组件中导入所需的模块:

    import { Document, Page } from 'react-pdf/dist/esm/entry.webpack';
    import pdfjs from 'pdfjs-dist';
    
  3. 配置PDF.js库: 在加载PDF文件之前,您需要通过设置指向Worker文件的正确路径来配置pdfjs库.您可以在要处理PDF文件的组件中执行此操作:

    pdfjs.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjs.version}/pdf.worker.js`;
    
  4. 从PDF加载和提取内容: 在您的组件中,您可以加载PDF文件并提取其内容.下面是一个使用函数组件和挂钩的示例:

    import React, { useState } from 'react';
    
    const PdfExtractor = () => {
      const [numPages, setNumPages] = useState(null);
      const [pdfText, setPdfText] = useState('');
    
      const onDocumentLoadSuccess = ({ numPages }) => {
        setNumPages(numPages);
    
        // Extract text from each page
        const textPromises = [];
        for (let i = 1; i <= numPages; i++) {
          textPromises.push(
            pdfjs.getDocument({ url: 'path/to/pdf/file.pdf' })
              .then((pdf) => pdf.getPage(i))
              .then((page) => page.getTextContent())
              .then((textContent) => {
                const pageText = textContent.items.map((item) => item.str).join(' ');
                return pageText;
              })
          );
        }
    
        Promise.all(textPromises)
          .then((pageTexts) => {
            const extractedText = pageTexts.join(' ');
            setPdfText(extractedText);
          })
          .catch((error) => console.error('Failed to extract PDF text:', error));
      };
    
      return (
        <div>
          <Document
            file="path/to/pdf/file.pdf"
            onLoadSuccess={onDocumentLoadSuccess}
          >
            {Array.from(new Array(numPages), (el, index) => (
              <Page key={`page_${index + 1}`} pageNumber={index + 1} />
            ))}
          </Document>
          <div>{pdfText}</div>
        </div>
      );
    };
    
    export default PdfExtractor;
    

    在上面的示例中,用您的PDF文件的实际路径或URL替换'path/to/pdf/file.pdf'.

    当成功加载PDF时,将调用onDocumentLoadSuccess函数.它从PDF的每一页提取文本内容并将它们连接在一起.

    提取的文本存储在pdfText状态变量中,该变量可以在组件中呈现或根据需要使用.

    react-pdf中的Document组件用于呈现PDF页面,Page组件表示每个单独的页面.

通过遵循以下步骤,您可以使用pdfjs-dist库在React.js应用程序中提取PDF内容.

最新情况:

要允许使用<input>组件 Select 文件,您可以执行以下操作:

import { useState } from 'react';
import { PDFDocument } from 'pdfjs-dist';

function YourComponent() {
  const [pdfContent, setPdfContent] = useState('');

  const handleFileChange = async (event) => {
    const file = event.target.files[0];
    const reader = new FileReader();

    reader.onload = async (e) => {
      const contents = e.target.result;
      const pdf = await PDFDocument.load(contents);
      const pages = pdf.getPages();
      let extractedText = '';

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

      setPdfContent(extractedText);
    };

    reader.readAsArrayBuffer(file);
  };

  return (
    <div>
      <input type="file" onChange={handleFileChange} />
      <div>{pdfContent}</div>
    </div>
  );
}

export default YourComponent;

Reactjs相关问答推荐

无法覆盖MUI工具栏上的左右填充,除非使用!重要

从`redux—thunk`导入thunk `在stackblitz中不起作用

在Reaction中测试条件组件

根据另一个Select中的选定值更改Select中的值

同一文件中前端和后端的Nginx配置

在Reaction中的第一次装载时,Use Effect返回空数组

MUI 日期 Select 器 - 最小日期混乱

如何使用react-router-dom保护嵌套在受保护路由中的嵌套路由?

Yup.number().integer() 不将 1.0 视为小数,如何解决这个问题?

Mui Datepicker 设置了错误的日期

React设置上下文并进行导航

部署到github pages时请求路径错误

如何实现 redux 工具包来注册用户?

我正在try 使用 cypress 测试我的下拉列表,它 Select 值但不提交它们(手动工作)

.filter() 函数在删除函数中创建循环 - React

react 路由路由加载器不适用于嵌套组件

如何用实际的br标签替换axios响应中的br标签?

RTK 查询 POST 方法不会改变数据

我可以在类组件中使用 useState 挂钩吗?

根据计算 ReactJs 更新输入字段