如何使用Fitz无需本地下载编辑Azure Blob Storage中的PDF
从Azure Blob Storage读取PDF并添加高亮后存回
需求说明
我有一份存储在Azure Blob Storage中的PDF文件,需要对其中部分内容添加高亮标注,之后将修改后的新PDF文件存回Azure Blob Storage。此前尝试的伪代码无法直接对接Blob存储,需解决读取和写入的具体实现问题。
解决方案
结合PyMuPDF(fitz)处理PDF编辑,以及Azure Blob Storage SDK完成文件的读取与上传,通过字节流实现本地无文件落地的操作。
步骤1:安装依赖
需要安装两个核心库:
pip install pymupdf azure-storage-blob
步骤2:完整实现代码
import fitz from azure.storage.blob import BlobServiceClient def edit_pdf_in_blob(connection_string, container_name, source_blob_name, target_blob_name): # 初始化Blob服务客户端 blob_service_client = BlobServiceClient.from_connection_string(connection_string) container_client = blob_service_client.get_container_client(container_name) # 1. 从Blob Storage读取PDF为字节流 source_blob_client = container_client.get_blob_client(source_blob_name) pdf_bytes = source_blob_client.download_blob().readall() # 加载PDF到PyMuPDF文档对象 doc = fitz.open("pdf", pdf_bytes) # 2. 编辑PDF(替换为你已有的高亮逻辑) # 示例高亮代码(可按需修改): page = doc[0] # 获取第一页 target_text = "需要高亮的目标文本" text_positions = page.search_for(target_text) for pos in text_positions: page.add_highlight_annot(pos) # 3. 将修改后的PDF转为字节流 output_bytes = doc.tobytes() doc.close() # 4. 上传字节流到Blob Storage target_blob_client = container_client.get_blob_client(target_blob_name) target_blob_client.upload_blob(output_bytes, overwrite=True) # 调用示例 if __name__ == "__main__": # 替换为你的Azure Blob配置信息 CONNECTION_STRING = "你的Azure Blob连接字符串" CONTAINER_NAME = "你的容器名称" SOURCE_BLOB_NAME = "原始PDF文件名.pdf" TARGET_BLOB_NAME = "修改后的PDF文件名.pdf" edit_pdf_in_blob(CONNECTION_STRING, CONTAINER_NAME, SOURCE_BLOB_NAME, TARGET_BLOB_NAME)
关键说明
- 读取Blob:通过
download_blob().readall()获取PDF字节数据,直接传入fitz.open()(指定格式为"pdf"),无需下载到本地文件。 - 编辑操作:保留你已有的高亮代码逻辑即可,PyMuPDF的文档对象操作不受数据源影响。
- 保存回Blob:使用
doc.tobytes()将修改后的文档转为字节流,再通过upload_blob()上传到目标Blob,overwrite=True支持覆盖已存在的文件。
内容的提问来源于stack exchange,提问作者newbie101
相关产品推荐
相关产品推荐

