Hadeeratef91 commited on
Commit
c427fb6
·
verified ·
1 Parent(s): db15535

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +139 -139
app.py CHANGED
@@ -1,139 +1,139 @@
1
- import pandas as pd
2
- from PIL import Image, ImageDraw, ImageFont
3
- import os
4
- import shutil
5
- import requests
6
- import qrcode
7
- from arabic_reshaper import reshape
8
- import gradio as gr
9
-
10
- # تحميل خط من الإنترنت
11
- font_url = "https://github.com/google/fonts/blob/main/ofl/amiri/Amiri-Regular.ttf?raw=true"
12
- font_path = "Amiri-Regular.ttf"
13
- response = requests.get(font_url)
14
- with open(font_path, 'wb') as f:
15
- f.write(response.content)
16
-
17
- def process_file(file1):
18
- # قراءة البيانات من ملف Excel
19
- data = pd.read_excel(file1.name, engine="openpyxl").rename(columns=lambda x: x.strip())
20
-
21
- # التحقق من وجود الأعمدة المطلوبة
22
- required_columns = ['Asset-Code', 'Location', 'Description', 'Supplier Name']
23
- for column in required_columns:
24
- if column not in data.columns:
25
- return f"العمود {column} غير موجود في الملف!"
26
-
27
- # تنظيف النصوص
28
- def clean_text(text):
29
- if pd.isna(text):
30
- return "غير متوفر"
31
- return str(text).strip()
32
-
33
- data["Description"] = data["Description"].apply(clean_text)
34
- data["Supplier Name"] = data["Supplier Name"].apply(clean_text)
35
-
36
- # إعداد مجلدات الإخراج
37
- qr_folder = "qr_codes"
38
- output_folder = "labels_output"
39
- zip_output_path = "Labels_with_QRCodes.zip"
40
- os.makedirs(qr_folder, exist_ok=True)
41
- os.makedirs(output_folder, exist_ok=True)
42
-
43
- # إعداد الخط
44
- try:
45
- font = ImageFont.truetype(font_path, 14)
46
- except OSError:
47
- font = ImageFont.load_default()
48
-
49
- # إعداد أبعاد الملصق
50
- label_width = 400
51
- label_height = 300
52
- qr_size = 155
53
-
54
- # قائمة لتخزين بيانات QR Code
55
- qr_data_list = []
56
-
57
- # إنشاء QR Codes وملصقات
58
- for _, row in data.iterrows():
59
- asset_code = str(row["Asset-Code"])
60
- location = clean_text(row["Location"])
61
- description = reshape(clean_text(row["Description"]))
62
- supplier_name = reshape(clean_text(row["Supplier Name"]))
63
-
64
- # إنشاء نص QR
65
- qr_info = f"Asset-Code: {asset_code}, Location: {location}"
66
-
67
- # إنشاء QR Code
68
- qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=5, border=1)
69
- qr.add_data(qr_info)
70
- qr.make(fit=True)
71
-
72
- # حفظ QR Code كصورة
73
- qr_file_name = f"{asset_code}.png"
74
- qr_file_path = os.path.join(qr_folder, qr_file_name)
75
- qr_image = qr.make_image(fill_color="black", back_color="white")
76
- qr_image.save(qr_file_path)
77
-
78
- # إنشاء الملصق
79
- label = Image.new("RGB", (label_width, label_height), "white")
80
- draw = ImageDraw.Draw(label)
81
-
82
- # لصق QR Code
83
- qr_x = 20
84
- qr_y = (label_height - qr_size) // 2
85
- label.paste(qr_image.resize((qr_size, qr_size)), (qr_x, qr_y))
86
-
87
- # إضافة النصوص بجانب QR Code
88
- text_x = qr_x + qr_size + 15
89
- text_y = 50
90
- line_spacing = 40
91
- draw.text((text_x, text_y), f"اسم الصنف: {description}", font=font, fill="black")
92
- draw.text((text_x, text_y + line_spacing), f"اسم المورد: {supplier_name}", font=font, fill="black")
93
- draw.text((text_x, text_y + 2 * line_spacing), f"كود الصنف: {asset_code}", font=font, fill="black")
94
-
95
- # حفظ الملصق
96
- label_file_name = f"{asset_code}_label.png"
97
- label.save(os.path.join(output_folder, label_file_name))
98
-
99
- # إضافة البيانات إلى القائمة
100
- qr_data_list.append({
101
- "Asset-Code": asset_code,
102
- "Location": location,
103
- "Description": row["Description"],
104
- "Supplier Name": row["Supplier Name"]
105
- })
106
-
107
- # ضغط الملفات إلى ملف ZIP
108
- shutil.make_archive("labels_with_qr", 'zip', output_folder)
109
- shutil.move("labels_with_qr.zip", zip_output_path)
110
-
111
- # حفظ بيانات QR Code في ملف Excel
112
- output_excel = "qr_data_output.xlsx"
113
- qr_data_df = pd.DataFrame(qr_data_list)
114
- qr_data_df.to_excel(output_excel, index=False, engine='openpyxl')
115
-
116
- # حفظ البيانات في ملف CSV
117
- output_csv = "qr_data_output.csv"
118
- qr_data_df.to_csv(output_csv, index=False)
119
-
120
- # إرجاع روابط التنزيل
121
- return zip_output_path, output_excel, output_csv
122
-
123
- # واجهة Gradio
124
- interface = gr.Interface(
125
- fn=process_file,
126
- inputs=[
127
- gr.File(label="اختر ملف Excel")
128
- ],
129
- outputs=[
130
- gr.File(label="تحميل ملف ZIP الناتج"),
131
- gr.File(label="تحميل ملف Excel الناتج"),
132
- gr.File(label="تحميل ملف CSV الناتج")
133
- ],
134
- title="QR code generator",
135
- description="توليد QR Codes وملصقات بناءً على البيانات المدخلة"
136
- )
137
-
138
- if __name__ == "__main__":
139
- interface.launch(share=True)
 
