from reportlab.lib.pagesizes import A5 from reportlab.lib import colors from reportlab.lib.styles import getSampleStyleSheet from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer from reportlab.lib.units import mm def create_receipt(text, file_name): # Nettoyage du texte source text = text.replace('*', '').replace('#', '') text = text.replace('Reçu', '').strip() # Extraction des champs lines = [l.strip() for l in text.split("\n") if l.strip()] data_dict = {} for line in lines: if ":" in line: key, val = line.split(":", 1) data_dict[key.strip()] = val.strip() # Récupération des informations nom = data_dict.get("Nom", "") adresse = data_dict.get("Adresse", "") commande = data_dict.get("Commande", "") prix_piece = data_dict.get("Prix par pièce", "") prix_total = data_dict.get("Prix total", "") date_livraison = data_dict.get("Date de livraison", "") # Structure du PDF doc = SimpleDocTemplate( file_name, pagesize=A5, rightMargin=20, leftMargin=20, topMargin=20, bottomMargin=20 ) styles = getSampleStyleSheet() elements = [] # Titre titre = Paragraph("FACTURE", styles["Title"]) elements.append(titre) elements.append(Spacer(1, 8 * mm)) # Informations client info_client = ( f"Client : {nom}
" f"Adresse : {adresse}
" f"Date de livraison : {date_livraison}
" ) elements.append(Paragraph(info_client, styles["Normal"])) elements.append(Spacer(1, 8 * mm)) # Tableau du détail de commande table_data = [ ["Description", "Qté", "Prix unitaire", "Total"], [commande, "", prix_piece, prix_total] ] table = Table(table_data, colWidths=[60*mm, 15*mm, 30*mm, 30*mm]) table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,0), colors.lightgrey), ("TEXTCOLOR", (0,0), (-1,0), colors.black), ("ALIGN", (1,1), (-1,-1), "CENTER"), ("FONTNAME", (0,0), (-1,0), "Helvetica-Bold"), ("BOTTOMPADDING", (0,0), (-1,0), 8), ("GRID", (0,0), (-1,-1), 0.5, colors.black), ])) elements.append(table) elements.append(Spacer(1, 12 * mm)) # Total général total_paragraph = Paragraph( f"Total dû : {prix_total}", styles["Heading3"] ) elements.append(total_paragraph) # Génération PDF doc.build(elements)