From 8462cfcfd117152aa2d477cb6f3b8941ff7dd74b Mon Sep 17 00:00:00 2001 From: Riyadh Date: Mon, 4 May 2026 07:35:52 +0000 Subject: [PATCH] Compact PDF table layout to match reference design (Task #359) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes to artifacts/api-server/src/lib/pdf-renderer.ts: - Reduced cellPadX from 6 to 4 (horizontal cell padding) - Reduced cellPadY from 3 to 2 (vertical cell padding) - Tightened lineHeight multiplier from 1.25 to 1.2 - Removed +2 padding buffer from heightOfString measurement loop - Removed +2 from drawWrappingLine return value - Tightened drawMixedLine return value (1.25→1.2) - Consolidated header spacing from two moveDown(0.2+0.4) to one moveDown(0.3) - Tightened title Y offset multiplier from 1.25 to 1.2 - Fixed row height probe to detect script per-line (matching draw path) instead of per-cell, preventing measurement/draw mismatch in mixed Arabic/Latin content now that the +2 cushion is removed Result: Table rows are compact with no visible gaps between them, matching the user's reference PDF (attached_assets/rrr1_1777879598338.pdf). Row colors, cell borders, and footer positioning are unchanged. Both AR and EN PDFs generate successfully (200 status). --- artifacts/api-server/src/lib/pdf-renderer.ts | 52 ++++++++----------- artifacts/tx-os/public/opengraph.jpg | Bin 25958 -> 25946 bytes 2 files changed, 21 insertions(+), 31 deletions(-) diff --git a/artifacts/api-server/src/lib/pdf-renderer.ts b/artifacts/api-server/src/lib/pdf-renderer.ts index eb5e2c9c..bbad9735 100644 --- a/artifacts/api-server/src/lib/pdf-renderer.ts +++ b/artifacts/api-server/src/lib/pdf-renderer.ts @@ -529,7 +529,7 @@ function drawMixedLine( }); cursorX += r.width; } - return opts.fontSize * 1.25; + return opts.fontSize * 1.2; } function drawWrappingLine( @@ -561,7 +561,7 @@ function drawWrappingLine( lineGap: -1, ...(features ? { features } : {}), }); - return Math.max(opts.fontSize * 1.25, doc.y - before + 2); + return Math.max(opts.fontSize * 1.2, doc.y - before); } export async function renderSchedulePdf(input: RenderPdfInput): Promise { @@ -639,9 +639,8 @@ export async function renderSchedulePdf(input: RenderPdfInput): Promise baseDirection: baseDir, mapping, }); - doc.y = headerTopY + Math.max(titleSize * 1.25, input.logo ? logoBoxSize : 0); - doc.moveDown(0.2); - doc.moveDown(0.4); + doc.y = headerTopY + Math.max(titleSize * 1.2, input.logo ? logoBoxSize : 0); + doc.moveDown(0.3); if (input.meetings.length === 0) { drawMixedLine(doc, input.labels.none, { @@ -728,11 +727,9 @@ export async function renderSchedulePdf(input: RenderPdfInput): Promise : [input.labels.no, input.labels.meeting, input.labels.attendees, input.labels.time]; const headerWidths = isRtl ? [...colWidths].reverse() : colWidths; - const cellPadX = 6; - // Tightened from 5→3 to keep the table compact (we aim to fit a typical - // day on one page, mirroring the user's reference layout). - const cellPadY = 3; - const lineHeight = input.font.fontSize * 1.25; + const cellPadX = 4; + const cellPadY = 2; + const lineHeight = input.font.fontSize * 1.2; function drawHeader(): number { const headerHeight = lineHeight + cellPadY * 2; @@ -840,32 +837,25 @@ export async function renderSchedulePdf(input: RenderPdfInput): Promise // sooner than a simple division would, causing rows to overlap. const lines = c.text.split("\n"); let h = 0; - const arabicChars = [...c.text].filter(isArabicChar).length; - const dominantArabic = arabicChars * 2 > c.text.length; - const fk = fontKeyFor(dominantArabic, input.font.fontWeight, mapping); - const features = featuresFor(dominantArabic); - doc.font(fk).fontSize(input.font.fontSize); - const measureOpts: PDFKit.Mixins.TextOptions = { - width: widths[i] - cellPadX * 2, - align: c.align, - lineBreak: true, - // Mirror drawWrappingLine's lineGap so the probe matches the draw. - lineGap: -1, - ...(features ? { features } : {}), - }; + const cellW = widths[i] - cellPadX * 2; for (const line of lines) { if (!line) { h += lineHeight; continue; } - // heightOfString returns pdfkit's exact rendered height for the - // wrapped paragraph (including its internal line gaps). Use it - // directly — rounding up to whole lineHeight units inflates rows - // by half a line and leaves visible empty space below cells. - // The +2 mirrors drawWrappingLine's per-line padding fallback so - // multi-line cells never get under-reserved. - const measured = doc.heightOfString(line, measureOpts); - h += Math.max(lineHeight, measured) + 2; + const lineArabicChars = [...line].filter(isArabicChar).length; + const lineDominantArabic = lineArabicChars * 2 > line.length; + const lineFk = fontKeyFor(lineDominantArabic, input.font.fontWeight, mapping); + const lineFeatures = featuresFor(lineDominantArabic); + doc.font(lineFk).fontSize(input.font.fontSize); + const measured = doc.heightOfString(line, { + width: cellW, + align: c.align, + lineBreak: true, + lineGap: -1, + ...(lineFeatures ? { features: lineFeatures } : {}), + }); + h += Math.max(lineHeight, measured); } const finalH = h + cellPadY * 2; cellHeights.push(finalH); diff --git a/artifacts/tx-os/public/opengraph.jpg b/artifacts/tx-os/public/opengraph.jpg index f45afc6f8a27de76ee3e5ccdbbaca9761c0f4784..72a70c3ce7e93948b0a60204a33bc4b49eccc815 100644 GIT binary patch delta 18504 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 X7u~yl;aGfp9($LodFfT?Yw!O7ioN0o