from reportlab.lib.pagesizes import A5 from reportlab.lib import colors from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer from reportlab.lib.styles import getSampleStyleSheet def create_receipt(text, file_name): # Nettoyage basique clean = text.replace('*', '').replace('#', '').replace('Reçu', '') # Extraction des champs simples lines = [l.strip() for l in clean.split("\n") if l.strip()] data_map = {} description_lines = [] for l in lines: if ":" in l: key, val = l.split(":", 1) data_map[key.strip()] = val.strip() else: description_lines.append(l) # Données extraites client = data_map.get("Client", "") telephone = data_map.get("Téléphone", "") adresse = data_map.get("Adresse", "") date_commande = data_map.get("Date de commande", "") delai = data_map.get("Délai de livraison estimé", "") # Description brute (ex: "3 iPhone (1 rouge, 2 blancs)") description = " ".join(description_lines) # Styles styles = getSampleStyleSheet() title_style = styles["Title"] normal = styles["Normal"] # Création du document doc = SimpleDocTemplate(file_name, pagesize=A5, leftMargin=25, rightMargin=25, topMargin=25, bottomMargin=25) elements = [] # Titre elements.append(Paragraph("FACTURE", title_style)) elements.append(Spacer(1, 12)) # Informations client info_block = ( f"Client : {client}
" f"Téléphone : {telephone}
" f"Adresse : {adresse}
" f"Date de commande : {date_commande}
" f"Délai de livraison estimé : {delai}
" ) elements.append(Paragraph(info_block, normal)) elements.append(Spacer(1, 18)) # Tableau détaillé table_data = [ ["Description", "Quantité"], [description, description.split()[0] if description.split()[0].isdigit() else ""] ] table = Table(table_data, colWidths=[200, 60]) table.setStyle( TableStyle([ ("BACKGROUND", (0, 0), (-1, 0), colors.lightgrey), ("TEXTCOLOR", (0, 0), (-1, 0), colors.black), ("ALIGN", (1, 1), (-1, -1), "CENTER"), ("VALIGN", (0, 0), (-1, -1), "MIDDLE"), ("BOX", (0, 0), (-1, -1), 1, colors.black), ("GRID", (0, 0), (-1, -1), 0.5, colors.grey), ("FONTSIZE", (0, 0), (-1, -1), 10), ]) ) elements.append(table) elements.append(Spacer(1, 24)) # Mention finale elements.append(Paragraph("Merci pour votre commande.", normal)) # Génération du PDF doc.build(elements)