@veztraa/report-renderer 0.1.0
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/dist/document.d.ts +10 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +352 -0
- package/dist/document.js.map +1 -0
- package/dist/elements.d.ts +6 -0
- package/dist/elements.d.ts.map +1 -0
- package/dist/elements.js +445 -0
- package/dist/elements.js.map +1 -0
- package/dist/fonts/inter-400.woff +0 -0
- package/dist/fonts/inter-700.woff +0 -0
- package/dist/fonts/lato-400-italic.woff +0 -0
- package/dist/fonts/lato-400.woff +0 -0
- package/dist/fonts/lato-700-italic.woff +0 -0
- package/dist/fonts/lato-700.woff +0 -0
- package/dist/fonts/merriweather-400-italic.woff +0 -0
- package/dist/fonts/merriweather-400.woff +0 -0
- package/dist/fonts/merriweather-700-italic.woff +0 -0
- package/dist/fonts/merriweather-700.woff +0 -0
- package/dist/fonts/montserrat-400-italic.woff +0 -0
- package/dist/fonts/montserrat-400.woff +0 -0
- package/dist/fonts/montserrat-700-italic.woff +0 -0
- package/dist/fonts/montserrat-700.woff +0 -0
- package/dist/fonts/nunito-400-italic.woff +0 -0
- package/dist/fonts/nunito-400.woff +0 -0
- package/dist/fonts/nunito-700-italic.woff +0 -0
- package/dist/fonts/nunito-700.woff +0 -0
- package/dist/fonts/open-sans-400-italic.woff +0 -0
- package/dist/fonts/open-sans-400.woff +0 -0
- package/dist/fonts/open-sans-700-italic.woff +0 -0
- package/dist/fonts/open-sans-700.woff +0 -0
- package/dist/fonts/playfair-400-italic.woff +0 -0
- package/dist/fonts/playfair-400.woff +0 -0
- package/dist/fonts/playfair-700-italic.woff +0 -0
- package/dist/fonts/playfair-700.woff +0 -0
- package/dist/fonts/poppins-400-italic.woff +0 -0
- package/dist/fonts/poppins-400.woff +0 -0
- package/dist/fonts/poppins-700-italic.woff +0 -0
- package/dist/fonts/poppins-700.woff +0 -0
- package/dist/fonts/raleway-400-italic.woff +0 -0
- package/dist/fonts/raleway-400.woff +0 -0
- package/dist/fonts/raleway-700-italic.woff +0 -0
- package/dist/fonts/raleway-700.woff +0 -0
- package/dist/fonts/roboto-400-italic.woff +0 -0
- package/dist/fonts/roboto-400.woff +0 -0
- package/dist/fonts/roboto-700-italic.woff +0 -0
- package/dist/fonts/roboto-700.woff +0 -0
- package/dist/fonts/source-code-pro-400.woff +0 -0
- package/dist/fonts/source-code-pro-700.woff +0 -0
- package/dist/fonts/ubuntu-400-italic.woff +0 -0
- package/dist/fonts/ubuntu-400.woff +0 -0
- package/dist/fonts/ubuntu-700-italic.woff +0 -0
- package/dist/fonts/ubuntu-700.woff +0 -0
- package/dist/fonts.d.ts +23 -0
- package/dist/fonts.d.ts.map +1 -0
- package/dist/fonts.js +46 -0
- package/dist/fonts.js.map +1 -0
- package/dist/index.browser.d.ts +8 -0
- package/dist/index.browser.d.ts.map +1 -0
- package/dist/index.browser.js +18 -0
- package/dist/index.browser.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/registerFonts.browser.d.ts +2 -0
- package/dist/registerFonts.browser.d.ts.map +1 -0
- package/dist/registerFonts.browser.js +15 -0
- package/dist/registerFonts.browser.js.map +1 -0
- package/dist/registerFonts.d.ts +2 -0
- package/dist/registerFonts.d.ts.map +1 -0
- package/dist/registerFonts.js +76 -0
- package/dist/registerFonts.js.map +1 -0
- package/dist/richtext.d.ts +13 -0
- package/dist/richtext.d.ts.map +1 -0
- package/dist/richtext.js +220 -0
- package/dist/richtext.js.map +1 -0
- package/package.json +35 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { Template } from "@veztraa/report-core";
|
|
3
|
+
type Data = Record<string, unknown>;
|
|
4
|
+
interface ReportDocumentProps {
|
|
5
|
+
template: Template;
|
|
6
|
+
data: Data;
|
|
7
|
+
}
|
|
8
|
+
export declare function ReportDocument({ template, data }: ReportDocumentProps): React.JSX.Element;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=document.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../src/document.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,QAAQ,EAAiB,MAAM,sBAAsB,CAAC;AAqBpE,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA4TpC,UAAU,mBAAmB;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;CACZ;AAED,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,mBAAmB,qBAmGrE"}
|
package/dist/document.js
ADDED
|
@@ -0,0 +1,352 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Document, Page, View, Text } from "@react-pdf/renderer";
|
|
3
|
+
import { resolveArray, evaluate } from "@veztraa/report-core";
|
|
4
|
+
import { renderElement } from "./elements.js";
|
|
5
|
+
import { registerFonts } from "./fonts.js";
|
|
6
|
+
import { parseRichText, wrapRichText, measureText, } from "./richtext.js";
|
|
7
|
+
registerFonts();
|
|
8
|
+
const CANVAS_SIZES = {
|
|
9
|
+
A4: [794, 1123],
|
|
10
|
+
A3: [1123, 1587],
|
|
11
|
+
A5: [559, 794],
|
|
12
|
+
Letter: [816, 1056],
|
|
13
|
+
Legal: [816, 1344],
|
|
14
|
+
};
|
|
15
|
+
const DEFAULT_HEADER_H = 60;
|
|
16
|
+
const DEFAULT_FOOTER_H = 40;
|
|
17
|
+
// Build the watermark layer for a page: a single centred, rotated text — or, when
|
|
18
|
+
// `tile` is on, a staggered grid of it repeated across the page. Honours font
|
|
19
|
+
// family/size/weight/style, colour, opacity, rotation and letter spacing.
|
|
20
|
+
function renderWatermark(wm, pageWidth, pageHeight) {
|
|
21
|
+
const text = (wm.text ?? "").trim();
|
|
22
|
+
if (!text)
|
|
23
|
+
return null;
|
|
24
|
+
const fontSize = wm.fontSize ?? 72;
|
|
25
|
+
const fontFamily = wm.fontFamily ?? "Helvetica";
|
|
26
|
+
const textStyle = {
|
|
27
|
+
fontFamily,
|
|
28
|
+
fontWeight: wm.bold ? "bold" : "normal",
|
|
29
|
+
fontStyle: wm.italic ? "italic" : "normal",
|
|
30
|
+
fontSize,
|
|
31
|
+
color: wm.color ?? "#000000",
|
|
32
|
+
opacity: wm.opacity ?? 0.12,
|
|
33
|
+
letterSpacing: wm.letterSpacing ?? 0,
|
|
34
|
+
transform: `rotate(${wm.rotation ?? -45}deg)`,
|
|
35
|
+
transformOrigin: "center",
|
|
36
|
+
};
|
|
37
|
+
// `fixed` keeps the overlay out of the page flow (so it never pushes content
|
|
38
|
+
// onto an extra page) while still painting on the page.
|
|
39
|
+
if (!wm.tile) {
|
|
40
|
+
return (_jsx(View, { fixed: true, style: { position: "absolute", top: 0, left: 0, right: 0, bottom: 0, justifyContent: "center", alignItems: "center" }, children: _jsx(Text, { style: textStyle, children: text }) }));
|
|
41
|
+
}
|
|
42
|
+
// Tiled: lay the text out on a staggered grid covering the page.
|
|
43
|
+
const textW = measureText(text, fontSize, fontFamily, !!wm.bold)
|
|
44
|
+
+ (wm.letterSpacing ?? 0) * Math.max(0, text.length - 1);
|
|
45
|
+
const stepX = Math.max(textW + fontSize * 2, fontSize * 6);
|
|
46
|
+
const stepY = fontSize * 3.2;
|
|
47
|
+
const cols = Math.ceil(pageWidth / stepX) + 2;
|
|
48
|
+
const rows = Math.ceil(pageHeight / stepY) + 2;
|
|
49
|
+
const tiles = [];
|
|
50
|
+
for (let r = 0; r < rows; r++) {
|
|
51
|
+
for (let c = 0; c < cols; c++) {
|
|
52
|
+
tiles.push(_jsx(Text, { style: {
|
|
53
|
+
...textStyle, position: "absolute",
|
|
54
|
+
left: c * stepX - stepX + (r % 2) * (stepX / 2),
|
|
55
|
+
top: r * stepY - stepY,
|
|
56
|
+
}, children: text }, `${r}-${c}`));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return (_jsx(View, { fixed: true, style: { position: "absolute", top: 0, left: 0, right: 0, bottom: 0, overflow: "hidden" }, children: tiles }));
|
|
60
|
+
}
|
|
61
|
+
// Whether a header/footer with the given display setting shows on page `i`.
|
|
62
|
+
function showsBand(display, i) {
|
|
63
|
+
if (display === "only-first-page")
|
|
64
|
+
return i === 0;
|
|
65
|
+
if (display === "no-first-page")
|
|
66
|
+
return i !== 0;
|
|
67
|
+
return true; // "always"
|
|
68
|
+
}
|
|
69
|
+
// Predicted rendered height of a single table row. A cell is a Text with
|
|
70
|
+
// lineHeight=1 (see elements.tsx), so its rendered height ≈ fontSize plus the
|
|
71
|
+
// font's metric overshoot, plus vertical padding on both sides and the row
|
|
72
|
+
// border. Matched against actual @react-pdf output (~18–19pt at fontSize 10,
|
|
73
|
+
// padding 4). The 1.15 factor + 1pt margin keep this a slight over-estimate so
|
|
74
|
+
// page-splitting and reflow never under-shoot (which would re-introduce overlap).
|
|
75
|
+
function estimateRowH(el) {
|
|
76
|
+
const fontSize = el.style?.fontSize ?? 10;
|
|
77
|
+
const padding = el.style?.padding ?? 4;
|
|
78
|
+
const border = el.style?.borderWidth ?? 0.5;
|
|
79
|
+
return Math.ceil(fontSize * 1.15 + padding * 2 + border) + 1;
|
|
80
|
+
}
|
|
81
|
+
function tableRows(el, data) {
|
|
82
|
+
return (el.previewRows
|
|
83
|
+
?? resolveArray(el.dataSource, data));
|
|
84
|
+
}
|
|
85
|
+
// Predicted rendered height of a table: header row + one row per data row.
|
|
86
|
+
function estimateTableH(el, data) {
|
|
87
|
+
const rowH = estimateRowH(el);
|
|
88
|
+
return rowH * (1 + tableRows(el, data).length);
|
|
89
|
+
}
|
|
90
|
+
function textFontSize(el) { return el.style?.fontSize ?? 12; }
|
|
91
|
+
// Rendered line pitch. Measured from @react-pdf output to be exactly
|
|
92
|
+
// fontSize × lineHeight (no metric overshoot), so use it as-is — floor() in the
|
|
93
|
+
// page-fill math already leaves sub-line slack for the last line's descender.
|
|
94
|
+
function textLineH(el) {
|
|
95
|
+
return textFontSize(el) * (el.style?.lineHeight ?? 1.2);
|
|
96
|
+
}
|
|
97
|
+
// Word-wrap plain-text content into display lines, measuring real widths so the
|
|
98
|
+
// breaks match what actually renders (full width, and page chunks fill the page).
|
|
99
|
+
// Over-long single words are hard-broken so a line never exceeds the box width.
|
|
100
|
+
function wrapText(content, width, fontSize, fontFamily, letterSpacing = 0) {
|
|
101
|
+
const spaceW = measureText(" ", fontSize, fontFamily, false, letterSpacing);
|
|
102
|
+
const out = [];
|
|
103
|
+
for (const para of content.split("\n")) {
|
|
104
|
+
let line = "", lineW = 0;
|
|
105
|
+
const flush = () => { out.push(line); line = ""; lineW = 0; };
|
|
106
|
+
for (const word of para.split(/\s+/)) {
|
|
107
|
+
if (!word)
|
|
108
|
+
continue;
|
|
109
|
+
if (measureText(word, fontSize, fontFamily, false, letterSpacing) > width) { // hard-break a long word
|
|
110
|
+
if (line)
|
|
111
|
+
flush();
|
|
112
|
+
let txt = word;
|
|
113
|
+
while (txt.length > 0) {
|
|
114
|
+
let i = 0, w = 0;
|
|
115
|
+
while (i < txt.length) {
|
|
116
|
+
const cw = measureText(txt[i], fontSize, fontFamily, false, letterSpacing);
|
|
117
|
+
if (w + cw > width && i > 0)
|
|
118
|
+
break;
|
|
119
|
+
w += cw;
|
|
120
|
+
i++;
|
|
121
|
+
}
|
|
122
|
+
line = txt.slice(0, i);
|
|
123
|
+
lineW = w;
|
|
124
|
+
txt = txt.slice(i);
|
|
125
|
+
if (txt.length > 0)
|
|
126
|
+
flush();
|
|
127
|
+
}
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
const ww = measureText(word, fontSize, fontFamily, false, letterSpacing);
|
|
131
|
+
if (line && lineW + spaceW + ww > width)
|
|
132
|
+
flush();
|
|
133
|
+
if (line) {
|
|
134
|
+
line += ` ${word}`;
|
|
135
|
+
lineW += spaceW + ww;
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
line = word;
|
|
139
|
+
lineW = ww;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
out.push(line);
|
|
143
|
+
}
|
|
144
|
+
return out;
|
|
145
|
+
}
|
|
146
|
+
function cap(el, n) {
|
|
147
|
+
return el.maxLines && el.maxLines > 0 ? Math.min(n, el.maxLines) : n;
|
|
148
|
+
}
|
|
149
|
+
// Plain-text element → wrapped string lines (capped at maxLines).
|
|
150
|
+
function textLines(el, data) {
|
|
151
|
+
const content = String(evaluate(el.content, data) ?? "");
|
|
152
|
+
const lines = wrapText(content, el.width, textFontSize(el), el.style?.fontFamily, el.style?.letterSpacing ?? 0);
|
|
153
|
+
return el.maxLines && el.maxLines > 0 ? lines.slice(0, el.maxLines) : lines;
|
|
154
|
+
}
|
|
155
|
+
// Richtext element → soft-wrapped lines (capped at maxLines). Used to find
|
|
156
|
+
// page-split boundaries; the renderer re-flows each chunk to full width.
|
|
157
|
+
function richLines(el, data) {
|
|
158
|
+
const html = String(evaluate(el.content, data) ?? "");
|
|
159
|
+
const lines = wrapRichText(parseRichText(html), el.width, textFontSize(el), el.style?.fontFamily, el.style?.letterSpacing ?? 0);
|
|
160
|
+
return el.maxLines && el.maxLines > 0 ? lines.slice(0, el.maxLines) : lines;
|
|
161
|
+
}
|
|
162
|
+
// Wrapped-line count, measured to match the real render — used for both the
|
|
163
|
+
// page-split decision and the reflow height estimate, so pages fill to the
|
|
164
|
+
// bottom and stacked auto-grow blocks sit flush.
|
|
165
|
+
function lineCount(el, data) {
|
|
166
|
+
return el.type === "richtext" ? richLines(el, data).length : textLines(el, data).length;
|
|
167
|
+
}
|
|
168
|
+
// Predicted rendered height of a text/richtext element (capped at maxLines).
|
|
169
|
+
function estimateTextH(el, data) {
|
|
170
|
+
return Math.ceil(lineCount(el, data) * textLineH(el));
|
|
171
|
+
}
|
|
172
|
+
// How much taller an element renders than its declared height (≥ 0). This is the
|
|
173
|
+
// amount the reflow pass must push subsequent elements down by. Only growable
|
|
174
|
+
// elements — tables and "show all lines" text — can overflow their box.
|
|
175
|
+
function overflowOf(el, data) {
|
|
176
|
+
if (el.type === "table") {
|
|
177
|
+
return Math.max(0, estimateTableH(el, data) - el.height);
|
|
178
|
+
}
|
|
179
|
+
if (el.type === "text" || el.type === "richtext") {
|
|
180
|
+
return Math.max(0, estimateTextH(el, data) - el.height);
|
|
181
|
+
}
|
|
182
|
+
return 0;
|
|
183
|
+
}
|
|
184
|
+
// Vertical reflow into ONE continuous tall canvas. Body elements are positioned
|
|
185
|
+
// at design-time y, but content-driven elements — a dataSource-bound table or a
|
|
186
|
+
// "show all lines" text block — render as tall as their actual content. We walk
|
|
187
|
+
// elements top-to-bottom and push everything below a grown element down by its
|
|
188
|
+
// overflow (so designed gaps are preserved and nothing overlaps); a manual
|
|
189
|
+
// pagebreak pushes following content to the next page boundary. The result is a
|
|
190
|
+
// single canvas taller than one page, which buildPageSlices then slices into
|
|
191
|
+
// page-height bands.
|
|
192
|
+
function reflowElements(elements, data, band) {
|
|
193
|
+
const order = elements
|
|
194
|
+
.map((el, i) => ({ el, i }))
|
|
195
|
+
.sort((a, b) => (a.el.y - b.el.y) || (a.i - b.i));
|
|
196
|
+
let shift = 0;
|
|
197
|
+
const newY = new Map();
|
|
198
|
+
for (const { el } of order) {
|
|
199
|
+
const y = el.y + shift;
|
|
200
|
+
newY.set(el.id, y);
|
|
201
|
+
if (el.type === "pagebreak") {
|
|
202
|
+
// Advance following content to the top of the next page.
|
|
203
|
+
shift += band.start(band.pageOf(y) + 1) - y;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
shift += overflowOf(el, data); // only push down — never pull content upward
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return elements.map((el) => ({ ...el, y: newY.get(el.id) ?? el.y }));
|
|
210
|
+
}
|
|
211
|
+
// Slice the continuous (reflowed) canvas into page bands. Each element is emitted
|
|
212
|
+
// onto the page(s) its content occupies; splittable content — text, richtext,
|
|
213
|
+
// tables — is broken exactly at page boundaries so pages fill to the bottom and
|
|
214
|
+
// content flows on without blank gaps. Bands may differ in height (e.g. a header
|
|
215
|
+
// hidden on later pages frees that space). Elements keep their absolute canvas y;
|
|
216
|
+
// each page subtracts its band start (yOffset) at render time.
|
|
217
|
+
function buildPageSlices(elements, data, band) {
|
|
218
|
+
const byPage = new Map();
|
|
219
|
+
let maxPage = 0;
|
|
220
|
+
const put = (p, el) => {
|
|
221
|
+
maxPage = Math.max(maxPage, p);
|
|
222
|
+
const arr = byPage.get(p);
|
|
223
|
+
if (arr)
|
|
224
|
+
arr.push(el);
|
|
225
|
+
else
|
|
226
|
+
byPage.set(p, [el]);
|
|
227
|
+
};
|
|
228
|
+
const bandBottomOf = (p) => band.start(p) + band.height(p);
|
|
229
|
+
for (const el of elements) {
|
|
230
|
+
if (el.type === "pagebreak")
|
|
231
|
+
continue;
|
|
232
|
+
if (el.type === "text" || el.type === "richtext") {
|
|
233
|
+
const txt = el;
|
|
234
|
+
// maxLines-capped text is bounded by design — place it whole on its band.
|
|
235
|
+
if (txt.maxLines && txt.maxLines > 0) {
|
|
236
|
+
put(band.pageOf(txt.y), el);
|
|
237
|
+
continue;
|
|
238
|
+
}
|
|
239
|
+
const lineH = textLineH(txt);
|
|
240
|
+
const isRich = el.type === "richtext";
|
|
241
|
+
const rlines = isRich ? richLines(txt, data) : null;
|
|
242
|
+
const plines = isRich ? null : textLines(txt, data);
|
|
243
|
+
const n = isRich ? rlines.length : plines.length;
|
|
244
|
+
// Group consecutive lines that fall within the same page band.
|
|
245
|
+
let i = 0;
|
|
246
|
+
while (i < n) {
|
|
247
|
+
const p = band.pageOf(txt.y + i * lineH);
|
|
248
|
+
const bandBottom = bandBottomOf(p);
|
|
249
|
+
let j = i;
|
|
250
|
+
while (j < n && txt.y + (j + 1) * lineH <= bandBottom + 0.5)
|
|
251
|
+
j++;
|
|
252
|
+
if (j === i)
|
|
253
|
+
j = i + 1; // always make progress
|
|
254
|
+
const chunkY = txt.y + i * lineH;
|
|
255
|
+
// For justified plain text, join with a space so the PDF engine can
|
|
256
|
+
// re-flow the chunk naturally and apply inter-word spacing. A "\n" join
|
|
257
|
+
// turns every soft-wrap into a hard break, which the engine won't justify.
|
|
258
|
+
const joinSep = (!isRich && txt.style?.textAlign === "justify") ? " " : "\n";
|
|
259
|
+
put(p, isRich
|
|
260
|
+
? { ...txt, y: chunkY, previewLines: rlines.slice(i, j) }
|
|
261
|
+
: { ...txt, y: chunkY, content: plines.slice(i, j).join(joinSep) });
|
|
262
|
+
i = j;
|
|
263
|
+
}
|
|
264
|
+
continue;
|
|
265
|
+
}
|
|
266
|
+
if (el.type === "table") {
|
|
267
|
+
const tbl = el;
|
|
268
|
+
const rows = tableRows(tbl, data);
|
|
269
|
+
if (rows.length === 0) {
|
|
270
|
+
put(band.pageOf(tbl.y), el);
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
const rowH = estimateRowH(tbl);
|
|
274
|
+
const hdrH = rowH; // header row repeats atop each continuation
|
|
275
|
+
let i = 0;
|
|
276
|
+
let startY = tbl.y;
|
|
277
|
+
while (i < rows.length) {
|
|
278
|
+
const p = band.pageOf(startY);
|
|
279
|
+
const avail = bandBottomOf(p) - startY;
|
|
280
|
+
const fit = Math.max(1, Math.floor((avail - hdrH) / rowH));
|
|
281
|
+
put(p, { ...tbl, y: startY, previewRows: rows.slice(i, i + fit) });
|
|
282
|
+
i += fit;
|
|
283
|
+
startY = bandBottomOf(p); // continuation starts at the next band top
|
|
284
|
+
}
|
|
285
|
+
continue;
|
|
286
|
+
}
|
|
287
|
+
// Non-splittable element (image, chart, rect, line, qr, barcode): place it on
|
|
288
|
+
// the band of its top edge.
|
|
289
|
+
put(band.pageOf(el.y), el);
|
|
290
|
+
}
|
|
291
|
+
const pages = [];
|
|
292
|
+
for (let p = 0; p <= maxPage; p++) {
|
|
293
|
+
pages.push({ els: byPage.get(p) ?? [], yOffset: band.start(p) });
|
|
294
|
+
}
|
|
295
|
+
return pages;
|
|
296
|
+
}
|
|
297
|
+
export function ReportDocument({ template, data }) {
|
|
298
|
+
const pageConfig = template.page ?? {};
|
|
299
|
+
const size = pageConfig.size ?? "A4";
|
|
300
|
+
const orientation = pageConfig.orientation ?? "portrait";
|
|
301
|
+
const margin = pageConfig.margin ?? { top: 20, right: 20, bottom: 20, left: 20 };
|
|
302
|
+
const [cw, ch] = CANVAS_SIZES[size] ?? CANVAS_SIZES["A4"];
|
|
303
|
+
const [pw, ph] = orientation === "landscape" ? [ch, cw] : [cw, ch];
|
|
304
|
+
const pageWidth = pw;
|
|
305
|
+
// Output pages are always the selected size. A larger `customHeight` is a taller
|
|
306
|
+
// DESIGN canvas (where elements can be placed past page one); that tall content
|
|
307
|
+
// paginates into pages of the selected size rather than becoming one giant page.
|
|
308
|
+
const pageHeight = ph;
|
|
309
|
+
const headerEnabled = template.header?.enabled !== false;
|
|
310
|
+
const footerEnabled = template.footer?.enabled !== false;
|
|
311
|
+
const headerH = headerEnabled ? (template.header?.height ?? DEFAULT_HEADER_H) : 0;
|
|
312
|
+
const footerH = footerEnabled ? (template.footer?.height ?? DEFAULT_FOOTER_H) : 0;
|
|
313
|
+
const contentW = pageWidth - margin.left - margin.right;
|
|
314
|
+
const headerEls = template.header?.elements ?? [];
|
|
315
|
+
const footerEls = template.footer?.elements ?? [];
|
|
316
|
+
const headerDisplay = template.header?.display ?? "always";
|
|
317
|
+
const footerDisplay = template.footer?.display ?? "always";
|
|
318
|
+
// Whether a header/footer with the given display setting shows on page `i`.
|
|
319
|
+
const headerShownOn = (i) => headerEnabled && showsBand(headerDisplay, i);
|
|
320
|
+
const footerShownOn = (i) => footerEnabled && showsBand(footerDisplay, i);
|
|
321
|
+
// Usable body height per page — pages that hide the header and/or footer get
|
|
322
|
+
// that space back. Display rules only single out page 0, so there are two
|
|
323
|
+
// distinct heights (page 0 vs the rest); build the band geometry from them.
|
|
324
|
+
const bodyHAt = (i) => Math.max(1, pageHeight - margin.top - margin.bottom
|
|
325
|
+
- (headerShownOn(i) ? headerH : 0)
|
|
326
|
+
- (footerShownOn(i) ? footerH : 0));
|
|
327
|
+
const H0 = bodyHAt(0);
|
|
328
|
+
const Hrest = bodyHAt(1);
|
|
329
|
+
const band = {
|
|
330
|
+
height: (p) => (p <= 0 ? H0 : Hrest),
|
|
331
|
+
start: (p) => (p <= 0 ? 0 : H0 + (p - 1) * Hrest),
|
|
332
|
+
pageOf: (y) => (y < H0 ? 0 : 1 + Math.floor((y - H0) / Hrest)),
|
|
333
|
+
};
|
|
334
|
+
const bodyEls = reflowElements(template.body.elements, data, band);
|
|
335
|
+
const pages = buildPageSlices(bodyEls, data, band);
|
|
336
|
+
const wm = pageConfig.watermark;
|
|
337
|
+
const wmText = (wm?.text ?? "").trim();
|
|
338
|
+
const wmOn = (wm?.enabled ?? false) && wmText.length > 0;
|
|
339
|
+
// Use an absolutely positioned content wrapper instead of page padding so
|
|
340
|
+
// all four margins are applied consistently by the PDF engine (page-level
|
|
341
|
+
// padding in @react-pdf/renderer can be unreliable for left/bottom edges).
|
|
342
|
+
const contentInset = {
|
|
343
|
+
position: "absolute",
|
|
344
|
+
top: margin.top,
|
|
345
|
+
left: margin.left,
|
|
346
|
+
right: margin.right,
|
|
347
|
+
bottom: margin.bottom,
|
|
348
|
+
flexDirection: "column",
|
|
349
|
+
};
|
|
350
|
+
return (_jsx(Document, { children: pages.map(({ els, yOffset }, i) => (_jsxs(Page, { size: [pageWidth, pageHeight], children: [_jsxs(View, { style: contentInset, children: [headerShownOn(i) && (_jsx(View, { style: { width: contentW, height: headerH, position: "relative", flexShrink: 0 }, children: headerEls.map((el) => renderElement(el, data)) })), _jsx(View, { style: { width: contentW, height: band.height(i), position: "relative", flexShrink: 0 }, children: els.map((el) => renderElement(el, data, yOffset)) }), footerShownOn(i) && (_jsx(View, { style: { width: contentW, height: footerH, position: "relative", flexShrink: 0 }, children: footerEls.map((el) => renderElement(el, data)) }))] }), wmOn && renderWatermark(wm, pageWidth, pageHeight)] }, i))) }));
|
|
351
|
+
}
|
|
352
|
+
//# sourceMappingURL=document.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"document.js","sourceRoot":"","sources":["../src/document.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ReportElement } from "@veztraa/report-core";
|
|
3
|
+
type Data = Record<string, unknown>;
|
|
4
|
+
export declare function renderElement(el: ReportElement, data: Data, yOffset?: number): React.ReactNode;
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=elements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elements.d.ts","sourceRoot":"","sources":["../src/elements.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EACV,aAAa,EACd,MAAM,sBAAsB,CAAC;AAI9B,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA8SpC,wBAAgB,aAAa,CAAC,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,SAAI,GAAG,KAAK,CAAC,SAAS,CA6UzF"}
|