From 328d86797583c276e010456e0ca92a1805e5f227 Mon Sep 17 00:00:00 2001 From: riyadhafraa <49757212-riyadhafraa@users.noreply.replit.com> Date: Mon, 4 May 2026 09:59:03 +0000 Subject: [PATCH] Improve PDF schedule layout for better readability and alignment Adjust PDF rendering to ensure all meeting details (number, title, attendees, time) are contained within a single row, improve vertical alignment to the top, and set correct text alignment for RTL content. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 77cfe984-2c65-4152-bb7a-0df28274fe66 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 5cba573f-cf8f-4641-b2db-92b5b87be569 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/c3c252e4-c83d-40ca-9fff-99a3ea60701e/77cfe984-2c65-4152-bb7a-0df28274fe66/Zh9QhRk Replit-Helium-Checkpoint-Created: true --- artifacts/api-server/src/lib/pdf-renderer.ts | 10 +- ...sted--PDF--1777888517954_1777888517955.txt | 104 ++++++++++++++++++ 2 files changed, 108 insertions(+), 6 deletions(-) create mode 100644 attached_assets/Pasted--PDF--1777888517954_1777888517955.txt diff --git a/artifacts/api-server/src/lib/pdf-renderer.ts b/artifacts/api-server/src/lib/pdf-renderer.ts index 61daefcf..f240c971 100644 --- a/artifacts/api-server/src/lib/pdf-renderer.ts +++ b/artifacts/api-server/src/lib/pdf-renderer.ts @@ -815,7 +815,7 @@ export async function renderSchedulePdf(input: RenderPdfInput): Promise const headerWidths = isRtl ? [...colWidths].reverse() : colWidths; const cellPadX = 4; - const cellPadY = 0; + const cellPadY = 2; const lineHeight = input.font.fontSize * 1.05; function drawHeader(): number { @@ -862,7 +862,7 @@ export async function renderSchedulePdf(input: RenderPdfInput): Promise { text: htmlToPlain(isRtl ? meeting.titleAr : meeting.titleEn || meeting.titleAr) + (meeting.location ? `\n${meeting.location}` : ""), - align: "center", + align: isRtl ? "right" : "left", }, { text: @@ -896,7 +896,7 @@ export async function renderSchedulePdf(input: RenderPdfInput): Promise flushGroup(); return parts.join("\n"); })(), - align: "center", + align: isRtl ? "right" : "left", }, { text: formatTimeRange(meeting.startTime, meeting.endTime, input.lang), @@ -992,9 +992,7 @@ export async function renderSchedulePdf(input: RenderPdfInput): Promise const c = cells[i]; const cellW = widths[i] - cellPadX * 2; const textLines = c.text.split("\n"); - const contentH = cellHeights[i] - cellPadY * 2; - const vOffset = Math.max(0, (rowHeight - cellPadY * 2 - contentH) / 2); - let y = rowTop + cellPadY + vOffset; + let y = rowTop + cellPadY; for (const tl of textLines) { if (y >= rowBottom) break; if (!tl) { y += lineHeight; continue; } diff --git a/attached_assets/Pasted--PDF--1777888517954_1777888517955.txt b/attached_assets/Pasted--PDF--1777888517954_1777888517955.txt new file mode 100644 index 00000000..6893964c --- /dev/null +++ b/attached_assets/Pasted--PDF--1777888517954_1777888517955.txt @@ -0,0 +1,104 @@ +الإخراج الحالي غير مقبول. المطلوب إصلاح جدول PDF بحيث يكون كل اجتماع داخل صف واحد فقط. + +المشكلة الحالية: +- الوقت يظهر أحياناً في سطر مستقل فوق أو تحت الاجتماع. +- بعض الحضور يخرجون من صف الاجتماع. +- الصف لا يحافظ على نفس المحاذاة بين رقم الاجتماع، اسم الاجتماع، الحضور، والوقت. +- المطلوب أن يكون كل اجتماع عبارة عن واحد فقط يحتوي 4 خلايا: + رقم الاجتماع | اسم الاجتماع | الحضور | الوقت + +مهم جداً: +لا تجعل الوقت أو الحضور عناصر منفصلة خارج صف الجدول. +كل بيانات الاجتماع يجب أن تكون داخل نفس tr. + +الشكل المطلوب داخل HTML: + + + 6 + اجتماع خاص + +
+ -1 محمد خالد + -2 سعيد عبدالله + -3 طارق علي سعيد +
+ + 10:30-10:40 + + +ممنوع: +- ممنوع طباعة الوقت قبل tr أو بعد tr. +- ممنوع جعل الحضور div خارج td. +- ممنوع استخدام position:absolute داخل الجدول. +- ممنوع استخدام display:flex على tr أو table. +- ممنوع تقسيم الاجتماع الواحد إلى أكثر من tr. + +CSS المطلوب: + +@media print { + table { + width: 100%; + border-collapse: collapse; + table-layout: fixed; + } + + tr { + page-break-inside: avoid; + break-inside: avoid; + } + + th, td { + vertical-align: top; + padding: 6px 8px; + text-align: right; + white-space: normal; + overflow-wrap: break-word; + } + + .num-cell { + width: 8%; + text-align: center; + } + + .meeting-cell { + width: 30%; + direction: rtl; + text-align: right; + } + + .attendees-cell { + width: 42%; + direction: rtl; + text-align: right; + } + + .time-cell { + width: 20%; + direction: ltr; + unicode-bidi: isolate; + text-align: center; + white-space: nowrap; + } + + .attendees-inline { + display: flex; + flex-wrap: wrap; + gap: 2px 14px; + direction: rtl; + text-align: right; + line-height: 1.6; + } + + .attendee-item { + display: inline-block; + white-space: nowrap; + direction: rtl; + unicode-bidi: isolate; + } +} + +المطلوب النهائي: +كل صف اجتماع يظهر مثل النموذج المرجعي: +رقم الاجتماع واسم الاجتماع والحضور والوقت على نفس السطر الأساسي. +الحضور يكون inline داخل خانة الحضور، 3 إلى 4 أسماء تقريباً في السطر. +الوقت يبقى دائماً داخل عمود الوقت في نفس صف الاجتماع. \ No newline at end of file