@pdfme/common 5.5.7 → 5.5.8-dev.14

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.
@@ -1,280 +1,224 @@
1
1
  import { cloneDeep, isBlankPdf } from './helper.js';
2
- class LayoutNode {
3
- constructor({ width = 0, height = 0 } = {}) {
4
- Object.defineProperty(this, "index", {
5
- enumerable: true,
6
- configurable: true,
7
- writable: true,
8
- value: 0
9
- });
10
- Object.defineProperty(this, "schema", {
11
- enumerable: true,
12
- configurable: true,
13
- writable: true,
14
- value: void 0
15
- });
16
- Object.defineProperty(this, "children", {
17
- enumerable: true,
18
- configurable: true,
19
- writable: true,
20
- value: []
21
- });
22
- Object.defineProperty(this, "width", {
23
- enumerable: true,
24
- configurable: true,
25
- writable: true,
26
- value: 0
27
- });
28
- Object.defineProperty(this, "height", {
29
- enumerable: true,
30
- configurable: true,
31
- writable: true,
32
- value: 0
33
- });
34
- Object.defineProperty(this, "padding", {
35
- enumerable: true,
36
- configurable: true,
37
- writable: true,
38
- value: [0, 0, 0, 0]
39
- });
40
- Object.defineProperty(this, "position", {
41
- enumerable: true,
42
- configurable: true,
43
- writable: true,
44
- value: { x: 0, y: 0 }
2
+ /** Floating point tolerance for comparisons */
3
+ const EPSILON = 0.01;
4
+ /** Calculate the content height of a page (drawable area excluding padding) */
5
+ const getContentHeight = (basePdf) => basePdf.height - basePdf.padding[0] - basePdf.padding[2];
6
+ /** Get the input value for a schema */
7
+ const getSchemaValue = (schema, input) => (schema.readOnly ? schema.content : input?.[schema.name]) || '';
8
+ /**
9
+ * Normalize schemas within a single page into layout items.
10
+ * Returns items sorted by Y coordinate with their order preserved.
11
+ */
12
+ function normalizePageSchemas(pageSchemas, paddingTop) {
13
+ const items = [];
14
+ const orderMap = new Map();
15
+ pageSchemas.forEach((schema, index) => {
16
+ const localY = schema.position.y - paddingTop;
17
+ items.push({
18
+ schema: cloneDeep(schema),
19
+ baseY: localY,
20
+ height: schema.height,
21
+ dynamicHeights: [schema.height], // Will be updated later
45
22
  });
46
- this.width = width;
47
- this.height = height;
48
- }
49
- setIndex(index) {
50
- this.index = index;
51
- }
52
- setSchema(schema) {
53
- this.schema = schema;
54
- }
55
- setWidth(width) {
56
- this.width = width;
57
- }
58
- setHeight(height) {
59
- this.height = height;
60
- }
61
- setPadding(padding) {
62
- this.padding = padding;
63
- }
64
- setPosition(position) {
65
- this.position = position;
66
- }
67
- insertChild(child) {
68
- const index = this.getChildCount();
69
- child.setIndex(index);
70
- this.children.splice(index, 0, child);
71
- }
72
- getChildCount() {
73
- return this.children.length;
74
- }
75
- getChild(index) {
76
- return this.children[index];
77
- }
78
- }
79
- function createPage(basePdf) {
80
- const page = new LayoutNode({ ...basePdf });
81
- page.setPadding(basePdf.padding);
82
- return page;
83
- }
84
- function createNode(arg) {
85
- const { position, width, height, schema } = arg;
86
- const node = new LayoutNode({ width, height });
87
- node.setPosition(position);
88
- node.setSchema(schema);
89
- return node;
90
- }
91
- function resortChildren(page, orderMap) {
92
- page.children = page.children
93
- .sort((a, b) => {
94
- const orderA = orderMap.get(a.schema?.name ?? '');
95
- const orderB = orderMap.get(b.schema?.name ?? '');
96
- if (orderA === undefined || orderB === undefined) {
97
- throw new Error('[@pdfme/common] order is not defined');
23
+ orderMap.set(schema.name, index);
24
+ });
25
+ // Sort by Y coordinate (preserve original order for same position)
26
+ items.sort((a, b) => {
27
+ if (Math.abs(a.baseY - b.baseY) > EPSILON) {
28
+ return a.baseY - b.baseY;
98
29
  }
99
- return orderA - orderB;
100
- })
101
- .map((child, index) => {
102
- child.setIndex(index);
103
- return child;
30
+ return (orderMap.get(a.schema.name) ?? 0) - (orderMap.get(b.schema.name) ?? 0);
104
31
  });
32
+ return { items, orderMap };
105
33
  }
106
- async function createOnePage(arg) {
107
- const { basePdf, schemaPage, orderMap, input, options, _cache, getDynamicHeights } = arg;
108
- const page = createPage(basePdf);
109
- const schemaPositions = [];
110
- const sortedSchemaEntries = cloneDeep(schemaPage).sort((a, b) => a.position.y - b.position.y);
111
- const diffMap = new Map();
112
- for (const schema of sortedSchemaEntries) {
113
- const { position, width } = schema;
114
- const opt = { schema, basePdf, options, _cache };
115
- const value = (schema.readOnly ? schema.content : input?.[schema.name]) || '';
116
- const heights = await getDynamicHeights(value, opt);
117
- const heightsSum = heights.reduce((acc, cur) => acc + cur, 0);
118
- const originalHeight = schema.height;
119
- if (heightsSum !== originalHeight) {
120
- diffMap.set(position.y + originalHeight, heightsSum - originalHeight);
34
+ /**
35
+ * Place rows on pages, splitting across pages as needed.
36
+ * @returns The final global Y coordinate after placement
37
+ */
38
+ function placeRowsOnPages(schema, dynamicHeights, startGlobalY, contentHeight, paddingTop, pages) {
39
+ let currentRowIndex = 0;
40
+ let currentPageIndex = Math.floor(startGlobalY / contentHeight);
41
+ let currentYInPage = startGlobalY % contentHeight;
42
+ if (currentYInPage < 0)
43
+ currentYInPage = 0;
44
+ let actualGlobalEndY = 0;
45
+ const isSplittable = dynamicHeights.length > 1;
46
+ while (currentRowIndex < dynamicHeights.length) {
47
+ // Ensure page exists
48
+ while (pages.length <= currentPageIndex)
49
+ pages.push([]);
50
+ const spaceLeft = contentHeight - currentYInPage;
51
+ const rowHeight = dynamicHeights[currentRowIndex];
52
+ // If row doesn't fit, move to next page
53
+ if (rowHeight > spaceLeft + EPSILON) {
54
+ const isAtPageStart = Math.abs(spaceLeft - contentHeight) <= EPSILON;
55
+ if (!isAtPageStart) {
56
+ currentPageIndex++;
57
+ currentYInPage = 0;
58
+ continue;
59
+ }
60
+ // Force placement for oversized rows that don't fit even on a fresh page
121
61
  }
122
- heights.forEach((height, index) => {
123
- let y = schema.position.y + heights.reduce((acc, cur, i) => (i < index ? acc + cur : acc), 0);
124
- for (const [diffY, diff] of diffMap.entries()) {
125
- if (diffY <= schema.position.y) {
126
- y += diff;
127
- }
62
+ // Pack as many rows as possible on this page
63
+ let chunkHeight = 0;
64
+ const startRowIndex = currentRowIndex;
65
+ while (currentRowIndex < dynamicHeights.length) {
66
+ const h = dynamicHeights[currentRowIndex];
67
+ if (currentYInPage + chunkHeight + h <= contentHeight + EPSILON) {
68
+ chunkHeight += h;
69
+ currentRowIndex++;
128
70
  }
129
- const node = createNode({ schema, position: { ...position, y }, width, height });
130
- schemaPositions.push(y + height + basePdf.padding[2]);
131
- page.insertChild(node);
132
- });
133
- }
134
- const pageHeight = Math.max(...schemaPositions, basePdf.height - basePdf.padding[2]);
135
- page.setHeight(pageHeight);
136
- resortChildren(page, orderMap);
137
- return page;
138
- }
139
- function breakIntoPages(arg) {
140
- const { longPage, orderMap, basePdf } = arg;
141
- const pages = [createPage(basePdf)];
142
- const [paddingTop, , paddingBottom] = basePdf.padding;
143
- const yAdjustments = [];
144
- const getPageHeight = (pageIndex) => basePdf.height - paddingBottom - (pageIndex > 0 ? paddingTop : 0);
145
- const calculateNewY = (y, pageIndex) => {
146
- const newY = y - pageIndex * (basePdf.height - paddingTop - paddingBottom);
147
- while (pages.length <= pageIndex) {
148
- if (!pages[pageIndex]) {
149
- pages.push(createPage(basePdf));
150
- yAdjustments.push({ page: pageIndex, value: (newY - paddingTop) * -1 });
71
+ else {
72
+ break;
151
73
  }
152
74
  }
153
- return newY + (yAdjustments.find((adj) => adj.page === pageIndex)?.value || 0);
154
- };
155
- const calculateTargetPageIndex = (y) => {
156
- let accumulatedHeight = 0;
157
- let pageIndex = 0;
158
- while (true) {
159
- const currentPageHeight = getPageHeight(pageIndex);
160
- if (y <= accumulatedHeight + currentPageHeight) {
161
- return pageIndex;
162
- }
163
- accumulatedHeight += currentPageHeight;
164
- pageIndex++;
75
+ // Don't leave header alone on a page without any data rows
76
+ // If only header fits and there are data rows remaining, move everything to next page
77
+ // BUT: if already at page top, don't move (prevents infinite loop when data row is too large)
78
+ const isAtPageTop = currentYInPage <= EPSILON;
79
+ if (isSplittable &&
80
+ startRowIndex === 0 &&
81
+ currentRowIndex === 1 &&
82
+ dynamicHeights.length > 1 &&
83
+ !isAtPageTop) {
84
+ currentRowIndex = 0;
85
+ currentPageIndex++;
86
+ currentYInPage = 0;
87
+ continue;
165
88
  }
166
- };
167
- const children = longPage.children.sort((a, b) => a.position.y - b.position.y);
168
- let currentPageIndex = 0;
169
- for (let i = 0; i < children.length; i++) {
170
- const { schema, position, height, width } = children[i];
171
- const { y, x } = position;
172
- let targetPageIndex = calculateTargetPageIndex(y);
173
- if (targetPageIndex < currentPageIndex) {
174
- targetPageIndex = currentPageIndex;
89
+ // Force at least one row to prevent infinite loop
90
+ if (currentRowIndex === startRowIndex) {
91
+ chunkHeight += dynamicHeights[currentRowIndex];
92
+ currentRowIndex++;
175
93
  }
176
- let newY = calculateNewY(y, targetPageIndex);
177
- while (newY + height > basePdf.height - paddingBottom) {
178
- const currentPageContentHeight = getPageHeight(targetPageIndex + 1);
179
- if (height > currentPageContentHeight) {
180
- targetPageIndex++;
181
- newY = calculateNewY(y, targetPageIndex);
182
- break;
183
- }
184
- targetPageIndex++;
185
- newY = calculateNewY(y, targetPageIndex);
94
+ // Create schema for this chunk
95
+ const newSchema = {
96
+ ...schema,
97
+ height: chunkHeight,
98
+ position: { ...schema.position, y: currentYInPage + paddingTop },
99
+ };
100
+ // Set bodyRange for splittable elements
101
+ // dynamicHeights[0] = header row, dynamicHeights[1] = body[0]
102
+ // So subtract 1 to convert to body index
103
+ if (isSplittable) {
104
+ newSchema.__bodyRange = {
105
+ start: startRowIndex === 0 ? 0 : startRowIndex - 1,
106
+ end: currentRowIndex - 1,
107
+ };
108
+ newSchema.__isSplit = startRowIndex > 0;
109
+ }
110
+ pages[currentPageIndex].push(newSchema);
111
+ // Update position
112
+ currentYInPage += chunkHeight;
113
+ if (currentYInPage >= contentHeight - EPSILON) {
114
+ currentPageIndex++;
115
+ currentYInPage = 0;
186
116
  }
187
- currentPageIndex = targetPageIndex;
188
- if (!schema)
189
- throw new Error('[@pdfme/common] schema is undefined');
190
- const clonedElement = createNode({ schema, position: { x, y: newY }, width, height });
191
- pages[targetPageIndex].insertChild(clonedElement);
117
+ actualGlobalEndY = currentPageIndex * contentHeight + currentYInPage;
192
118
  }
193
- pages.forEach((page) => resortChildren(page, orderMap));
194
- return pages;
119
+ return actualGlobalEndY;
195
120
  }
196
- function createNewTemplate(pages, basePdf) {
197
- const newTemplate = {
198
- schemas: Array.from({ length: pages.length }, () => []),
199
- basePdf: basePdf,
200
- };
201
- const nameToSchemas = new Map();
202
- cloneDeep(pages).forEach((page, pageIndex) => {
203
- page.children.forEach((child) => {
204
- const { schema } = child;
205
- if (!schema)
206
- throw new Error('[@pdfme/common] schema is undefined');
207
- const name = schema.name;
208
- if (!nameToSchemas.has(name)) {
209
- nameToSchemas.set(name, []);
210
- }
211
- nameToSchemas.get(name).push(child);
212
- const sameNameSchemas = page.children.filter((c) => c.schema?.name === name);
213
- const start = nameToSchemas.get(name).length - sameNameSchemas.length;
214
- if (sameNameSchemas.length > 0) {
215
- if (!sameNameSchemas[0].schema) {
216
- throw new Error('[@pdfme/common] schema is undefined');
217
- }
218
- // Use the first schema to get the schema and position
219
- const schema = sameNameSchemas[0].schema;
220
- const height = sameNameSchemas.reduce((acc, cur) => acc + cur.height, 0);
221
- const position = sameNameSchemas[0].position;
222
- // Currently, __bodyRange exists for table schemas, but if we make it more abstract,
223
- // it could be used for other schemas as well to render schemas that have been split by page breaks, starting from the middle.
224
- schema.__bodyRange = {
225
- start: Math.max(start - 1, 0),
226
- end: start + sameNameSchemas.length - 1,
227
- };
228
- // Currently, this is used to determine whether to display the header when a table is split.
229
- schema.__isSplit = start > 0;
230
- const newSchema = Object.assign({}, schema, { position, height });
231
- const index = newTemplate.schemas[pageIndex].findIndex((s) => s.name === name);
232
- if (index !== -1) {
233
- newTemplate.schemas[pageIndex][index] = newSchema;
234
- }
235
- else {
236
- newTemplate.schemas[pageIndex].push(newSchema);
237
- }
238
- }
239
- });
121
+ /** Sort elements within each page by their original order */
122
+ function sortPagesByOrder(pages, orderMap) {
123
+ pages.forEach((page) => {
124
+ page.sort((a, b) => (orderMap.get(a.name) ?? 0) - (orderMap.get(b.name) ?? 0));
240
125
  });
241
- return newTemplate;
242
126
  }
243
- function flattenSchemasWithOffset(templateSchemas, basePdf) {
244
- const flatSchemas = [];
245
- const orderMap = new Map();
246
- let globalOrder = 0;
247
- const [paddingTop, , paddingBottom] = basePdf.padding;
248
- const getPageHeight = (pageIndex) => basePdf.height - paddingBottom - (pageIndex > 0 ? paddingTop : 0);
249
- let yOffset = 0;
250
- templateSchemas.forEach((schemaPage, pageIndex) => {
251
- if (pageIndex > 0)
252
- yOffset += getPageHeight(pageIndex - 1);
253
- schemaPage.forEach((schema) => {
254
- const clonedSchema = cloneDeep(schema);
255
- clonedSchema.position = { ...clonedSchema.position, y: clonedSchema.position.y + yOffset };
256
- flatSchemas.push(clonedSchema);
257
- if (!orderMap.has(schema.name)) {
258
- orderMap.set(schema.name, globalOrder++);
259
- }
260
- });
261
- });
262
- return { flatSchemas, orderMap };
127
+ /** Remove trailing empty pages */
128
+ function removeTrailingEmptyPages(pages) {
129
+ while (pages.length > 1 && pages[pages.length - 1].length === 0) {
130
+ pages.pop();
131
+ }
263
132
  }
133
+ /**
134
+ * Process a single template page that has dynamic content.
135
+ * Uses the same layout algorithm as the original implementation,
136
+ * but scoped to a single page's schemas.
137
+ */
138
+ function processDynamicPage(items, orderMap, contentHeight, paddingTop) {
139
+ const pages = [];
140
+ let totalYOffset = 0;
141
+ for (const item of items) {
142
+ const currentGlobalStartY = item.baseY + totalYOffset;
143
+ const actualGlobalEndY = placeRowsOnPages(item.schema, item.dynamicHeights, currentGlobalStartY, contentHeight, paddingTop, pages);
144
+ // Update offset: difference between actual and original end position
145
+ const originalGlobalEndY = item.baseY + item.height;
146
+ totalYOffset = actualGlobalEndY - originalGlobalEndY;
147
+ }
148
+ sortPagesByOrder(pages, orderMap);
149
+ removeTrailingEmptyPages(pages);
150
+ return pages;
151
+ }
152
+ /**
153
+ * Process a template containing tables with dynamic heights
154
+ * and generate a new template with proper page breaks.
155
+ *
156
+ * Processing is done page-by-page:
157
+ * - Pages with height changes are processed with full layout calculations
158
+ * - Pages without height changes are copied as-is (no offset propagation between pages)
159
+ *
160
+ * This reduces computation cost by:
161
+ * 1. Limiting layout calculations to pages that need them
162
+ * 2. Avoiding cross-page offset propagation for static pages
163
+ */
264
164
  export const getDynamicTemplate = async (arg) => {
265
- const { template, ...rest } = arg;
165
+ const { template, input, options, _cache, getDynamicHeights } = arg;
266
166
  const basePdf = template.basePdf;
267
167
  if (!isBlankPdf(basePdf)) {
268
168
  return template;
269
169
  }
270
- const { flatSchemas, orderMap } = flattenSchemasWithOffset(template.schemas, basePdf);
271
- const longPage = await createOnePage({
272
- basePdf,
273
- schemaPage: flatSchemas,
274
- orderMap,
275
- ...rest,
276
- });
277
- const pages = breakIntoPages({ longPage, basePdf, orderMap });
278
- return createNewTemplate(pages, basePdf);
170
+ const contentHeight = getContentHeight(basePdf);
171
+ const paddingTop = basePdf.padding[0];
172
+ const resultPages = [];
173
+ const PARALLEL_LIMIT = 10;
174
+ // Process each template page independently
175
+ for (let pageIndex = 0; pageIndex < template.schemas.length; pageIndex++) {
176
+ const pageSchemas = template.schemas[pageIndex];
177
+ // Normalize this page's schemas
178
+ const { items, orderMap } = normalizePageSchemas(pageSchemas, paddingTop);
179
+ // Calculate dynamic heights for this page's schemas with concurrency limit
180
+ for (let i = 0; i < items.length; i += PARALLEL_LIMIT) {
181
+ const chunk = items.slice(i, i + PARALLEL_LIMIT);
182
+ const chunkResults = await Promise.all(chunk.map((item) => {
183
+ const value = getSchemaValue(item.schema, input);
184
+ return getDynamicHeights(value, {
185
+ schema: item.schema,
186
+ basePdf,
187
+ options,
188
+ _cache,
189
+ }).then((heights) => (heights.length === 0 ? [0] : heights));
190
+ }));
191
+ // Update items with calculated heights
192
+ for (let j = 0; j < chunkResults.length; j++) {
193
+ items[i + j].dynamicHeights = chunkResults[j];
194
+ }
195
+ }
196
+ // Process all pages independently (no cross-page offset propagation)
197
+ const processedPages = processDynamicPage(items, orderMap, contentHeight, paddingTop);
198
+ resultPages.push(...processedPages);
199
+ }
200
+ removeTrailingEmptyPages(resultPages);
201
+ // Check if anything changed - return original template if not
202
+ if (resultPages.length === template.schemas.length) {
203
+ let unchanged = true;
204
+ for (let i = 0; i < resultPages.length && unchanged; i++) {
205
+ if (resultPages[i].length !== template.schemas[i].length) {
206
+ unchanged = false;
207
+ break;
208
+ }
209
+ for (let j = 0; j < resultPages[i].length && unchanged; j++) {
210
+ const orig = template.schemas[i][j];
211
+ const result = resultPages[i][j];
212
+ if (Math.abs(orig.height - result.height) > EPSILON ||
213
+ Math.abs(orig.position.y - result.position.y) > EPSILON) {
214
+ unchanged = false;
215
+ }
216
+ }
217
+ }
218
+ if (unchanged) {
219
+ return template;
220
+ }
221
+ }
222
+ return { basePdf, schemas: resultPages };
279
223
  };
280
224
  //# sourceMappingURL=dynamicTemplate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dynamicTemplate.js","sourceRoot":"","sources":["../../../src/dynamicTemplate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dynamicTemplate.js","sourceRoot":"","sources":["../../../src/dynamicTemplate.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export const PDFME_VERSION = '5.5.7';
1
+ export const PDFME_VERSION = '5.5.8';
2
2
  //# sourceMappingURL=version.js.map
@@ -114,7 +114,9 @@ describe('getDynamicTemplate', () => {
114
114
  expect(dynamicTemplate.schemas[0][0].name).toEqual('a');
115
115
  expect(dynamicTemplate.schemas[0][1]).toBeUndefined();
116
116
  expect(dynamicTemplate.schemas[1][0].name).toEqual('b');
117
- expect(dynamicTemplate.schemas[1][0].position.y).toEqual(padding);
117
+ // b maintains its relative offset from a's end position
118
+ // a ends at y=90 (page content), b was 20 units below a, so b is at y=10 in page coords + padding = 20
119
+ expect(dynamicTemplate.schemas[1][0].position.y).toEqual(padding + padding);
118
120
  expect(dynamicTemplate.schemas[1][1]).toBeUndefined();
119
121
  });
120
122
  test('should handle page break with a on page 1 and 2, b on page 2', async () => {
@@ -209,9 +211,12 @@ describe('getDynamicTemplate', () => {
209
211
  const dynamicTemplate = await (0, dynamicTemplate_js_1.getDynamicTemplate)(createGetDynamicTemplateArg(increaseHeights));
210
212
  verifyBasicStructure(dynamicTemplate);
211
213
  expect(dynamicTemplate.schemas.length).toBe(1);
214
+ // Both schemas are placed; 'a' with height 0, 'b' follows
212
215
  expect(dynamicTemplate.schemas[0][0]).toBeDefined();
213
- expect(dynamicTemplate.schemas[0][0].name).toEqual('b');
214
- expect(dynamicTemplate.schemas[0][1]).toBeUndefined();
216
+ expect(dynamicTemplate.schemas[0][0].name).toEqual('a');
217
+ expect(dynamicTemplate.schemas[0][0].height).toEqual(0);
218
+ expect(dynamicTemplate.schemas[0][1]).toBeDefined();
219
+ expect(dynamicTemplate.schemas[0][1].name).toEqual('b');
215
220
  });
216
221
  test('should handle very large increase heights', async () => {
217
222
  const increaseHeights = [1000, 1000];
@@ -221,7 +226,10 @@ describe('getDynamicTemplate', () => {
221
226
  });
222
227
  });
223
228
  describe('Long page flow (cross-template-page)', () => {
224
- test('should flow table and text across template pages without extra blank pages', async () => {
229
+ test('should process pages independently - static pages are added as-is without offset propagation', async () => {
230
+ // New behavior: pages without dynamic content are added as-is,
231
+ // without being affected by previous page's table expansion.
232
+ // This reduces computation cost by skipping layout calculations for static pages.
225
233
  const templateWithTwoPages = {
226
234
  schemas: [
227
235
  [
@@ -254,21 +262,75 @@ describe('getDynamicTemplate', () => {
254
262
  _cache: new Map(),
255
263
  getDynamicHeights: async (value, args) => {
256
264
  if (args.schema.type === 'table') {
257
- return [10, 10, 10, 10];
265
+ return [10, 10, 10, 10]; // 40 total height, will cause page break
258
266
  }
259
267
  return [args.schema.height];
260
268
  },
261
269
  });
262
270
  verifyBasicStructure(dynamicTemplate);
263
- expect(dynamicTemplate.schemas.length).toBe(2);
271
+ // Page 1: table starts at y=60, with 40 height, will split across pages
272
+ // Page 2: table continuation
273
+ // Page 3: text from template page 2 (added as-is, no offset propagation)
274
+ expect(dynamicTemplate.schemas.length).toBe(3);
275
+ // First page has table
264
276
  expect(dynamicTemplate.schemas[0].some((s) => s.name === 'table')).toBe(true);
277
+ // Second page has table continuation
265
278
  expect(dynamicTemplate.schemas[1].some((s) => s.name === 'table')).toBe(true);
266
- expect(dynamicTemplate.schemas[1].some((s) => s.name === 'text')).toBe(true);
267
- const tableOnPage2 = dynamicTemplate.schemas[1].find((s) => s.name === 'table');
268
- const textOnPage2 = dynamicTemplate.schemas[1].find((s) => s.name === 'text');
269
- expect(tableOnPage2).toBeDefined();
270
- expect(textOnPage2).toBeDefined();
271
- expect(textOnPage2.position.y).toBeGreaterThan(tableOnPage2.position.y);
279
+ // Third page has text (from template page 2, added as-is)
280
+ expect(dynamicTemplate.schemas[2].some((s) => s.name === 'text')).toBe(true);
281
+ // Text position should be unchanged from template (y=10)
282
+ const textOnPage3 = dynamicTemplate.schemas[2].find((s) => s.name === 'text');
283
+ expect(textOnPage3).toBeDefined();
284
+ expect(textOnPage3.position.y).toBe(10);
285
+ });
286
+ test('should keep static page schemas together with dynamic page when both on same template page', async () => {
287
+ // When table and text are on the SAME template page, they should be processed together
288
+ const templateWithOnePage = {
289
+ schemas: [
290
+ [
291
+ {
292
+ name: 'table',
293
+ content: 'table',
294
+ type: 'table',
295
+ position: { x: 10, y: 10 },
296
+ width: 80,
297
+ height: 10,
298
+ },
299
+ {
300
+ name: 'text',
301
+ content: 'text',
302
+ type: 'text',
303
+ position: { x: 10, y: 30 },
304
+ width: 80,
305
+ height: 10,
306
+ },
307
+ ],
308
+ ],
309
+ basePdf: { width: 100, height: 100, padding: [10, 10, 10, 10] },
310
+ };
311
+ const dynamicTemplate = await (0, dynamicTemplate_js_1.getDynamicTemplate)({
312
+ template: templateWithOnePage,
313
+ input: { table: 'table', text: 'text' },
314
+ options: { font: getSampleFont() },
315
+ _cache: new Map(),
316
+ getDynamicHeights: async (value, args) => {
317
+ if (args.schema.type === 'table') {
318
+ return [10, 10, 10, 10]; // 40 total height
319
+ }
320
+ return [args.schema.height];
321
+ },
322
+ });
323
+ verifyBasicStructure(dynamicTemplate);
324
+ // Table expands from 10 to 40, pushing text down by 30
325
+ // Both should still fit on one page (table ends at 50, text at 70)
326
+ expect(dynamicTemplate.schemas.length).toBe(1);
327
+ expect(dynamicTemplate.schemas[0].some((s) => s.name === 'table')).toBe(true);
328
+ expect(dynamicTemplate.schemas[0].some((s) => s.name === 'text')).toBe(true);
329
+ const table = dynamicTemplate.schemas[0].find((s) => s.name === 'table');
330
+ const text = dynamicTemplate.schemas[0].find((s) => s.name === 'text');
331
+ expect(table.height).toBe(40);
332
+ // Text should be pushed down: original y=30 + (40-10) offset = 60
333
+ expect(text.position.y).toBe(60);
272
334
  });
273
335
  });
274
336
  });