import streamlit as st import markdown2 import pdfkit from io import BytesIO from IPython.display import display, FileLink import base64 from langchain_core.messages import AIMessage, HumanMessage from datetime import datetime from download_chart import construct_plot def create_pdf_from_markdown(logo_path, conversation,summary,brand_name,graph_html,app_url): # Convertir la conversation en markdown markdown_text = "\n".join([f"### {entry['speaker']}:\n {entry['text']}\n ---" for entry in conversation]) markdown_summary = f"{summary}\n --- \n ---" # Convertir le markdown en HTML html_content = markdown2.markdown(markdown_text) html_summary = markdown2.markdown(markdown_summary) analysis_date = datetime.now().strftime("%Y-%m-%d") # image_base64 = base64.b64encode(image_path).decode('utf-8') # Créer le HTML complet avec les images et le texte html_template = f""" Cartographie des parties prenantes {brand_name}

Cartographie des parties prenantes {brand_name}

Date de l'analyse IA RSE : {analysis_date}

IA utilisées :

Logo
{graph_html}

RESUME

{html_summary}

Historique de la Conversation

{html_content} """ with open("temp.html", "w",encoding="utf-8") as f: f.write(html_template) # Create the footer HTML with the logo and app_url footer_html = f""" """ # Save the footer HTML to a temporary file with open("footer.html", "w",encoding="utf-8") as f: f.write(footer_html) # Convert HTML to PDF with header and footer pdf = pdfkit.from_file("temp.html", options={ 'footer-right': '[page]/[toPage]', }) return pdf def get_conversation(): conversation = [] for message in st.session_state.chat_history: if isinstance(message, AIMessage): conversation.append({"speaker": "AI", "text": message.content}) elif isinstance(message, HumanMessage): conversation.append({"speaker": "Moi", "text": message.content}) return conversation def export_conversation(summary): brand_name = st.session_state["Nom de la marque"] app_url = "https://huggingface.co/spaces/bziiit/OpenData-Bordeaux-RSE" logo_path = "https://static.wixstatic.com/media/d7d3da_b69e03ae99224f7d8b6e358918e60071~mv2.png/v1/crop/x_173,y_0,w_1906,h_938/fill/w_242,h_119,al_c,q_85,usm_0.66_1.00_0.01,enc_auto/BZIIIT_LOGO-HORIZ-COULEUR.png" # Replace with your image path with st.spinner("Génération du PDF..."): conversation = get_conversation() image_path = "newplot.png" try: graph = construct_plot() graph = graph.to_html(full_html=False, include_plotlyjs='cdn') except Exception as e: st.error("Erreur lors de la génération de la cartographie") graph = "" try: pdf = create_pdf_from_markdown(logo_path=logo_path, conversation=conversation,summary=summary,brand_name=brand_name,graph_html=image_path,app_url=app_url) except Exception as e: pdf = None if pdf: st.success("PDF généré avec succès!") else: st.error("Erreur lors de la génération du PDF") if st.download_button("Télécharger le PDF", data=pdf, file_name=f"Cartographie {brand_name}.pdf", mime="application/pdf"): st.rerun()