MISSAOUI commited on
Commit
522b639
·
verified ·
1 Parent(s): 2453c3a

Update pdf_generator.py

Browse files
Files changed (1) hide show
  1. pdf_generator.py +77 -15
pdf_generator.py CHANGED
@@ -1,23 +1,85 @@
1
  from reportlab.lib.pagesizes import A5
2
- from reportlab.pdfgen import canvas
 
 
3
 
4
- def create_receipt(text, file_name):
5
- text=text.replace('*','')
6
- text=text.replace('#','')
7
- text=text.replace('Reçu','')
8
- pdf = canvas.Canvas(file_name, pagesize=A5)
9
- width, height = A5
10
 
11
- pdf.setFont("Helvetica-Bold", 16)
12
- pdf.drawCentredString(width / 2, height - 50, "Reçu")
 
 
13
 
14
- pdf.setFont("Helvetica", 12)
15
- text_object = pdf.beginText(50, height - 100)
 
 
 
 
16
 
17
- for line in text.split("\n"):
18
- text_object.textLine(line.strip())
 
 
 
 
19
 
20
- pdf.drawText(text_object)
 
21
 
22
- pdf.save()
 
 
 
23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  from reportlab.lib.pagesizes import A5
2
+ from reportlab.lib import colors
3
+ from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer
4
+ from reportlab.lib.styles import getSampleStyleSheet
5
 
6
+ def create_invoice(text, file_name):
7
+ # Nettoyage basique
8
+ clean = text.replace('*', '').replace('#', '').replace('Reçu', '')
 
 
 
9
 
10
+ # Extraction des champs simples
11
+ lines = [l.strip() for l in clean.split("\n") if l.strip()]
12
+ data_map = {}
13
+ description_lines = []
14
 
15
+ for l in lines:
16
+ if ":" in l:
17
+ key, val = l.split(":", 1)
18
+ data_map[key.strip()] = val.strip()
19
+ else:
20
+ description_lines.append(l)
21
 
22
+ # Données extraites
23
+ client = data_map.get("Client", "")
24
+ telephone = data_map.get("Téléphone", "")
25
+ adresse = data_map.get("Adresse", "")
26
+ date_commande = data_map.get("Date de commande", "")
27
+ delai = data_map.get("Délai de livraison estimé", "")
28
 
29
+ # Description brute (ex: "3 iPhone (1 rouge, 2 blancs)")
30
+ description = " ".join(description_lines)
31
 
32
+ # Styles
33
+ styles = getSampleStyleSheet()
34
+ title_style = styles["Title"]
35
+ normal = styles["Normal"]
36
 
37
+ # Création du document
38
+ doc = SimpleDocTemplate(file_name, pagesize=A5,
39
+ leftMargin=25, rightMargin=25, topMargin=25, bottomMargin=25)
40
+
41
+ elements = []
42
+
43
+ # Titre
44
+ elements.append(Paragraph("FACTURE", title_style))
45
+ elements.append(Spacer(1, 12))
46
+
47
+ # Informations client
48
+ info_block = (
49
+ f"<b>Client :</b> {client}<br/>"
50
+ f"<b>Téléphone :</b> {telephone}<br/>"
51
+ f"<b>Adresse :</b> {adresse}<br/>"
52
+ f"<b>Date de commande :</b> {date_commande}<br/>"
53
+ f"<b>Délai de livraison estimé :</b> {delai}<br/>"
54
+ )
55
+ elements.append(Paragraph(info_block, normal))
56
+ elements.append(Spacer(1, 18))
57
+
58
+ # Tableau détaillé
59
+ table_data = [
60
+ ["Description", "Quantité"],
61
+ [description, description.split()[0] if description.split()[0].isdigit() else ""]
62
+ ]
63
+
64
+ table = Table(table_data, colWidths=[200, 60])
65
+
66
+ table.setStyle(
67
+ TableStyle([
68
+ ("BACKGROUND", (0, 0), (-1, 0), colors.lightgrey),
69
+ ("TEXTCOLOR", (0, 0), (-1, 0), colors.black),
70
+ ("ALIGN", (1, 1), (-1, -1), "CENTER"),
71
+ ("VALIGN", (0, 0), (-1, -1), "MIDDLE"),
72
+ ("BOX", (0, 0), (-1, -1), 1, colors.black),
73
+ ("GRID", (0, 0), (-1, -1), 0.5, colors.grey),
74
+ ("FONTSIZE", (0, 0), (-1, -1), 10),
75
+ ])
76
+ )
77
+
78
+ elements.append(table)
79
+ elements.append(Spacer(1, 24))
80
+
81
+ # Mention finale
82
+ elements.append(Paragraph("Merci pour votre commande.", normal))
83
+
84
+ # Génération du PDF
85
+ doc.build(elements)