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

如何使用Python直接将PDF下载至内存并通过PyPDF2的PdfReader读取

无落地读取PDF:用requests+PyPDF2实现内存级处理

核心需求就是用requests拉取PDF文件,全程不保存到硬盘,直接用PyPDF2解析。关键思路是利用requests响应的类文件字节流对象直接喂给PyPDF2的PdfReader,完全绕开本地存储环节。

实现代码

from requests import get
from PyPDF2 import PdfReader

class ServerClient:
    def __init__(self, work_url, ticket):
        self.workUrl = work_url
        self.ticket = ticket

    def readFile(self, id):
        # 发起请求获取PDF字节流
        req = get(f'{self.workUrl}{id}/content', headers={'OTCSTicket': self.ticket})
        if req.status_code == 200:
            # 返回响应的原始字节流对象,PyPDF2可直接读取
            return req.raw
        else:
            raise Exception(f'请求失败,错误码 {req.status_code}')

# 使用示例
server = ServerClient("你的服务地址前缀", "你的OTCSTicket认证凭证")
pdf_stream = server.readFile("目标PDF的ID")
reader = PdfReader(pdf_stream)

# 验证读取成功:打印PDF总页数
print(f"该PDF共有 {len(reader.pages)} 页")

关键细节说明

  • req.raw 是requests返回的原始字节流对象,实现了类文件接口(支持read()方法),刚好匹配PyPDF2的PdfReader对输入的要求,不需要额外格式转换。
  • 代码里的OTCSTicket是示例服务的认证头,实际使用时替换成你目标服务要求的认证参数即可。
  • 状态码判断必不可少,避免把错误响应(比如404、500)当成PDF流传入PdfReader,导致解析报错。

额外提示

如果处理大PDF,这种流式读取的方式比一次性加载整个PDF到内存更高效;后续要提取文本、操作页面等,直接基于reader对象处理就行,全程都在内存中完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:22:12