You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular前端如何提取PDF文本并将信息存入对象/变量

Angular实现PDF上传并提取结构化信息展示

核心思路

通过前端解析PDF提取文本,再根据目标文档的格式规则,将文本转化为结构化数据(如对象)后展示,无需呈现完整PDF文件。

步骤实现

1. 安装依赖

使用pdfjs-dist库处理PDF解析,执行安装命令:

npm install pdfjs-dist @types/pdfjs-dist

2. 编写文件上传组件

在组件模板中添加PDF专属上传控件,搭配信息展示区域:

<input type="file" accept=".pdf" (change)="handleFileUpload($event)">
<div *ngIf="extractedData" class="info-container">
  <h3>提取到的信息</h3>
  <p><strong>姓名:</strong>{{ extractedData.name }}</p>
  <p><strong>地址:</strong>{{ extractedData.address }}</p>
  <!-- 按需添加其他字段展示 -->
</div>

3. 实现PDF文本提取与结构化解析

在组件类中编写完整处理逻辑:

import { Component } from '@angular/core';
import * as pdfjsLib from 'pdfjs-dist';
import { getDocument } from 'pdfjs-dist';

// 配置PDF Worker路径
pdfjsLib.GlobalWorkerOptions.workerSrc = '//cdnjs.cloudflare.com/ajax/libs/pdf.js/3.11.174/pdf.worker.min.js';

@Component({
  selector: 'app-pdf-extractor',
  templateUrl: './pdf-extractor.component.html',
  styleUrls: ['./pdf-extractor.component.css']
})
export class PdfExtractorComponent {
  extractedData: any;

  async handleFileUpload(event: Event) {
    const file = (event.target as HTMLInputElement).files?.[0];
    if (!file || file.type !== 'application/pdf') return;

    const fileReader = new FileReader();
    fileReader.onload = async () => {
      const arrayBuffer = fileReader.result as ArrayBuffer;
      const pdf = await getDocument({ data: arrayBuffer }).promise;
      let fullText = '';

      // 逐页读取并拼接PDF文本
      for (let i = 1; i <= pdf.numPages; i++) {
        const page = await pdf.getPage(i);
        const textContent = await page.getTextContent();
        fullText += textContent.items.map(item => (item as any).str).join(' ');
      }

      // 将纯文本解析为结构化数据
      this.extractedData = this.parseTargetData(fullText);
    };

    fileReader.readAsArrayBuffer(file);
  }

  // 针对目标PDF格式编写解析规则(示例为身份证类文档)
  parseTargetData(text: string) {
    const result: any = {};
    
    // 匹配姓名(需根据实际文本排版调整正则)
    const nameMatch = text.match(/Nombre:\s*(.+?)\s+/);
    if (nameMatch) result.name = nameMatch[1];

    // 匹配地址(同理调整正则适配实际格式)
    const addressMatch = text.match(/Dirección:\s*(.+?)\s+/);
    if (addressMatch) result.address = addressMatch[1];

    // 按需添加身份证号、出生日期等字段的正则匹配
    return result;
  }
}

4. 关键注意点

  • 正则表达式需完全匹配目标PDF的文本排版,不同格式的PDF要对应调整匹配规则
  • 若上传的是扫描版PDF(图片格式),前端无法直接提取文本,需结合OCR工具(如Tesseract.js)处理
  • 大文件解析可能存在性能瓶颈,建议添加加载提示并限制上传文件大小

内容的提问来源于stack exchange,提问作者Erik Stoupignan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:35:18