一些比较好的参考文献
文件上传、分页下载功能
设想一个简单的功能,用户在界面上上传一个PDF文件,应用经过一系列的处理,把这个PDF的每一页都转成了png图片,并且打包压缩成一个压缩包,提供给用户下载。
这个功能可以很方便的使用gradio来实现。
python
import gradio as gr
import fitz # PyMuPDF
import os
import zipfile
def pdf_to_images(pdf_file):
# 打开PDF文件
doc = fitz.open(pdf_file)
images = []
for page_id in range(doc.page_count):
page = doc[page_id]
# 将页面转换为PNG图片
pix = page.get_pixmap()
img_bytes = pix.tobytes("png")
images.append((img_bytes, f"{page_id+1}.png"))
# 关闭PDF文档
doc.close()
# 创建一个临时目录来存储图片
temp_dir = "temp_images"
os.makedirs(temp_dir, exist_ok=True)
# 保存图片到临时目录
for img_bytes, img_name in images:
with open(os.path.join(temp_dir, img_name), "wb") as f:
f.write(img_bytes)
# 创建压缩包
zip_path = "images.zip"
with zipfile.ZipFile(zip_path, "w") as zipf:
for img_name in os.listdir(temp_dir):
zipf.write(os.path.join(temp_dir, img_name), img_name)
# 删除临时目录
for img_name in os.listdir(temp_dir):
os.remove(os.path.join(temp_dir, img_name))
os.rmdir(temp_dir)
return zip_path
def main():
iface = gr.Interface(
fn=pdf_to_images,
inputs=gr.File(label="Upload PDF File"),
outputs=gr.File(label="Download ZIP File"),
title="PDF to Images Converter",
description="Upload a PDF file and download a ZIP file containing all the pages as images."
)
iface.launch()
if __name__ == "__main__":
main()
作者:大橙子打游戏
链接:https://juejin.cn/post/7382480523846467595
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。