@flowselections/layout-maker 1.3.3 → 1.6.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -24
- package/dist-lib/components/AfdrukKnop.d.ts +3 -1
- package/dist-lib/components/AfdrukKnop.d.ts.map +1 -1
- package/dist-lib/components/AfdrukKnop.js +24 -3
- package/dist-lib/components/ComputersLijst.d.ts +23 -0
- package/dist-lib/components/ComputersLijst.d.ts.map +1 -0
- package/dist-lib/components/ComputersLijst.js +75 -0
- package/dist-lib/components/LayoutsPage.d.ts.map +1 -1
- package/dist-lib/components/LayoutsPage.js +2 -0
- package/dist-lib/components/LogosPage.d.ts.map +1 -1
- package/dist-lib/components/LogosPage.js +2 -0
- package/dist-lib/components/NetwerkPrintersDialog.d.ts +8 -0
- package/dist-lib/components/NetwerkPrintersDialog.d.ts.map +1 -0
- package/dist-lib/components/NetwerkPrintersDialog.js +79 -0
- package/dist-lib/components/PrintProgrammaUitleg.d.ts +5 -0
- package/dist-lib/components/PrintProgrammaUitleg.d.ts.map +1 -0
- package/dist-lib/components/PrintProgrammaUitleg.js +19 -0
- package/dist-lib/components/PrintQueuePage.d.ts.map +1 -1
- package/dist-lib/components/PrintQueuePage.js +37 -3
- package/dist-lib/components/PrinterKaart.d.ts +17 -0
- package/dist-lib/components/PrinterKaart.d.ts.map +1 -0
- package/dist-lib/components/PrinterKaart.js +14 -0
- package/dist-lib/components/PrinterSetupWizard.d.ts +11 -1
- package/dist-lib/components/PrinterSetupWizard.d.ts.map +1 -1
- package/dist-lib/components/PrinterSetupWizard.js +134 -64
- package/dist-lib/components/PrinterStatsKaarten.d.ts +11 -0
- package/dist-lib/components/PrinterStatsKaarten.d.ts.map +1 -0
- package/dist-lib/components/PrinterStatsKaarten.js +8 -0
- package/dist-lib/components/PrintersPage.d.ts.map +1 -1
- package/dist-lib/components/PrintersPage.js +120 -49
- package/dist-lib/components/WerkplekConfiguratiePage.d.ts +2 -0
- package/dist-lib/components/WerkplekConfiguratiePage.d.ts.map +1 -0
- package/dist-lib/components/WerkplekConfiguratiePage.js +101 -0
- package/dist-lib/components/WerkplekkenTabel.d.ts +14 -0
- package/dist-lib/components/WerkplekkenTabel.d.ts.map +1 -0
- package/dist-lib/components/WerkplekkenTabel.js +16 -0
- package/dist-lib/index.d.ts +11 -0
- package/dist-lib/index.d.ts.map +1 -1
- package/dist-lib/index.js +11 -0
- package/dist-lib/integrations/supabase/auth-middleware.d.ts +925 -34
- package/dist-lib/integrations/supabase/auth-middleware.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/client.server.d.ts +925 -34
- package/dist-lib/integrations/supabase/client.server.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.d.ts +920 -29
- package/dist-lib/integrations/supabase/types.d.ts.map +1 -1
- package/dist-lib/integrations/supabase/types.js +12 -1
- package/dist-lib/lib/aiLayout.functions.d.ts +925 -34
- package/dist-lib/lib/aiLayout.functions.d.ts.map +1 -1
- package/dist-lib/lib/aiLayout.server.js +9 -9
- package/dist-lib/lib/browserPrint.d.ts +1 -0
- package/dist-lib/lib/browserPrint.d.ts.map +1 -1
- package/dist-lib/lib/browserPrint.js +6 -6
- package/dist-lib/lib/centralAuth.server.d.ts +13 -0
- package/dist-lib/lib/centralAuth.server.d.ts.map +1 -0
- package/dist-lib/lib/centralAuth.server.js +60 -0
- package/dist-lib/lib/directPrint.d.ts +26 -0
- package/dist-lib/lib/directPrint.d.ts.map +1 -0
- package/dist-lib/lib/directPrint.js +65 -0
- package/dist-lib/lib/documentPdf.d.ts +11 -0
- package/dist-lib/lib/documentPdf.d.ts.map +1 -0
- package/dist-lib/lib/documentPdf.js +62 -0
- package/dist-lib/lib/htmlNaarPdf.server.d.ts +14 -0
- package/dist-lib/lib/htmlNaarPdf.server.d.ts.map +1 -0
- package/dist-lib/lib/htmlNaarPdf.server.js +34 -0
- package/dist-lib/lib/htmlPdf.server.d.ts +29 -0
- package/dist-lib/lib/htmlPdf.server.d.ts.map +1 -0
- package/dist-lib/lib/htmlPdf.server.js +1009 -0
- package/dist-lib/lib/layoutPreview.d.ts +1 -1
- package/dist-lib/lib/layoutPreview.d.ts.map +1 -1
- package/dist-lib/lib/layoutPreview.js +9 -9
- package/dist-lib/lib/logoLibrary.d.ts +1 -1
- package/dist-lib/lib/logoLibrary.js +5 -3
- package/dist-lib/lib/orderData.server.d.ts +15 -0
- package/dist-lib/lib/orderData.server.d.ts.map +1 -0
- package/dist-lib/lib/orderData.server.js +194 -0
- package/dist-lib/lib/pakbonBuilder.d.ts.map +1 -1
- package/dist-lib/lib/pakbonBuilder.js +22 -2
- package/dist-lib/lib/pakbonHtml.js +50 -50
- package/dist-lib/lib/printQueue.server.d.ts +31 -0
- package/dist-lib/lib/printQueue.server.d.ts.map +1 -0
- package/dist-lib/lib/printQueue.server.js +435 -0
- package/dist-lib/lib/printService.functions.d.ts +103742 -0
- package/dist-lib/lib/printService.functions.d.ts.map +1 -0
- package/dist-lib/lib/printService.functions.js +94 -0
- package/dist-lib/lib/printService.server.d.ts +31 -0
- package/dist-lib/lib/printService.server.d.ts.map +1 -0
- package/dist-lib/lib/printService.server.js +110 -0
- package/dist-lib/lib/productiebonHtml.d.ts +18 -0
- package/dist-lib/lib/productiebonHtml.d.ts.map +1 -0
- package/dist-lib/lib/productiebonHtml.js +166 -0
- package/dist-lib/lib/profielHtml.d.ts +14 -0
- package/dist-lib/lib/profielHtml.d.ts.map +1 -0
- package/dist-lib/lib/profielHtml.js +256 -0
- package/dist-lib/lib/runnerRegistry.server.d.ts +10 -0
- package/dist-lib/lib/runnerRegistry.server.d.ts.map +1 -0
- package/dist-lib/lib/runnerRegistry.server.js +79 -0
- package/dist-lib/lib/supabaseAdmin.server.d.ts +6 -0
- package/dist-lib/lib/supabaseAdmin.server.d.ts.map +1 -0
- package/dist-lib/lib/supabaseAdmin.server.js +43 -0
- package/dist-lib/lib/testpagina.d.ts +2 -0
- package/dist-lib/lib/testpagina.d.ts.map +1 -0
- package/dist-lib/lib/testpagina.js +31 -0
- package/dist-lib/lib/useAutoRefresh.d.ts +8 -0
- package/dist-lib/lib/useAutoRefresh.d.ts.map +1 -0
- package/dist-lib/lib/useAutoRefresh.js +44 -0
- package/dist-lib/lib/useDocumentData.d.ts +4 -3
- package/dist-lib/lib/useDocumentData.d.ts.map +1 -1
- package/dist-lib/lib/useDocumentData.js +10 -7
- package/dist-lib/lib/useNetwerkPrinters.d.ts +12 -0
- package/dist-lib/lib/useNetwerkPrinters.d.ts.map +1 -0
- package/dist-lib/lib/useNetwerkPrinters.js +26 -0
- package/package.json +11 -3
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/centralAuth.server.ts — haalt de sleutel voor de printdienst op bij
|
|
3
|
+
// de centrale auth-module. Alleen server-side; de browser ziet nooit een
|
|
4
|
+
// sleutel.
|
|
5
|
+
// ============================================================================
|
|
6
|
+
export class PrintToegangFout extends Error {
|
|
7
|
+
constructor(code, boodschap) {
|
|
8
|
+
super(boodschap);
|
|
9
|
+
this.code = code;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const CACHE_MS = 30 * 60 * 1000;
|
|
13
|
+
let cache = null;
|
|
14
|
+
/** Haalt (en cachet ~30 minuten) de toegang voor de printdienst op. */
|
|
15
|
+
export async function printToegang() {
|
|
16
|
+
if (cache && cache.tot > Date.now())
|
|
17
|
+
return cache.waarde;
|
|
18
|
+
const basis = process.env["CENTRAL_AUTH_URL"];
|
|
19
|
+
const secret = process.env["CENTRAL_AUTH_SECRET"];
|
|
20
|
+
if (!basis || !secret) {
|
|
21
|
+
throw new PrintToegangFout("niet_ingesteld", "De printkoppeling is niet goed ingesteld. Neem contact op met de beheerder.");
|
|
22
|
+
}
|
|
23
|
+
let res;
|
|
24
|
+
try {
|
|
25
|
+
res = await fetch(`${basis.replace(/\/+$/, "")}/api/token/printnode`, {
|
|
26
|
+
method: "POST",
|
|
27
|
+
headers: {
|
|
28
|
+
Authorization: `Bearer ${secret}`,
|
|
29
|
+
"Content-Type": "application/json",
|
|
30
|
+
},
|
|
31
|
+
body: JSON.stringify({ environment: "live" }),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
throw new PrintToegangFout("niet_bereikbaar", "De printdienst is tijdelijk niet bereikbaar. Probeer het zo opnieuw.");
|
|
36
|
+
}
|
|
37
|
+
if (res.status === 401) {
|
|
38
|
+
throw new PrintToegangFout("niet_ingesteld", "De printkoppeling is niet goed ingesteld. Neem contact op met de beheerder.");
|
|
39
|
+
}
|
|
40
|
+
if (res.status === 409) {
|
|
41
|
+
throw new PrintToegangFout("geen_koppeling", "Er is nog geen printdienst gekoppeld voor deze omgeving.");
|
|
42
|
+
}
|
|
43
|
+
if (!res.ok) {
|
|
44
|
+
throw new PrintToegangFout("niet_bereikbaar", "De printdienst is tijdelijk niet bereikbaar. Probeer het zo opnieuw.");
|
|
45
|
+
}
|
|
46
|
+
const body = (await res.json());
|
|
47
|
+
if (!body?.access_token) {
|
|
48
|
+
throw new PrintToegangFout("niet_bereikbaar", "De printdienst is tijdelijk niet bereikbaar. Probeer het zo opnieuw.");
|
|
49
|
+
}
|
|
50
|
+
const waarde = {
|
|
51
|
+
accessToken: body.access_token,
|
|
52
|
+
childAccountRef: body.child_account_ref ?? null,
|
|
53
|
+
};
|
|
54
|
+
cache = { waarde, tot: Date.now() + CACHE_MS };
|
|
55
|
+
return waarde;
|
|
56
|
+
}
|
|
57
|
+
/** Wist de bewaarde sleutel (bijv. na een afgewezen aanvraag). */
|
|
58
|
+
export function vergeetPrintToegang() {
|
|
59
|
+
cache = null;
|
|
60
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Orientatie } from "./browserPrint";
|
|
2
|
+
export interface DirectPrintOpdracht {
|
|
3
|
+
documenttype: string;
|
|
4
|
+
formaatCode: string | null;
|
|
5
|
+
orientatie: Orientatie;
|
|
6
|
+
html: string;
|
|
7
|
+
css?: string;
|
|
8
|
+
documentnaam?: string;
|
|
9
|
+
kopieen?: number;
|
|
10
|
+
layoutId?: string | null;
|
|
11
|
+
/** Forceert een specifieke printer uit de tabel `printers`. */
|
|
12
|
+
printerId?: string | null;
|
|
13
|
+
}
|
|
14
|
+
export interface DirectPrintResultaat {
|
|
15
|
+
gelukt: boolean;
|
|
16
|
+
/** Reden waarom het niet lukte (al in gewone taal). */
|
|
17
|
+
reden?: string;
|
|
18
|
+
printernaam?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Probeert het document rechtstreeks naar de ingestelde printer te sturen.
|
|
22
|
+
* Geeft `gelukt: false` terug wanneer er geen geschikte printer is; de
|
|
23
|
+
* aanroeper opent dan het gewone printvenster.
|
|
24
|
+
*/
|
|
25
|
+
export declare function printDirect(opdracht: DirectPrintOpdracht): Promise<DirectPrintResultaat>;
|
|
26
|
+
//# sourceMappingURL=directPrint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directPrint.d.ts","sourceRoot":"","sources":["../../src/lib/directPrint.ts"],"names":[],"mappings":"AAMA,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAI9E,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,OAAO,CAAC;IAChB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAqD9F"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/directPrint.ts — documenten stil afdrukken op de achtergrond.
|
|
3
|
+
// Lukt dat niet, dan valt de aanroeper terug op het printvenster.
|
|
4
|
+
// ============================================================================
|
|
5
|
+
import { supabase } from "./supabaseClient";
|
|
6
|
+
import { bedoeldePrinter, formaatDef } from "./browserPrint";
|
|
7
|
+
import { htmlNaarPdfBase64 } from "./documentPdf";
|
|
8
|
+
import { verstuurPrintOpdracht } from "./printService.functions";
|
|
9
|
+
/**
|
|
10
|
+
* Probeert het document rechtstreeks naar de ingestelde printer te sturen.
|
|
11
|
+
* Geeft `gelukt: false` terug wanneer er geen geschikte printer is; de
|
|
12
|
+
* aanroeper opent dan het gewone printvenster.
|
|
13
|
+
*/
|
|
14
|
+
export async function printDirect(opdracht) {
|
|
15
|
+
let printer = null;
|
|
16
|
+
if (opdracht.printerId) {
|
|
17
|
+
const { data } = await supabase
|
|
18
|
+
.from("printers")
|
|
19
|
+
.select("id, naam, extern_printer_id")
|
|
20
|
+
.eq("id", opdracht.printerId)
|
|
21
|
+
.maybeSingle();
|
|
22
|
+
printer = data ?? null;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
printer = await bedoeldePrinter(opdracht.documenttype, opdracht.formaatCode);
|
|
26
|
+
}
|
|
27
|
+
const externId = printer?.extern_printer_id ?? null;
|
|
28
|
+
if (!printer || !externId)
|
|
29
|
+
return { gelukt: false };
|
|
30
|
+
const formaat = opdracht.formaatCode
|
|
31
|
+
? formaatDef(opdracht.documenttype, opdracht.formaatCode)
|
|
32
|
+
: null;
|
|
33
|
+
try {
|
|
34
|
+
const pdfBase64 = await htmlNaarPdfBase64({
|
|
35
|
+
html: opdracht.html,
|
|
36
|
+
css: opdracht.css,
|
|
37
|
+
breedteMm: formaat?.breedte ?? 210,
|
|
38
|
+
hoogteMm: formaat?.hoogte ?? 297,
|
|
39
|
+
orientatie: opdracht.orientatie,
|
|
40
|
+
});
|
|
41
|
+
const res = await verstuurPrintOpdracht({
|
|
42
|
+
data: {
|
|
43
|
+
externPrinterId: externId,
|
|
44
|
+
documentnaam: opdracht.documentnaam ?? "Document",
|
|
45
|
+
pdfBase64,
|
|
46
|
+
kopieen: opdracht.kopieen ?? 1,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
if (!res.ok)
|
|
50
|
+
return { gelukt: false, reden: res.fout, printernaam: printer.naam ?? undefined };
|
|
51
|
+
await supabase.from("print_jobs").insert({
|
|
52
|
+
layout_id: opdracht.layoutId ?? null,
|
|
53
|
+
printer_id: printer.id ?? opdracht.printerId ?? null,
|
|
54
|
+
documenttype: opdracht.documenttype,
|
|
55
|
+
documentnaam: opdracht.documentnaam ?? "Document",
|
|
56
|
+
kopieen: opdracht.kopieen ?? 1,
|
|
57
|
+
status: "bezig",
|
|
58
|
+
extern_job_id: res.externJobId,
|
|
59
|
+
});
|
|
60
|
+
return { gelukt: true, printernaam: printer.naam ?? undefined };
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return { gelukt: false, reden: "Het document kon niet worden klaargemaakt om af te drukken." };
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Orientatie } from "./browserPrint";
|
|
2
|
+
export interface PdfOpdracht {
|
|
3
|
+
html: string;
|
|
4
|
+
css?: string;
|
|
5
|
+
breedteMm: number;
|
|
6
|
+
hoogteMm: number;
|
|
7
|
+
orientatie: Orientatie;
|
|
8
|
+
}
|
|
9
|
+
/** Levert de PDF als base64-tekst (zonder data:-prefix). */
|
|
10
|
+
export declare function htmlNaarPdfBase64(opdracht: PdfOpdracht): Promise<string>;
|
|
11
|
+
//# sourceMappingURL=documentPdf.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentPdf.d.ts","sourceRoot":"","sources":["../../src/lib/documentPdf.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAIjD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED,4DAA4D;AAC5D,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAoE9E"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/documentPdf.ts — zet document-HTML om naar een PDF (alleen browser)
|
|
3
|
+
// ============================================================================
|
|
4
|
+
const MM_PER_PX = 25.4 / 96;
|
|
5
|
+
/** Levert de PDF als base64-tekst (zonder data:-prefix). */
|
|
6
|
+
export async function htmlNaarPdfBase64(opdracht) {
|
|
7
|
+
if (typeof window === "undefined")
|
|
8
|
+
throw new Error("Alleen in de browser beschikbaar");
|
|
9
|
+
const [{ default: jsPDF }, { default: html2canvas }] = await Promise.all([
|
|
10
|
+
import("jspdf"),
|
|
11
|
+
import("html2canvas"),
|
|
12
|
+
]);
|
|
13
|
+
const gedraaid = opdracht.orientatie === "landscape";
|
|
14
|
+
const paginaBreedte = gedraaid ? opdracht.hoogteMm : opdracht.breedteMm;
|
|
15
|
+
const paginaHoogte = gedraaid ? opdracht.breedteMm : opdracht.hoogteMm;
|
|
16
|
+
const breedtePx = Math.round(paginaBreedte / MM_PER_PX);
|
|
17
|
+
const houder = document.createElement("div");
|
|
18
|
+
houder.style.position = "fixed";
|
|
19
|
+
houder.style.left = "-10000px";
|
|
20
|
+
houder.style.top = "0";
|
|
21
|
+
houder.style.width = `${breedtePx}px`;
|
|
22
|
+
houder.style.background = "#ffffff";
|
|
23
|
+
houder.innerHTML = `<style>${opdracht.css ?? ""}</style><div style="width:${breedtePx}px;background:#fff">${opdracht.html}</div>`;
|
|
24
|
+
document.body.appendChild(houder);
|
|
25
|
+
try {
|
|
26
|
+
await new Promise((r) => setTimeout(r, 150));
|
|
27
|
+
const canvas = await html2canvas(houder, {
|
|
28
|
+
backgroundColor: "#ffffff",
|
|
29
|
+
scale: 2,
|
|
30
|
+
useCORS: true,
|
|
31
|
+
windowWidth: breedtePx,
|
|
32
|
+
});
|
|
33
|
+
const pdf = new jsPDF({
|
|
34
|
+
unit: "mm",
|
|
35
|
+
format: [paginaBreedte, paginaHoogte],
|
|
36
|
+
orientation: paginaBreedte > paginaHoogte ? "landscape" : "portrait",
|
|
37
|
+
});
|
|
38
|
+
const pxPerMm = canvas.width / paginaBreedte;
|
|
39
|
+
const paginaHoogtePx = Math.max(1, Math.round(paginaHoogte * pxPerMm));
|
|
40
|
+
const paginas = Math.max(1, Math.ceil(canvas.height / paginaHoogtePx));
|
|
41
|
+
for (let i = 0; i < paginas; i++) {
|
|
42
|
+
const deelHoogte = Math.min(paginaHoogtePx, canvas.height - i * paginaHoogtePx);
|
|
43
|
+
const deel = document.createElement("canvas");
|
|
44
|
+
deel.width = canvas.width;
|
|
45
|
+
deel.height = deelHoogte;
|
|
46
|
+
const ctx = deel.getContext("2d");
|
|
47
|
+
if (!ctx)
|
|
48
|
+
break;
|
|
49
|
+
ctx.fillStyle = "#ffffff";
|
|
50
|
+
ctx.fillRect(0, 0, deel.width, deel.height);
|
|
51
|
+
ctx.drawImage(canvas, 0, -i * paginaHoogtePx);
|
|
52
|
+
if (i > 0)
|
|
53
|
+
pdf.addPage([paginaBreedte, paginaHoogte], paginaBreedte > paginaHoogte ? "landscape" : "portrait");
|
|
54
|
+
pdf.addImage(deel.toDataURL("image/jpeg", 0.92), "JPEG", 0, 0, paginaBreedte, deelHoogte / pxPerMm);
|
|
55
|
+
}
|
|
56
|
+
const uit = pdf.output("datauristring");
|
|
57
|
+
return uit.slice(uit.indexOf(",") + 1);
|
|
58
|
+
}
|
|
59
|
+
finally {
|
|
60
|
+
houder.remove();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare class PdfRenderFout extends Error {
|
|
2
|
+
code: "niet_ingesteld" | "mislukt";
|
|
3
|
+
constructor(code: "niet_ingesteld" | "mislukt", boodschap: string);
|
|
4
|
+
}
|
|
5
|
+
export interface PdfOpties {
|
|
6
|
+
html: string;
|
|
7
|
+
breedteMm?: number;
|
|
8
|
+
hoogteMm?: number;
|
|
9
|
+
margeMm?: number;
|
|
10
|
+
landschap?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/** Levert de PDF als base64-tekst (zonder data:-prefix). */
|
|
13
|
+
export declare function htmlNaarPdfServer(opties: PdfOpties): Promise<string>;
|
|
14
|
+
//# sourceMappingURL=htmlNaarPdf.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"htmlNaarPdf.server.d.ts","sourceRoot":"","sources":["../../src/lib/htmlNaarPdf.server.ts"],"names":[],"mappings":"AAQA,qBAAa,aAAc,SAAQ,KAAK;IAE7B,IAAI,EAAE,gBAAgB,GAAG,SAAS;gBAAlC,IAAI,EAAE,gBAAgB,GAAG,SAAS,EACzC,SAAS,EAAE,MAAM;CAKpB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,4DAA4D;AAC5D,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB1E"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// src/lib/htmlNaarPdf.server.ts — print-HTML omzetten naar PDF op de server.
|
|
3
|
+
// Gebruikt de eigen documentmaker (src/lib/htmlPdf.server.ts). Geen externe
|
|
4
|
+
// dienst, geen browser en geen instellingen per shell nodig.
|
|
5
|
+
// ============================================================================
|
|
6
|
+
import { bytesNaarBase64, htmlNaarPdfBytes } from "./htmlPdf.server";
|
|
7
|
+
export class PdfRenderFout extends Error {
|
|
8
|
+
constructor(code, boodschap) {
|
|
9
|
+
super(boodschap);
|
|
10
|
+
this.code = code;
|
|
11
|
+
this.name = "PdfRenderFout";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/** Levert de PDF als base64-tekst (zonder data:-prefix). */
|
|
15
|
+
export async function htmlNaarPdfServer(opties) {
|
|
16
|
+
if (!opties.html || opties.html.trim().length < 10) {
|
|
17
|
+
throw new PdfRenderFout("mislukt", "Het document is leeg.");
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const bytes = await htmlNaarPdfBytes({
|
|
21
|
+
html: opties.html,
|
|
22
|
+
breedteMm: opties.breedteMm ?? 210,
|
|
23
|
+
hoogteMm: opties.hoogteMm ?? 297,
|
|
24
|
+
margeMm: opties.margeMm ?? 10,
|
|
25
|
+
landschap: opties.landschap ?? false,
|
|
26
|
+
});
|
|
27
|
+
if (!bytes.length)
|
|
28
|
+
throw new Error("De PDF is leeg gebleven.");
|
|
29
|
+
return bytesNaarBase64(bytes);
|
|
30
|
+
}
|
|
31
|
+
catch (e) {
|
|
32
|
+
throw new PdfRenderFout("mislukt", e instanceof Error ? `PDF maken mislukte: ${e.message}` : "PDF maken mislukte.");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type RGB } from "pdf-lib";
|
|
2
|
+
export declare const MM = 2.834645669291339;
|
|
3
|
+
export interface Knoop {
|
|
4
|
+
tag: string;
|
|
5
|
+
attrs: Record<string, string>;
|
|
6
|
+
kinderen: Knoop[];
|
|
7
|
+
tekst?: string;
|
|
8
|
+
}
|
|
9
|
+
/** Zet HTML om naar een boom. Alleen de <body> wordt gebruikt. */
|
|
10
|
+
export declare function ontleedHtml(html: string): Knoop;
|
|
11
|
+
export interface Stijl {
|
|
12
|
+
grootte: number;
|
|
13
|
+
vet: boolean;
|
|
14
|
+
kleur: RGB;
|
|
15
|
+
uitlijning: "left" | "center" | "right";
|
|
16
|
+
}
|
|
17
|
+
export interface DocumentPdfOpties {
|
|
18
|
+
html: string;
|
|
19
|
+
breedteMm?: number;
|
|
20
|
+
hoogteMm?: number;
|
|
21
|
+
margeMm?: number;
|
|
22
|
+
landschap?: boolean;
|
|
23
|
+
/** Voettekst met paginanummers ("Pagina 1 van 3"). */
|
|
24
|
+
paginanummers?: boolean;
|
|
25
|
+
}
|
|
26
|
+
/** Zet print-HTML om naar een PDF en levert die als base64 (zonder prefix). */
|
|
27
|
+
export declare function htmlNaarPdfBytes(opties: DocumentPdfOpties): Promise<Uint8Array>;
|
|
28
|
+
export declare function bytesNaarBase64(bytes: Uint8Array): string;
|
|
29
|
+
//# sourceMappingURL=htmlPdf.server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"htmlPdf.server.d.ts","sourceRoot":"","sources":["../../src/lib/htmlPdf.server.ts"],"names":[],"mappings":"AAWA,OAAO,EAOL,KAAK,GAAG,EACT,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,EAAE,oBAAoB,CAAC;AAIpC,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,QAAQ,EAAE,KAAK,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuBD,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAuC/C;AAID,MAAM,WAAW,KAAK;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;CACzC;AAg4BD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sDAAsD;IACtD,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,+EAA+E;AAC/E,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CA8DrF;AA0BD,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAQzD"}
|