Spaces:
Running
Running
from flask import Flask, send_file, jsonify | |
import fitz # PyMuPDF pour manipuler le PDF | |
import tempfile | |
import os | |
app = Flask(__name__) | |
# Chemin vers le PDF source | |
PDF_FILE = "static/pdf/large_file.pdf" | |
# Fonction pour générer une image temporaire d'une page du PDF | |
def generate_temp_image(page_number, dpi): | |
try: | |
# Ouvre le PDF | |
with fitz.open(PDF_FILE) as doc: | |
# Vérifie que le numéro de page est valide | |
if page_number < 1 or page_number > len(doc): | |
raise ValueError(f"Numéro de page invalide : {page_number}") | |
# Extrait la page et génère une image | |
page = doc[page_number - 1] | |
pixmap = page.get_pixmap(dpi=dpi) | |
# Crée un fichier temporaire pour stocker l'image | |
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".jpg") | |
pixmap.save(temp_file.name) | |
return temp_file.name | |
except Exception as e: | |
raise RuntimeError(f"Erreur lors de la génération de l'image : {e}") | |
# Endpoint pour récupérer une image basse résolution | |
def get_low_res(page_number): | |
temp_path = None | |
try: | |
# Génère une image basse résolution | |
temp_path = generate_temp_image(page_number, dpi=72) | |
return send_file(temp_path, mimetype="image/jpeg") | |
except Exception as e: | |
return jsonify({"error": str(e)}), 500 | |
finally: | |
# Supprime le fichier temporaire après utilisation | |
if temp_path and os.path.exists(temp_path): | |
os.remove(temp_path) | |
# Endpoint pour récupérer une image haute résolution | |
def get_high_res(page_number): | |
temp_path = None | |
try: | |
# Génère une image haute résolution | |
temp_path = generate_temp_image(page_number, dpi=300) | |
return send_file(temp_path, mimetype="image/jpeg") | |
except Exception as e: | |
return jsonify({"error": str(e)}), 500 | |
finally: | |
# Supprime le fichier temporaire après utilisation | |
if temp_path and os.path.exists(temp_path): | |
os.remove(temp_path) | |
from flask import render_template | |
def viewer(): | |
return render_template("viewer.html") # Assurez-vous que viewer.html est dans le dossier templates/ | |
# Point d'entrée de l'application | |
if __name__ == "__main__": | |
app.run(debug=True) |