Spaces:
Sleeping
Sleeping
Hussien Haider commited on
Commit Β·
8bbd3d6
1
Parent(s): 8d0f2a3
app/services/certificate_service.py
CHANGED
|
@@ -124,8 +124,10 @@ def build_certificate_pdf(
|
|
| 124 |
c = canvas.Canvas(buf, pagesize=landscape(A4))
|
| 125 |
|
| 126 |
# ββ Color palette ββ
|
| 127 |
-
|
| 128 |
-
|
|
|
|
|
|
|
| 129 |
WHITE = HexColor("#FFFFFF")
|
| 130 |
LIGHT = HexColor("#F5F7FA")
|
| 131 |
DARK = HexColor("#1A2332")
|
|
@@ -150,9 +152,18 @@ def build_certificate_pdf(
|
|
| 150 |
c.rect(bar_w - 1.5 * mm, 0, 1.5 * mm, height, fill=1, stroke=0)
|
| 151 |
|
| 152 |
# ββ Alpha Logo on dark bar ββ
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 156 |
logo_size = 22 * mm
|
| 157 |
c.drawImage(
|
| 158 |
logo_path,
|
|
@@ -164,7 +175,6 @@ def build_certificate_pdf(
|
|
| 164 |
mask="auto",
|
| 165 |
)
|
| 166 |
else:
|
| 167 |
-
# Fallback text logo
|
| 168 |
c.setFillColor(GOLD)
|
| 169 |
c.setFont("Helvetica-Bold", 14)
|
| 170 |
c.drawCentredString(bar_w / 2, height - 38 * mm, "ALPHA")
|
|
@@ -302,7 +312,7 @@ def build_certificate_pdf(
|
|
| 302 |
qr = qrcode.QRCode(box_size=4, border=0)
|
| 303 |
qr.add_data(qr_payload)
|
| 304 |
qr.make(fit=True)
|
| 305 |
-
qr_img = qr.make_image(fill_color=
|
| 306 |
qr_path = os.path.join(tempfile.gettempdir(), f"ca_qr_{verify_code.replace(' ', '_')}.png")
|
| 307 |
qr_img.save(qr_path, format="PNG")
|
| 308 |
qr_size = 24 * mm
|
|
@@ -336,12 +346,11 @@ def build_certificate_pdf(
|
|
| 336 |
s_font = 6
|
| 337 |
c.setFont("Helvetica-Bold", s_font)
|
| 338 |
for angle, text in [(0, "AUTHENTIC"), (90, "CERTIFIED")]:
|
| 339 |
-
saver = c
|
| 340 |
c.saveState()
|
| 341 |
c.translate(seal_x, seal_y)
|
| 342 |
c.rotate(angle)
|
| 343 |
c.drawCentredString(0, seal_r * 0.65, text)
|
| 344 |
-
c.
|
| 345 |
c.setFont("Helvetica-Bold", 5)
|
| 346 |
c.drawCentredString(seal_x, seal_y - 2 * mm, "β")
|
| 347 |
|
|
|
|
| 124 |
c = canvas.Canvas(buf, pagesize=landscape(A4))
|
| 125 |
|
| 126 |
# ββ Color palette ββ
|
| 127 |
+
NAVY_HEX = "#0F1B2D"
|
| 128 |
+
GOLD_HEX = "#C9A84C"
|
| 129 |
+
NAVY = HexColor(NAVY_HEX)
|
| 130 |
+
GOLD = HexColor(GOLD_HEX)
|
| 131 |
WHITE = HexColor("#FFFFFF")
|
| 132 |
LIGHT = HexColor("#F5F7FA")
|
| 133 |
DARK = HexColor("#1A2332")
|
|
|
|
| 152 |
c.rect(bar_w - 1.5 * mm, 0, 1.5 * mm, height, fill=1, stroke=0)
|
| 153 |
|
| 154 |
# ββ Alpha Logo on dark bar ββ
|
| 155 |
+
base = os.path.dirname(__file__)
|
| 156 |
+
logo_candidates = [
|
| 157 |
+
os.path.join(base, "..", "..", "public", "ALPHA-LOGO.png"), # CyberArena/../public/
|
| 158 |
+
os.path.join(base, "..", "..", "..", "public", "ALPHA-LOGO.png"), # Apex/public/
|
| 159 |
+
os.path.join(base, "..", "..", "ALPHA-LOGO.png"), # project root
|
| 160 |
+
]
|
| 161 |
+
logo_path = None
|
| 162 |
+
for p in logo_candidates:
|
| 163 |
+
if os.path.exists(p):
|
| 164 |
+
logo_path = p
|
| 165 |
+
break
|
| 166 |
+
if logo_path:
|
| 167 |
logo_size = 22 * mm
|
| 168 |
c.drawImage(
|
| 169 |
logo_path,
|
|
|
|
| 175 |
mask="auto",
|
| 176 |
)
|
| 177 |
else:
|
|
|
|
| 178 |
c.setFillColor(GOLD)
|
| 179 |
c.setFont("Helvetica-Bold", 14)
|
| 180 |
c.drawCentredString(bar_w / 2, height - 38 * mm, "ALPHA")
|
|
|
|
| 312 |
qr = qrcode.QRCode(box_size=4, border=0)
|
| 313 |
qr.add_data(qr_payload)
|
| 314 |
qr.make(fit=True)
|
| 315 |
+
qr_img = qr.make_image(fill_color=NAVY_HEX, back_color="white", image_factory=PilImage)
|
| 316 |
qr_path = os.path.join(tempfile.gettempdir(), f"ca_qr_{verify_code.replace(' ', '_')}.png")
|
| 317 |
qr_img.save(qr_path, format="PNG")
|
| 318 |
qr_size = 24 * mm
|
|
|
|
| 346 |
s_font = 6
|
| 347 |
c.setFont("Helvetica-Bold", s_font)
|
| 348 |
for angle, text in [(0, "AUTHENTIC"), (90, "CERTIFIED")]:
|
|
|
|
| 349 |
c.saveState()
|
| 350 |
c.translate(seal_x, seal_y)
|
| 351 |
c.rotate(angle)
|
| 352 |
c.drawCentredString(0, seal_r * 0.65, text)
|
| 353 |
+
c.restoreState()
|
| 354 |
c.setFont("Helvetica-Bold", 5)
|
| 355 |
c.drawCentredString(seal_x, seal_y - 2 * mm, "β")
|
| 356 |
|