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 = """ إنشاء جدول DOCX

إنشاء جدول DOCX ديناميكي

""" 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)