如何将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
相关产品推荐
相关产品推荐

