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

如何在Flask应用中提取用户上传PDF文件的文本

基于内存流的Flask上传PDF文本提取方案

目前主流的Python PDF处理库均原生支持类文件对象输入,无需传入实际磁盘路径,可直接对接Flask上传生成的文件对象或BytesIO内存流,完全不需要将文件存储到服务端磁盘,从根源避免文件冲突问题。以下是两种常用实现方案:

方案1:使用PyPDF2实现(轻量通用)

适合常规原生PDF的文本提取,依赖轻量,部署简单。

  1. 安装依赖
    pip install pypdf2
  2. 示例代码
from flask import Flask, request
from PyPDF2 import PdfReader
from io import BytesIO

app = Flask(__name__)

@app.route('/pdf-extract', methods=['POST'])
def extract_pdf():
    # 直接获取上传的PDF文件对象,无需落盘
    upload_pdf = request.files.get('pdf_file')
    # 转换为BytesIO内存流(部分场景下直接传upload_pdf也可运行,显式转换兼容性更强)
    pdf_stream = BytesIO(upload_pdf.read())
    
    # 从内存流读取PDF并提取文本
    reader = PdfReader(pdf_stream)
    full_text = ""
    for page in reader.pages:
        full_text += page.extract_text() + "\n"
    
    return {"extracted_text": full_text}

方案2:使用pdfplumber实现(精度更高)

对复杂排版、表格类PDF的提取效果优于PyPDF2,同样支持内存流输入。

  1. 安装依赖
    pip install pdfplumber
  2. 示例代码
from flask import Flask, request
import pdfplumber
from io import BytesIO

app = Flask(__name__)

@app.route('/pdf-extract', methods=['POST'])
def extract_pdf():
    upload_pdf = request.files.get('pdf_file')
    pdf_stream = BytesIO(upload_pdf.read())
    
    full_text = ""
    with pdfplumber.open(pdf_stream) as pdf:
        for page in pdf.pages:
            # 如需提取表格可替换为 page.extract_table()
            full_text += page.extract_text() + "\n"
    
    return {"extracted_text": full_text}

注意事项

  • 无需额外写入磁盘,所有操作在内存中完成,完全避免多请求下的文件命名冲突问题
  • 请求处理完成后内存流会被自动回收,无冗余存储开销
  • 若上传的是扫描件类的图像PDF,可基于同一内存流接入pytesseract等OCR工具实现文本提取,仍无需落盘

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:09:03