classapp / app.py
mohamedtsou's picture
yes
84a60a9 verified
raw
history blame
5.87 kB
from flask import Flask, render_template_string, request, send_file
from docx import Document
from docx.shared import Pt, Cm
from docx.oxml import OxmlElement, ns
from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
import io
app = Flask(__name__)
HTML = """
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<title>إنشاء جدول DOCX</title>
<style>
body { font-family: Arial, sans-serif; text-align: right; padding: 20px; }
input, select { width: 100%; margin: 5px 0; padding: 5px; }
button { padding: 10px 20px; font-size: 16px; }
</style>
</head>
<body>
<h2>إنشاء جدول DOCX ديناميكي</h2>
<form method="POST">
<label>القسم:</label>
<input type="text" name="classe" required>
<label>المادة:</label>
<input type="text" name="matiere" required>
<label>المعايير (افصل بين كل معيار بفاصلة):</label>
<input type="text" name="criteria" placeholder="مع1, مع2, مع3..." required>
<label>اختر مجموعة التلاميذ:</label>
<select name="group_choice" required>
<option value="1">المجموعة السابقة</option>
<option value="2">المجموعة الجديدة</option>
</select>
<button type="submit">إنشاء الملف</button>
</form>
</body>
</html>
"""
group_old = [
"أمنه عبد اللطيف","أروى يقين طنيش","اسامه بنضو","أنس الخطيب","إسراء بنمفتاح",
"اياد بوحريه","إياد منصور عمار","المختار عبد الواحد","بادیس دقنيش","جاهد السياري",
"رنيم العزلوك","ريتاج الطالب","رحمة الونيسي","زينب طنيش","زينب عبد الواحد",
"سلمان الشبلي","فادي القلعاوي","الجين الزردابي","ليان الطالبي","مؤمن بنمبارك",
"محمد أمير الحمدي","محمد الطاهر مشيري","محمد زكرياء حلاوط","مريم الذكار",
"ملاك عبد اللطيف","منال بوحربه","هديل بن حامد","ياسمين الحاجي","ياسمين المستيسر",
"ياسين جويد","يقين بوروحه","يوسف الشيباني","يوسف بن يحي","يونس بوصفة"
]
group_new = [
"احلام الغليظ","أحمد التايب","أحمد الحمزي","أيمن حلموس","إدريس القرسان",
"إسراء المرزوقي","باديس سكيب","بتول الفيتوري","تسنيم الطالب","خليل الشلاخ",
"رضوان عبدالستار","رمزي المقدميني","رنیم خلفه","رنیم عازق","رياض لهول",
"سيرين العربي","شيماء المورو","عبد الرحمان الوذان","عبد الرحمان بومروة",
"الجين زهمول","محمد الطاهر بوطالب","محمد جاسم العطوي","محمد ياسين الجليدي",
"مريم الذكار","مريم حسين","میار حسن","ميس بنصميده","ميار دباغي",
"نزار عکار","نضال ابن غنيه","نادين مراحي","همام الغرياني","أميمة ذكار"
]
@app.route("/", methods=["GET","POST"])
def index():
if request.method == "POST":
classe = request.form.get("classe")
matiere = request.form.get("matiere")
criteria_input = request.form.get("criteria", "")
criteria = [c.strip() for c in criteria_input.split(",") if c.strip()]
if not criteria:
criteria = ["مع 1", "مع 2", "مع 3"]
group_choice = request.form.get("group_choice")
names = group_new if group_choice=="2" else group_old
doc = Document()
title = doc.add_heading(f"جداول إسناد إعداد {matiere}", level=0)
title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
subtitle = doc.add_paragraph(f"القسم: {classe} - مدرسة الحبيب بورقيبة تطاوين")
subtitle.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
subtitle.runs[0].font.size = Pt(14)
doc.add_paragraph("\n")
cols = 1 + len(criteria)
table = doc.add_table(rows=1, cols=cols)
table.style = "Table Grid"
table.alignment = 2
tbl = table._tbl
tblPr = tbl.find(ns.qn('w:tblPr'))
if tblPr is None:
tblPr = OxmlElement('w:tblPr')
tbl.insert(0, tblPr)
bidi = tblPr.find(ns.qn('w:bidiVisual'))
if bidi is None:
bidi = OxmlElement('w:bidiVisual')
tblPr.append(bidi)
hdr = table.rows[0].cells
hdr[0].text = "الاسم"
hdr[0].paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
hdr[0].paragraphs[0].runs[0].font.size = Pt(12)
for i, c in enumerate(criteria):
hdr[i+1].text = c
hdr[i+1].paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
hdr[i+1].paragraphs[0].runs[0].font.size = Pt(12)
for name in names:
row = table.add_row().cells
row[0].text = name
row[0].paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
row[0].paragraphs[0].runs[0].font.size = Pt(11)
for j in range(len(criteria)):
row[j+1].text = ""
row[j+1].paragraphs[0].alignment = WD_PARAGRAPH_ALIGNMENT.CENTER
row[j+1].paragraphs[0].runs[0].font.size = Pt(11)
for col in table.columns:
for cell in col.cells:
cell.width = Cm(3)
f = io.BytesIO()
doc.save(f)
f.seek(0)
return send_file(f, as_attachment=True, download_name="table_RTL_web.docx",
mimetype="application/vnd.openxmlformats-officedocument.wordprocessingml.document")
return render_template_string(HTML)
if __name__ == "__main__":
app.run(debug=True)