fix(pdf): correct logo-black path, fix image fetch logic, and resolve irregular cross-section table spacing

This commit is contained in:
2026-03-03 12:58:00 +01:00
parent e524c9faf6
commit daabf8bb63
51 changed files with 5 additions and 5 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -3132,7 +3132,8 @@ async function loadEmbeddablePng(
// Remote (fallback)
const host = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000';
const fetchUrl = resolved.startsWith('/') ? `${host}${resolved}` : resolved;
// Ensure we don't end up with `http://localhost:3000http://...`
const fetchUrl = resolved.startsWith('/') ? `${host.replace(/\/$/, '')}${resolved}` : resolved;
const bytes = await fetchBytes(fetchUrl);
return { pngBytes: await toPngBytes(bytes, fetchUrl), debugLabel: fetchUrl };
} catch {
@@ -3975,7 +3976,7 @@ async function generatePDF(product: ProductData, locale: 'en' | 'de'): Promise<B
// Assets
// Prefer a raster logo for reliability (sharp SVG support can vary between environments).
const logoPng =
(await loadEmbeddablePng('/logo.png')) || (await loadEmbeddablePng('/logo.svg'));
(await loadEmbeddablePng('/logo-black.png')) || (await loadEmbeddablePng('/logo.png'));
const logoImage = logoPng ? await pdfDoc.embedPng(logoPng.pngBytes) : null;
// Some products have no product-specific images.
@@ -4321,9 +4322,8 @@ async function generatePDF(product: ProductData, locale: 'en' | 'de'): Promise<B
const firstColLabel = locale === 'de' ? 'Adern & Querschnitt' : 'Cores & cross-section';
for (const t of tables) {
// Maintain a minimum space between tables (even when staying on the same page).
// This avoids visual collisions between the previous table and the next meta header.
if (hasRenderedContent && y - 24 >= contentMinY) y -= 24;
// Only apply top margin if we aren't at the very start of the page
if (hasRenderedContent && y - 10 >= contentMinY) y -= 10;
// Check if we need a new page for this voltage table
// Estimate: meta block (if shown) + table header + at least 3 data rows