1
+ import pandas as pd
2
+ from PIL import Image, ImageDraw, ImageFont
3
+ import os
4
+ import shutil
5
+ import requests
6
+ import qrcode
7
+ from arabic_reshaper import reshape
8
+ import gradio as gr
9
+
10
+ # تحميل خط من الإنترنت
11
+ font_url = "https://github.com/google/fonts/blob/main/ofl/amiri/Amiri-Regular.ttf?raw=true"
12
+ font_path = "Amiri-Regular.ttf"
13
+ response = requests.get(font_url)
14
+ with open(font_path, 'wb') as f:
15
+ f.write(response.content)
16
+
17
+ def process_file(file1):
18
+ # قراءة البيانات من ملف Excel
19
+ data = pd.read_excel(file1.name, engine="openpyxl").rename(columns=lambda x: x.strip())
20
+
21
+ # التحقق من وجود الأعمدة المطلوبة
22
+ required_columns = ['Asset-Code', 'Location', 'Description', 'Supplier Name']
23
+ for column in required_columns:
24
+ if column not in data.columns:
25
+ return f"العمود {column} غير موجود في الملف!"
26
+
27
+ # تنظيف النصوص
28
+ def clean_text(text):
29
+ if pd.isna(text):
30
+ return "غير متوفر"
31
+ return str(text).strip()
32
+
33
+ data["Description"] = data["Description"].apply(clean_text)
34
+ data["Supplier Name"] = data["Supplier Name"].apply(clean_text)
35
+
36
+ # إعداد مجلدات الإخراج
37
+ qr_folder = "qr_codes"
38
+ output_folder = "labels_output"
39
+ zip_output_path = "Labels_with_QRCodes.zip"
40
+ os.makedirs(qr_folder, exist_ok=True)
41
+ os.makedirs(output_folder, exist_ok=True)
42
+
43
+ # إعداد الخط
44
+ try:
45
+ font = ImageFont.truetype(font_path, 14)
46
+ except OSError:
47
+ font = ImageFont.load_default()
48
+
49
+ # إعداد أبعاد الملصق
50
+ label_width = 400
51
+ label_height = 300
52
+ qr_size = 155
53
+
54
+ # قائمة لتخزين بيانات QR Code
55
+ qr_data_list = []
56
+
57
+ # إنشاء QR Codes وملصقات
58
+ for _, row in data.iterrows():
59
+ asset_code = str(row["Asset-Code"])
60
+ location = clean_text(row["Location"])
61
+ description = reshape(clean_text(row["Description"]))
62
+ supplier_name = reshape(clean_text(row["Supplier Name"]))
63
+
64
+ # إنشاء نص QR
65
+ qr_info = f"Asset-Code: {asset_code}, Location: {location}"
66
+
67
+ # إنشاء QR Code
68
+ qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=5, border=1)
69
+ qr.add_data(qr_info)
70
+ qr.make(fit=True)
71
+
72
+ # حفظ QR Code كصورة
73
+ qr_file_name = f"{asset_code}.png"
74
+ qr_file_path = os.path.join(qr_folder, qr_file_name)
75
+ qr_image = qr.make_image(fill_color="black", back_color="white")
76
+ qr_image.save(qr_file_path)
77
+
78
+ # إنشاء الملصق
79
+ label = Image.new("RGB", (label_width, label_height), "white")
80
+ draw = ImageDraw.Draw(label)
81
+
82
+ # لصق QR Code
83
+ qr_x = 20
84
+ qr_y = (label_height - qr_size) // 2
85
+ label.paste(qr_image.resize((qr_size, qr_size)), (qr_x, qr_y))
86
+
87
+ # إضافة النصوص بجانب QR Code
88
+ text_x = qr_x + qr_size + 15
89
+ text_y = 50
90
+ line_spacing = 40
91
+ draw.text((text_x, text_y), f"اسم الصنف: {description}", font=font, fill="black")
92
+ draw.text((text_x, text_y + line_spacing), f"اسم المورد: {supplier_name}", font=font, fill="black")
93
+ draw.text((text_x, text_y + 2 * line_spacing), f"كود الصنف: {asset_code}", font=font, fill="black")
94
+
95
+ # حفظ الملصق
96
+ label_file_name = f"{asset_code}_label.png"
97
+ label.save(os.path.join(output_folder, label_file_name))
98
+
99
+ # إضافة البيانات إلى القائمة
100
+ qr_data_list.append({
101
+ "Asset-Code": asset_code,
102
+ "Location": location,
103
+ "Description": row["Description"],
104
+ "Supplier Name": row["Supplier Name"]
105
+ })
106
+
107
+ # ضغط الملفات إلى ملف ZIP
108
+ shutil.make_archive("labels_with_qr", 'zip', output_folder)
109
+ shutil.move("labels_with_qr.zip", zip_output_path)
110
+
111
+ # حفظ بيانات QR Code في ملف Excel
112
+ output_excel = "qr_data_output.xlsx"
113
+ qr_data_df = pd.DataFrame(qr_data_list)
114
+ qr_data_df.to_excel(output_excel, index=False, engine='openpyxl')
115
+
116
+ # حفظ البيانات في ملف CSV
117
+ output_csv = "qr_data_output.csv"
118
+ qr_data_df.to_csv(output_csv, index=False)
119
+
120
+ # إرجاع روابط التنزيل
121
+ return zip_output_path, output_excel, output_csv
122
+
123
+ # واجهة Gradio
124
+ interface = gr.Interface(
125
+ fn=process_file,
126
+ inputs=[
127
+ gr.File(label="اختر ملف Excel")
128
+ ],
129
+ outputs=[
130
+ gr.File(label="تحميل ملف ZIP الناتج"),
131
+ gr.File(label="تحميل ملف Excel الناتج"),
132
+ gr.File(label="تحميل ملف CSV الناتج")
133
+ ],
134
+ title="QR code generator_ALsalam",
135
+ description="توليد QR Codes وملصقات بناءً على البي��نات المدخلة"
136
+ )
137
+
138
+ if __name__ == "__main__":
139
+ interface.launch(share=True)