diff --git a/public/datasheets/h1z2z2-k-de.pdf b/public/datasheets/h1z2z2-k-de.pdf index 7e62bcd9..ffcb439e 100644 Binary files a/public/datasheets/h1z2z2-k-de.pdf and b/public/datasheets/h1z2z2-k-de.pdf differ diff --git a/public/datasheets/h1z2z2-k-en.pdf b/public/datasheets/h1z2z2-k-en.pdf index e3f7f327..a0dad676 100644 Binary files a/public/datasheets/h1z2z2-k-en.pdf and b/public/datasheets/h1z2z2-k-en.pdf differ diff --git a/public/datasheets/n2x2y-de.pdf b/public/datasheets/n2x2y-de.pdf index 0c1af078..3f4e5832 100644 Binary files a/public/datasheets/n2x2y-de.pdf and b/public/datasheets/n2x2y-de.pdf differ diff --git a/public/datasheets/n2x2y-en.pdf b/public/datasheets/n2x2y-en.pdf index bc1550e3..c65cb83f 100644 Binary files a/public/datasheets/n2x2y-en.pdf and b/public/datasheets/n2x2y-en.pdf differ diff --git a/public/datasheets/n2xfk2y-de.pdf b/public/datasheets/n2xfk2y-de.pdf index d76e5b3d..ef5f5818 100644 Binary files a/public/datasheets/n2xfk2y-de.pdf and b/public/datasheets/n2xfk2y-de.pdf differ diff --git a/public/datasheets/n2xfk2y-en.pdf b/public/datasheets/n2xfk2y-en.pdf index 9bfb2304..9ca9da8e 100644 Binary files a/public/datasheets/n2xfk2y-en.pdf and b/public/datasheets/n2xfk2y-en.pdf differ diff --git a/public/datasheets/n2xfkld2y-de.pdf b/public/datasheets/n2xfkld2y-de.pdf index 8eb19eb4..d781b828 100644 Binary files a/public/datasheets/n2xfkld2y-de.pdf and b/public/datasheets/n2xfkld2y-de.pdf differ diff --git a/public/datasheets/n2xfkld2y-en.pdf b/public/datasheets/n2xfkld2y-en.pdf index 8639ba9c..7043c37a 100644 Binary files a/public/datasheets/n2xfkld2y-en.pdf and b/public/datasheets/n2xfkld2y-en.pdf differ diff --git a/public/datasheets/n2xs2y-de.pdf b/public/datasheets/n2xs2y-de.pdf index 8853ca23..a70eab28 100644 Binary files a/public/datasheets/n2xs2y-de.pdf and b/public/datasheets/n2xs2y-de.pdf differ diff --git a/public/datasheets/n2xs2y-en.pdf b/public/datasheets/n2xs2y-en.pdf index 9a909f30..e67adedb 100644 Binary files a/public/datasheets/n2xs2y-en.pdf and b/public/datasheets/n2xs2y-en.pdf differ diff --git a/public/datasheets/n2xsf2y-de.pdf b/public/datasheets/n2xsf2y-de.pdf index e0b4d92b..899259d4 100644 Binary files a/public/datasheets/n2xsf2y-de.pdf and b/public/datasheets/n2xsf2y-de.pdf differ diff --git a/public/datasheets/n2xsf2y-en.pdf b/public/datasheets/n2xsf2y-en.pdf index 440698cb..d27e67ab 100644 Binary files a/public/datasheets/n2xsf2y-en.pdf and b/public/datasheets/n2xsf2y-en.pdf differ diff --git a/public/datasheets/n2xsfl2y-hv-de.pdf b/public/datasheets/n2xsfl2y-hv-de.pdf index e2974d73..a97832a0 100644 Binary files a/public/datasheets/n2xsfl2y-hv-de.pdf and b/public/datasheets/n2xsfl2y-hv-de.pdf differ diff --git a/public/datasheets/n2xsfl2y-hv-en.pdf b/public/datasheets/n2xsfl2y-hv-en.pdf index 28c710ad..ba77a1e7 100644 Binary files a/public/datasheets/n2xsfl2y-hv-en.pdf and b/public/datasheets/n2xsfl2y-hv-en.pdf differ diff --git a/public/datasheets/n2xsfl2y-mv-de.pdf b/public/datasheets/n2xsfl2y-mv-de.pdf index 8b340035..67e30f51 100644 Binary files a/public/datasheets/n2xsfl2y-mv-de.pdf and b/public/datasheets/n2xsfl2y-mv-de.pdf differ diff --git a/public/datasheets/n2xsfl2y-mv-en.pdf b/public/datasheets/n2xsfl2y-mv-en.pdf index 1425338e..53ddcad3 100644 Binary files a/public/datasheets/n2xsfl2y-mv-en.pdf and b/public/datasheets/n2xsfl2y-mv-en.pdf differ diff --git a/public/datasheets/n2xsy-de.pdf b/public/datasheets/n2xsy-de.pdf index e43ae6c2..5b18849f 100644 Binary files a/public/datasheets/n2xsy-de.pdf and b/public/datasheets/n2xsy-de.pdf differ diff --git a/public/datasheets/n2xsy-en.pdf b/public/datasheets/n2xsy-en.pdf index 118d697c..e39bedbd 100644 Binary files a/public/datasheets/n2xsy-en.pdf and b/public/datasheets/n2xsy-en.pdf differ diff --git a/public/datasheets/n2xy-de.pdf b/public/datasheets/n2xy-de.pdf index 137ebf1f..49b5a6d1 100644 Binary files a/public/datasheets/n2xy-de.pdf and b/public/datasheets/n2xy-de.pdf differ diff --git a/public/datasheets/n2xy-en.pdf b/public/datasheets/n2xy-en.pdf index 2bdd3f54..b41a92bc 100644 Binary files a/public/datasheets/n2xy-en.pdf and b/public/datasheets/n2xy-en.pdf differ diff --git a/public/datasheets/na2x2y-de.pdf b/public/datasheets/na2x2y-de.pdf index e9410385..17fe89db 100644 Binary files a/public/datasheets/na2x2y-de.pdf and b/public/datasheets/na2x2y-de.pdf differ diff --git a/public/datasheets/na2x2y-en.pdf b/public/datasheets/na2x2y-en.pdf index db36234a..a40adcec 100644 Binary files a/public/datasheets/na2x2y-en.pdf and b/public/datasheets/na2x2y-en.pdf differ diff --git a/public/datasheets/na2xfk2y-de.pdf b/public/datasheets/na2xfk2y-de.pdf index 9ac0c694..621446f4 100644 Binary files a/public/datasheets/na2xfk2y-de.pdf and b/public/datasheets/na2xfk2y-de.pdf differ diff --git a/public/datasheets/na2xfk2y-en.pdf b/public/datasheets/na2xfk2y-en.pdf index 3e391f43..63faa06b 100644 Binary files a/public/datasheets/na2xfk2y-en.pdf and b/public/datasheets/na2xfk2y-en.pdf differ diff --git a/public/datasheets/na2xfkld2y-de.pdf b/public/datasheets/na2xfkld2y-de.pdf index 7a5f0158..9d47b7a6 100644 Binary files a/public/datasheets/na2xfkld2y-de.pdf and b/public/datasheets/na2xfkld2y-de.pdf differ diff --git a/public/datasheets/na2xfkld2y-en.pdf b/public/datasheets/na2xfkld2y-en.pdf index 1d1bcbd0..be674532 100644 Binary files a/public/datasheets/na2xfkld2y-en.pdf and b/public/datasheets/na2xfkld2y-en.pdf differ diff --git a/public/datasheets/na2xs2y-de.pdf b/public/datasheets/na2xs2y-de.pdf index 293aa498..b165a016 100644 Binary files a/public/datasheets/na2xs2y-de.pdf and b/public/datasheets/na2xs2y-de.pdf differ diff --git a/public/datasheets/na2xs2y-en.pdf b/public/datasheets/na2xs2y-en.pdf index e4c75f54..a668f884 100644 Binary files a/public/datasheets/na2xs2y-en.pdf and b/public/datasheets/na2xs2y-en.pdf differ diff --git a/public/datasheets/na2xsf2y-de.pdf b/public/datasheets/na2xsf2y-de.pdf index 0f84c2fe..6c8a675d 100644 Binary files a/public/datasheets/na2xsf2y-de.pdf and b/public/datasheets/na2xsf2y-de.pdf differ diff --git a/public/datasheets/na2xsf2y-en.pdf b/public/datasheets/na2xsf2y-en.pdf index 701a6d51..4d9c3d4b 100644 Binary files a/public/datasheets/na2xsf2y-en.pdf and b/public/datasheets/na2xsf2y-en.pdf differ diff --git a/public/datasheets/na2xsfl2y-hv-de.pdf b/public/datasheets/na2xsfl2y-hv-de.pdf index bc1af65f..1661e6f7 100644 Binary files a/public/datasheets/na2xsfl2y-hv-de.pdf and b/public/datasheets/na2xsfl2y-hv-de.pdf differ diff --git a/public/datasheets/na2xsfl2y-hv-en.pdf b/public/datasheets/na2xsfl2y-hv-en.pdf index 1aace9fa..4075e4ca 100644 Binary files a/public/datasheets/na2xsfl2y-hv-en.pdf and b/public/datasheets/na2xsfl2y-hv-en.pdf differ diff --git a/public/datasheets/na2xsfl2y-mv-de.pdf b/public/datasheets/na2xsfl2y-mv-de.pdf index e6e0a20f..ce04f6f2 100644 Binary files a/public/datasheets/na2xsfl2y-mv-de.pdf and b/public/datasheets/na2xsfl2y-mv-de.pdf differ diff --git a/public/datasheets/na2xsfl2y-mv-en.pdf b/public/datasheets/na2xsfl2y-mv-en.pdf index 31235433..87c098d7 100644 Binary files a/public/datasheets/na2xsfl2y-mv-en.pdf and b/public/datasheets/na2xsfl2y-mv-en.pdf differ diff --git a/public/datasheets/na2xsy-de.pdf b/public/datasheets/na2xsy-de.pdf index aa882ee5..f5d09080 100644 Binary files a/public/datasheets/na2xsy-de.pdf and b/public/datasheets/na2xsy-de.pdf differ diff --git a/public/datasheets/na2xsy-en.pdf b/public/datasheets/na2xsy-en.pdf index 1f16d5bf..43a38c76 100644 Binary files a/public/datasheets/na2xsy-en.pdf and b/public/datasheets/na2xsy-en.pdf differ diff --git a/public/datasheets/na2xy-de.pdf b/public/datasheets/na2xy-de.pdf index 8166bcec..33e3c29a 100644 Binary files a/public/datasheets/na2xy-de.pdf and b/public/datasheets/na2xy-de.pdf differ diff --git a/public/datasheets/na2xy-en.pdf b/public/datasheets/na2xy-en.pdf index 0ad0f871..4cb0800f 100644 Binary files a/public/datasheets/na2xy-en.pdf and b/public/datasheets/na2xy-en.pdf differ diff --git a/public/datasheets/nay2y-de.pdf b/public/datasheets/nay2y-de.pdf index c6027b2f..6082faf3 100644 Binary files a/public/datasheets/nay2y-de.pdf and b/public/datasheets/nay2y-de.pdf differ diff --git a/public/datasheets/nay2y-en.pdf b/public/datasheets/nay2y-en.pdf index 2d5f654d..a2338892 100644 Binary files a/public/datasheets/nay2y-en.pdf and b/public/datasheets/nay2y-en.pdf differ diff --git a/public/datasheets/naycwy-de.pdf b/public/datasheets/naycwy-de.pdf index 200bc610..8964941e 100644 Binary files a/public/datasheets/naycwy-de.pdf and b/public/datasheets/naycwy-de.pdf differ diff --git a/public/datasheets/naycwy-en.pdf b/public/datasheets/naycwy-en.pdf index b5c916be..03042418 100644 Binary files a/public/datasheets/naycwy-en.pdf and b/public/datasheets/naycwy-en.pdf differ diff --git a/public/datasheets/nayy-de.pdf b/public/datasheets/nayy-de.pdf index a6dee232..d97160f5 100644 Binary files a/public/datasheets/nayy-de.pdf and b/public/datasheets/nayy-de.pdf differ diff --git a/public/datasheets/nayy-en.pdf b/public/datasheets/nayy-en.pdf index bd92c707..aef32132 100644 Binary files a/public/datasheets/nayy-en.pdf and b/public/datasheets/nayy-en.pdf differ diff --git a/public/datasheets/ny2y-de.pdf b/public/datasheets/ny2y-de.pdf index 92d3349e..06f0bbba 100644 Binary files a/public/datasheets/ny2y-de.pdf and b/public/datasheets/ny2y-de.pdf differ diff --git a/public/datasheets/ny2y-en.pdf b/public/datasheets/ny2y-en.pdf index 4f57ba5c..6c67f63e 100644 Binary files a/public/datasheets/ny2y-en.pdf and b/public/datasheets/ny2y-en.pdf differ diff --git a/public/datasheets/nycwy-de.pdf b/public/datasheets/nycwy-de.pdf index e4b4c7cb..dbe3a513 100644 Binary files a/public/datasheets/nycwy-de.pdf and b/public/datasheets/nycwy-de.pdf differ diff --git a/public/datasheets/nycwy-en.pdf b/public/datasheets/nycwy-en.pdf index 971dc81d..34600723 100644 Binary files a/public/datasheets/nycwy-en.pdf and b/public/datasheets/nycwy-en.pdf differ diff --git a/public/datasheets/nyy-de.pdf b/public/datasheets/nyy-de.pdf index 090eaf11..e815c495 100644 Binary files a/public/datasheets/nyy-de.pdf and b/public/datasheets/nyy-de.pdf differ diff --git a/public/datasheets/nyy-en.pdf b/public/datasheets/nyy-en.pdf index 3ed1cd7b..57c25557 100644 Binary files a/public/datasheets/nyy-en.pdf and b/public/datasheets/nyy-en.pdf differ diff --git a/scripts/generate-pdf-datasheets-pdf-lib.ts b/scripts/generate-pdf-datasheets-pdf-lib.ts index c08de029..5431571d 100644 --- a/scripts/generate-pdf-datasheets-pdf-lib.ts +++ b/scripts/generate-pdf-datasheets-pdf-lib.ts @@ -2569,7 +2569,9 @@ function resolveMediaToLocalPath(urlOrPath: string | null | undefined): string | if (!urlOrPath) return null; // 1) Already public-relative. - if (urlOrPath.startsWith('/')) return urlOrPath; + if (urlOrPath.startsWith('/')) { + return urlOrPath; + } // 2) Some datasets store "media/..." without leading slash. if (/^media\//i.test(urlOrPath)) return `/${urlOrPath}`; @@ -3120,23 +3122,49 @@ async function loadEmbeddablePng( if (!resolved) return null; try { - // Prefer local files for stability and speed. + // 1) Try standard local path first if (resolved.startsWith('/')) { try { const bytes = await readBytesFromPublic(resolved); return { pngBytes: await toPngBytes(bytes, resolved), debugLabel: resolved }; } catch { - // Fall back to HTTP fetch if file doesn't exist locally (e.g., Payload /api/ route) + // Fallback: It might be a Payload API image that we couldn't statically map earlier + // Check if we can intercept it manually. + if (resolved.startsWith('/api/media/file/')) { + try { + const uploadFallback = resolved.replace('/api/media/file/', '/uploads/'); + const bytes = await readBytesFromPublic(uploadFallback); + return { + pngBytes: await toPngBytes(bytes, uploadFallback), + debugLabel: uploadFallback, + }; + } catch { + // Check media + try { + const mediaFallback = resolved.replace('/api/media/file/', '/media/'); + const bytes = await readBytesFromPublic(mediaFallback); + return { + pngBytes: await toPngBytes(bytes, mediaFallback), + debugLabel: mediaFallback, + }; + } catch { + // Ignore inner errors and fall through to network fetch + } + } + } } } - // Remote (fallback) - const host = process.env.NEXT_PUBLIC_BASE_URL || 'http://localhost:3000'; + // 2) Remote (network fetch fallback) + // IMPORTANT: Node 18+ fetch often resolves `localhost` to `::1` IPv6, which Payload might not be listening on. + // Force 127.0.0.1 to guarantee IPv4 resolution for local API fetches during build. + const host = process.env.NEXT_PUBLIC_BASE_URL || 'http://127.0.0.1:3000'; // 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 { + } catch (err: any) { + console.warn(`[PDF Image Warn] Failed to load image: ${src} -> ${resolved}`, err?.message); return null; } } @@ -3264,7 +3292,8 @@ function drawHeader(ctx: SectionDrawContext, yStart: number): number { // Cable-industry look: calm, engineered header with right-aligned meta. // Keep header compact to free vertical space for technical tables. const headerH = 52; - const dividerY = yStart - headerH; + const headerTopPadding = 24; + const dividerY = ctx.height - headerTopPadding - headerH; ctx.headerDividerY = dividerY; page.drawRectangle({ @@ -3989,10 +4018,15 @@ async function generatePDF(product: ProductData, locale: 'en' | 'de'): Promise y - needed >= contentMinY;