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 @app.route("/low_res/") 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 @app.route("/high_res/") 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 @app.route("/viewer") 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)