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

如何将fitz.Page对象转为字节流以上传至Azure Blob存储?

将fitz.Page对象转为字节流(无本地存储实现)

要实现单个fitz.Page对象转字节流且不涉及本地存储,可以通过创建内存中的临时PDF文档来完成,具体实现如下:

完整实现代码

import fitz
import io

def store_fitz_page_as_bytes(fitz_page: fitz.fitz.Page)->bytes:
    '''
    将fitz_page转为字节流并返回的逻辑。
    - 操作无本地存储参与
    - 无需使用fitz_page.select([0]),支持批量处理所有页面
    '''
    # 创建空的临时PDF文档
    temp_doc = fitz.open()
    # 从原文档中复制当前页面到临时文档
    temp_doc.insert_pdf(fitz_page.parent, from_page=fitz_page.number, to_page=fitz_page.number)
    # 用BytesIO在内存中存储文档内容
    output_buffer = io.BytesIO()
    temp_doc.save(output_buffer)
    # 获取字节流数据
    pdf_bytes = output_buffer.getvalue()
    # 清理资源
    temp_doc.close()
    output_buffer.close()
    return pdf_bytes

def upload_bytes_to_azure_blob(pdf_bytes):
    '''
    此函数已实现,无需讨论,仅作用途说明
    '''

# 读取PDF文档
fitz_doc = fitz.open("test.pdf")

# 遍历所有页面逐个处理
for page_num in range(fitz_doc.page_count):
    fitz_page = fitz_doc[page_num]
    # 转换为字节流
    pdf_bytes = store_fitz_page_as_bytes(fitz_page)
    # 上传至Blob存储
    upload_bytes_to_azure_blob(pdf_bytes) 

实现说明

  • 核心逻辑:借助临时内存文档承载单个页面,通过insert_pdf从原文档复制指定页面,避免了select方法的限制。
  • 全程通过io.BytesIO在内存中完成保存,完全不涉及本地文件操作。
  • 支持批量遍历所有页面,逐个转换上传,适配你的批量处理需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:55:07