diff --git a/.agents/agent_assets_metadata.toml b/.agents/agent_assets_metadata.toml index 029ad431..76ff6c41 100644 --- a/.agents/agent_assets_metadata.toml +++ b/.agents/agent_assets_metadata.toml @@ -71,3 +71,9 @@ id = "cY9FCy1T7wF7kkgS0rtGM" uri = "file://attached_assets/tx-icon/favicon.svg" type = "image" title = "Favicon-optimized (32×32, thicker strokes)" + +[[outputs]] +id = "iFT-ndtlSuqfB8aUjsUNG" +uri = "file://artifacts/api-server/executive-meetings-final.pdf" +type = "pdf" +title = "PDF النهائي - قائمة حضور الاجتماعات 4 مايو 2026" diff --git a/artifacts/api-server/executive-meetings-final.pdf b/artifacts/api-server/executive-meetings-final.pdf new file mode 100644 index 00000000..b5c4f56e Binary files /dev/null and b/artifacts/api-server/executive-meetings-final.pdf differ diff --git a/artifacts/api-server/src/lib/pdf-renderer.ts b/artifacts/api-server/src/lib/pdf-renderer.ts index f240c971..61daefcf 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 = 2; + const cellPadY = 0; 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: isRtl ? "right" : "left", + align: "center", }, { text: @@ -896,7 +896,7 @@ export async function renderSchedulePdf(input: RenderPdfInput): Promise flushGroup(); return parts.join("\n"); })(), - align: isRtl ? "right" : "left", + align: "center", }, { text: formatTimeRange(meeting.startTime, meeting.endTime, input.lang), @@ -992,7 +992,9 @@ export async function renderSchedulePdf(input: RenderPdfInput): Promise const c = cells[i]; const cellW = widths[i] - cellPadX * 2; const textLines = c.text.split("\n"); - let y = rowTop + cellPadY; + const contentH = cellHeights[i] - cellPadY * 2; + const vOffset = Math.max(0, (rowHeight - cellPadY * 2 - contentH) / 2); + let y = rowTop + cellPadY + vOffset; for (const tl of textLines) { if (y >= rowBottom) break; if (!tl) { y += lineHeight; continue; }