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; }