From fa778d5360c932e7804bcd646ee596fe5b4e4d27 Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 25 Feb 2026 16:11:11 -0800 Subject: [PATCH] bytesio to create zip file from png bytes, download it --- app.py | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/app.py b/app.py index 15bea9e..75309c8 100644 --- a/app.py +++ b/app.py @@ -73,18 +73,36 @@ def index(): stylesheets=[CSS(string=read_css_file())] ) doc = fitz.open(stream=pdf_data, filetype="pdf") - for page_index in range(len(doc)): - page = doc.load_page(page_index) - pix = page.get_pixmap(dpi=240) - # Convert the rendered image into PNG bytes - png_bytes = pix.tobytes("png") + memory_file = io.BytesIO() - # You can now send png_bytes to a response or store it in a DB - print(f"Page {page_index} is {len(png_bytes)} bytes.") + # Create the zip file in the buffer + with zipfile.ZipFile(memory_file, 'w', zipfile.ZIP_DEFLATED) as zf: + for page_index in range(len(doc)): + page = doc.load_page(page_index) + pix = page.get_pixmap(dpi=240) + + # Convert the rendered image into PNG bytes + png_bytes = pix.tobytes("png") + + # You can now send png_bytes to a response or store it in a DB + print(f"Page {page_index} is {len(png_bytes)} bytes.") + zf.writestr("SLIDES/{:04d}.png".format(page_index), png_bytes) doc.close() + + # Crucial step: rewind the buffer position to the beginning so the file can be read for download + memory_file.seek(0) + + # Send the in-memory file using Flask's send_file + return send_file( + memory_file, + mimetype='application/zip', + as_attachment=True, + download_name='downloaded_files.zip' # Use download_name for modern Flask versions + ) + print(f"Reference: {reference}, Version: {version}, Text: {verse_text}, Error: {error}") return render_template('index.html', reference=reference, version=version, verse_html=verse_html, error=error)