Files changed (2) hide show
  1. app.py +121 -0
  2. requirements.txt +2 -0
app.py ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from flask import Flask, render_template_string, request, send_file
2
+ from docx import Document
3
+ from docx.shared import Pt, Cm
4
+ from docx.oxml import OxmlElement, ns
5
+ from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
6
+ import io
7
+
8
+ app = Flask(__name__)
9
+
10
+ HTML = """
11
+ <!DOCTYPE html>
12
+ <html lang="ar" dir="rtl">
13
+ <head>
14
+ <meta charset="UTF-8">
15
+ <title>إنشاء جدول DOCX</title>
16
+ <style>
17
+ body { font-family: Arial, sans-serif; text-align: right; padding: 20px; }
18
+ input, select { width: 100%; margin: 5px 0; padding: 5px; }
19
+ button { padding: 10px 20px; font-size: 16px; }
20
+ </style>
21
+ </head>
22
+ <body>
23
+ <h2>إنشاء جدول DOCX ديناميكي</h2>
24
+ <form method="POST">
25
+ <label>القسم:</label>
26
+ <input type="text" name="classe" required>
27
+ <label>المادة:</label>
28
+ <input type="text" name="matiere" required>
29
+ <label>المعايير (افصل بين كل معيار بفاصلة):</label>
30
+ <input type="text" name="criteria" placeholder="مع1, مع2, مع3..." required>
31
+ <label>اختر مجموعة التلاميذ:</label>
32
+ <select name="group_choice" required>
33
+ <option value="1">المجموعة السابقة</option>
34
+ <option value="2">المجموعة الجديدة</option>
35
+ </select>
36
+ <button type="submit">إنشاء الملف</button>
37
+ </form>
38
+ </body>
39
+ </html>
40
+ """
41
+
42
+ group_old = [
43
+ "أمنه عبد اللطيف","أروى يقين طنيش","اسامه بنضو","أنس الخطيب","إسراء بنمفتاح",
44
+ "اياد بوحريه","إياد منصور عمار","المختار عبد الواحد","بادیس دقنيش","جاهد السياري",
45
+ "رنيم العزلوك","ريتاج الطالب","رحمة الونيسي","زينب طنيش","زينب عبد الواحد",
46
+ "سلمان الشبلي","فادي القلعاوي","الجين الزردابي","ليان الطالبي","مؤمن بنمبارك",
47
+ "محمد أمير الحمدي","محمد الطاهر مشيري","محمد زكرياء حلاوط","مريم الذكار",
48
+ "ملاك عبد اللطيف","منال بوحربه","هديل بن حامد","ياسمين الحاجي","ياسمين المستيسر",
49
+ "ياسين جويد","يقين بوروحه","يوسف الشيباني","يوسف بن يحي","يونس بوصفة"
50
+ ]
51
+
52
+ group_new = [
53
+ "احلام الغليظ","أحمد التايب","أحمد الحمزي","أيمن حلموس","إدريس القرسان",
54
+ "إسراء المرزوقي","باديس سكيب","بتول الفيتوري","تسنيم الطالب","خليل الشلاخ",
55
+ "رضوان عبدالستار","رمزي المقدميني","رنیم خلفه","رنیم عازق","رياض لهول",
56
+ "سيرين العربي","شيماء المورو","عبد الرحمان الوذان","عبد الرحمان بومروة",
57
+ "الجين زهمول","محمد الطاهر بوطالب","محمد جاسم العطوي","محمد ياسين الجليدي",
58
+ "مريم الذكار","مريم حسين","میار حسن","ميس بنصميده","ميار دباغي",
59
+ "نزار عکار","نضال ابن غنيه","نادين مراحي","همام الغرياني","أميمة ذكار"
60
+ ]
61
+
62
+ @app.route("/", methods=["GET","POST"])
63
+ def index():
64
+ if request.method == "POST":
65
+ classe = request.form.get("classe")
66
+ matiere = request.form.get("matiere")
67
+ criteria_input = request.form.get("criteria", "")
68
+ criteria = [c.strip() for c in criteria_input.split(",") if c.strip()]
69
+ if not criteria:
70
+ criteria = ["مع 1", "مع 2", "مع 3"]
71
+ group_choice = request.form.get("group_choice")
72
+ names = group_new if group_choice=="2" else group_old
73
+ doc = Document()
74
+ title = doc.add_heading(f"جداول إسناد إعداد {matiere}", level=0)
75
+ title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
76
+ subtitle = doc.add_paragraph(f"القسم: {classe} - مدرسة الحبيب بورقيبة تطاوين")
77
+ subtitle.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
78
+ subtitle.runs[0].font.size = Pt(14)
79
+ doc.add_paragraph("\n")
80
+ cols = 1 + len(criteria)
81
+ table = doc.add_table(rows=1, cols=cols)
82
+ table.style = "Table Grid"
83
+ table.alignment = 2
84
+ tbl = table._tbl
85
+ tblPr = tbl.find(ns.qn('w:tblPr'))
86
+ if tblPr is None:
87
+ tblPr = OxmlElement('w:tblPr')
88
+ tbl.insert(0, tblPr)
89
+ bidi = tblPr.find(ns.qn('w:bidiVisual'))
90
+ if bidi is None:
91
+ bidi = OxmlElement('w:bidiVisual')
92
+ tblPr.append(bidi)
93
+ hdr = table.rows[0].cells
94
+ hdr[0].text = "الاسم"
95
+ hdr[0].paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
96
+ hdr[0].paragraphs[0].runs[0].font.size = Pt(12)
97
+ for i, c in enumerate(criteria):
98
+ hdr[i+1].text = c
99
+ hdr[i+1].paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
100
+ hdr[i+1].paragraphs[0].runs[0].font.size = Pt(12)
101
+ for name in names:
102
+ row = table.add_row().cells
103
+ row[0].text = name
104
+ row[0].paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
105
+ row[0].paragraphs[0].runs[0].font.size = Pt(11)
106
+ for j in range(len(criteria)):
107
+ row[j+1].text = ""
108
+ row[j+1].paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
109
+ row[j+1].paragraphs[0].runs[0].font.size = Pt(11)
110
+ for col in table.columns:
111
+ for cell in col.cells:
112
+ cell.width = Cm(3)
113
+ f = io.BytesIO()
114
+ doc.save(f)
115
+ f.seek(0)
116
+ return send_file(f, as_attachment=True, download_name="table_RTL_web.docx",
117
+ mimetype="application/vnd.openxmlformats-officedocument.wordprocessingml.document")
118
+ return render_template_string(HTML)
119
+
120
+ if __name__ == "__main__":
121
+ app.run(debug=True)
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ Flask==2.3.2
2
+ python-docx==0.8.12