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

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