pdfmake 0.3.0-beta.3 → 0.3.0-beta.5
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/CHANGELOG.md +9 -0
- package/build/pdfmake.js +2213 -8630
- package/build/pdfmake.js.map +1 -1
- package/build/pdfmake.min.js +2 -2
- package/build/pdfmake.min.js.map +1 -1
- package/build/vfs_fonts.js +6 -5
- package/js/3rd-party/svg-to-pdfkit/source.js +247 -920
- package/js/3rd-party/svg-to-pdfkit.js +0 -3
- package/js/DocMeasure.js +6 -139
- package/js/DocPreprocessor.js +2 -54
- package/js/DocumentContext.js +0 -40
- package/js/ElementWriter.js +2 -70
- package/js/LayoutBuilder.js +20 -165
- package/js/Line.js +6 -25
- package/js/OutputDocument.js +15 -24
- package/js/OutputDocumentServer.js +0 -6
- package/js/PDFDocument.js +1 -46
- package/js/PageElementWriter.js +7 -31
- package/js/PageSize.js +2 -16
- package/js/Printer.js +5 -46
- package/js/Renderer.js +11 -98
- package/js/SVGMeasure.js +1 -20
- package/js/StyleContextStack.js +12 -36
- package/js/TableProcessor.js +36 -117
- package/js/TextBreaker.js +2 -44
- package/js/TextDecorator.js +1 -38
- package/js/TextInlines.js +8 -49
- package/js/URLResolver.js +0 -13
- package/js/base.js +1 -17
- package/js/browser-extensions/OutputDocumentBrowser.js +5 -17
- package/js/browser-extensions/URLBrowserResolver.js +0 -17
- package/js/browser-extensions/fonts/Roboto.js +0 -4
- package/js/browser-extensions/index.js +0 -16
- package/js/browser-extensions/pdfMake.js +2 -4
- package/js/browser-extensions/standard-fonts/Courier.js +0 -4
- package/js/browser-extensions/standard-fonts/Helvetica.js +0 -4
- package/js/browser-extensions/standard-fonts/Symbol.js +0 -4
- package/js/browser-extensions/standard-fonts/Times.js +0 -4
- package/js/browser-extensions/standard-fonts/ZapfDingbats.js +0 -4
- package/js/columnCalculator.js +6 -18
- package/js/helpers/node.js +3 -27
- package/js/helpers/tools.js +0 -8
- package/js/helpers/variableType.js +4 -9
- package/js/index.js +0 -6
- package/js/qrEnc.js +126 -215
- package/js/tableLayouts.js +1 -28
- package/js/virtual-fs.js +3 -19
- package/package.json +2 -2
- package/src/OutputDocument.js +78 -78
|
@@ -2,10 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.default = void 0;
|
|
5
|
-
|
|
6
5
|
var _source = _interopRequireDefault(require("./svg-to-pdfkit/source.js"));
|
|
7
|
-
|
|
8
6
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
-
|
|
10
7
|
var _default = _source.default;
|
|
11
8
|
exports.default = _default;
|
package/js/DocMeasure.js
CHANGED
|
@@ -2,25 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.default = void 0;
|
|
5
|
-
|
|
6
5
|
var _TextInlines = _interopRequireDefault(require("./TextInlines"));
|
|
7
|
-
|
|
8
6
|
var _StyleContextStack = _interopRequireDefault(require("./StyleContextStack"));
|
|
9
|
-
|
|
10
7
|
var _columnCalculator = _interopRequireDefault(require("./columnCalculator"));
|
|
11
|
-
|
|
12
8
|
var _tableLayouts = require("./tableLayouts");
|
|
13
|
-
|
|
14
9
|
var _variableType = require("./helpers/variableType");
|
|
15
|
-
|
|
16
10
|
var _node = require("./helpers/node");
|
|
17
|
-
|
|
18
11
|
var _tools = require("./helpers/tools");
|
|
19
|
-
|
|
20
12
|
var _qrEnc = _interopRequireDefault(require("./qrEnc.js"));
|
|
21
|
-
|
|
22
13
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
23
|
-
|
|
24
14
|
class DocMeasure {
|
|
25
15
|
constructor(pdfDocument, styleDictionary, defaultStyle, svgMeasure, tableLayouts) {
|
|
26
16
|
this.pdfDocument = pdfDocument;
|
|
@@ -30,6 +20,7 @@ class DocMeasure {
|
|
|
30
20
|
this.tableLayouts = tableLayouts;
|
|
31
21
|
this.autoImageIndex = 1;
|
|
32
22
|
}
|
|
23
|
+
|
|
33
24
|
/**
|
|
34
25
|
* Measures all nodes and sets min/max-width properties required for the second
|
|
35
26
|
* layout-pass.
|
|
@@ -37,17 +28,13 @@ class DocMeasure {
|
|
|
37
28
|
* @param {object} docStructure document-definition-object
|
|
38
29
|
* @returns {object} document-measurement-object
|
|
39
30
|
*/
|
|
40
|
-
|
|
41
|
-
|
|
42
31
|
measureDocument(docStructure) {
|
|
43
32
|
return this.measureNode(docStructure);
|
|
44
33
|
}
|
|
45
|
-
|
|
46
34
|
measureNode(node) {
|
|
47
35
|
return this.styleStack.auto(node, () => {
|
|
48
36
|
// TODO: refactor + rethink whether this is the proper way to handle margins
|
|
49
37
|
node._margin = (0, _node.getNodeMargin)(node, this.styleStack);
|
|
50
|
-
|
|
51
38
|
if (node.columns) {
|
|
52
39
|
return extendMargins(this.measureColumns(node));
|
|
53
40
|
} else if (node.stack) {
|
|
@@ -76,19 +63,15 @@ class DocMeasure {
|
|
|
76
63
|
throw new Error(`Unrecognized document structure: ${(0, _node.stringifyNode)(node)}`);
|
|
77
64
|
}
|
|
78
65
|
});
|
|
79
|
-
|
|
80
66
|
function extendMargins(node) {
|
|
81
67
|
let margin = node._margin;
|
|
82
|
-
|
|
83
68
|
if (margin) {
|
|
84
69
|
node._minWidth += margin[0] + margin[2];
|
|
85
70
|
node._maxWidth += margin[0] + margin[2];
|
|
86
71
|
}
|
|
87
|
-
|
|
88
72
|
return node;
|
|
89
73
|
}
|
|
90
74
|
}
|
|
91
|
-
|
|
92
75
|
measureImageWithDimensions(node, dimensions) {
|
|
93
76
|
if (node.fit) {
|
|
94
77
|
let factor = dimensions.width / dimensions.height > node.fit[0] / node.fit[1] ? node.fit[0] / dimensions.width : node.fit[1] / dimensions.height;
|
|
@@ -97,31 +80,25 @@ class DocMeasure {
|
|
|
97
80
|
} else {
|
|
98
81
|
node._width = node._minWidth = node._maxWidth = node.width || dimensions.width;
|
|
99
82
|
node._height = node.height || dimensions.height * node._width / dimensions.width;
|
|
100
|
-
|
|
101
83
|
if ((0, _variableType.isNumber)(node.maxWidth) && node.maxWidth < node._width) {
|
|
102
84
|
node._width = node._minWidth = node._maxWidth = node.maxWidth;
|
|
103
85
|
node._height = node._width * dimensions.height / dimensions.width;
|
|
104
86
|
}
|
|
105
|
-
|
|
106
87
|
if ((0, _variableType.isNumber)(node.maxHeight) && node.maxHeight < node._height) {
|
|
107
88
|
node._height = node.maxHeight;
|
|
108
89
|
node._width = node._minWidth = node._maxWidth = node._height * dimensions.width / dimensions.height;
|
|
109
90
|
}
|
|
110
|
-
|
|
111
91
|
if ((0, _variableType.isNumber)(node.minWidth) && node.minWidth > node._width) {
|
|
112
92
|
node._width = node._minWidth = node._maxWidth = node.minWidth;
|
|
113
93
|
node._height = node._width * dimensions.height / dimensions.width;
|
|
114
94
|
}
|
|
115
|
-
|
|
116
95
|
if ((0, _variableType.isNumber)(node.minHeight) && node.minHeight > node._height) {
|
|
117
96
|
node._height = node.minHeight;
|
|
118
97
|
node._width = node._minWidth = node._maxWidth = node._height * dimensions.width / dimensions.height;
|
|
119
98
|
}
|
|
120
99
|
}
|
|
121
|
-
|
|
122
100
|
node._alignment = this.styleStack.getProperty('alignment');
|
|
123
101
|
}
|
|
124
|
-
|
|
125
102
|
convertIfBase64Image(node) {
|
|
126
103
|
if (/^data:image\/(jpeg|jpg|png);base64,/.test(node.image)) {
|
|
127
104
|
// base64 image
|
|
@@ -130,7 +107,6 @@ class DocMeasure {
|
|
|
130
107
|
node.image = label;
|
|
131
108
|
}
|
|
132
109
|
}
|
|
133
|
-
|
|
134
110
|
measureImage(node) {
|
|
135
111
|
this.convertIfBase64Image(node);
|
|
136
112
|
let image = this.pdfDocument.provideImage(node.image);
|
|
@@ -141,26 +117,25 @@ class DocMeasure {
|
|
|
141
117
|
this.measureImageWithDimensions(node, imageSize);
|
|
142
118
|
return node;
|
|
143
119
|
}
|
|
144
|
-
|
|
145
120
|
measureSVG(node) {
|
|
146
121
|
let dimensions = this.svgMeasure.measureSVG(node.svg);
|
|
147
122
|
this.measureImageWithDimensions(node, dimensions);
|
|
148
|
-
node.font = this.styleStack.getProperty('font');
|
|
123
|
+
node.font = this.styleStack.getProperty('font');
|
|
149
124
|
|
|
125
|
+
// scale SVG based on final dimension
|
|
150
126
|
node.svg = this.svgMeasure.writeDimensions(node.svg, {
|
|
151
127
|
width: node._width,
|
|
152
128
|
height: node._height
|
|
153
129
|
});
|
|
154
130
|
return node;
|
|
155
131
|
}
|
|
156
|
-
|
|
157
132
|
measureLeaf(node) {
|
|
158
133
|
if (node._textRef && node._textRef._textNodeRef.text) {
|
|
159
134
|
node.text = node._textRef._textNodeRef.text;
|
|
160
|
-
}
|
|
161
|
-
// We could also just pass [node] to buildInlines, but that fails for bullet points.
|
|
162
|
-
|
|
135
|
+
}
|
|
163
136
|
|
|
137
|
+
// Make sure style properties of the node itself are considered when building inlines.
|
|
138
|
+
// We could also just pass [node] to buildInlines, but that fails for bullet points.
|
|
164
139
|
let styleStack = this.styleStack.clone();
|
|
165
140
|
styleStack.push(node);
|
|
166
141
|
let data = this.textInlines.buildInlines(node.text, styleStack);
|
|
@@ -169,18 +144,15 @@ class DocMeasure {
|
|
|
169
144
|
node._maxWidth = data.maxWidth;
|
|
170
145
|
return node;
|
|
171
146
|
}
|
|
172
|
-
|
|
173
147
|
measureToc(node) {
|
|
174
148
|
if (node.toc.title) {
|
|
175
149
|
node.toc.title = this.measureNode(node.toc.title);
|
|
176
150
|
}
|
|
177
|
-
|
|
178
151
|
if (node.toc._items.length > 0) {
|
|
179
152
|
let body = [];
|
|
180
153
|
let textStyle = node.toc.textStyle || {};
|
|
181
154
|
let numberStyle = node.toc.numberStyle || textStyle;
|
|
182
155
|
let textMargin = node.toc.textMargin || [0, 0, 0, 0];
|
|
183
|
-
|
|
184
156
|
for (let i = 0, l = node.toc._items.length; i < l; i++) {
|
|
185
157
|
let item = node.toc._items[i];
|
|
186
158
|
let lineStyle = item._textNodeRef.tocStyle || textStyle;
|
|
@@ -202,7 +174,6 @@ class DocMeasure {
|
|
|
202
174
|
margin: [0, lineMargin[1], 0, lineMargin[3]]
|
|
203
175
|
}]);
|
|
204
176
|
}
|
|
205
|
-
|
|
206
177
|
node.toc._table = {
|
|
207
178
|
table: {
|
|
208
179
|
dontBreakRows: true,
|
|
@@ -213,28 +184,22 @@ class DocMeasure {
|
|
|
213
184
|
};
|
|
214
185
|
node.toc._table = this.measureNode(node.toc._table);
|
|
215
186
|
}
|
|
216
|
-
|
|
217
187
|
return node;
|
|
218
188
|
}
|
|
219
|
-
|
|
220
189
|
measureVerticalContainer(node) {
|
|
221
190
|
let items = node.stack;
|
|
222
191
|
node._minWidth = 0;
|
|
223
192
|
node._maxWidth = 0;
|
|
224
|
-
|
|
225
193
|
for (let i = 0, l = items.length; i < l; i++) {
|
|
226
194
|
items[i] = this.measureNode(items[i]);
|
|
227
195
|
node._minWidth = Math.max(node._minWidth, items[i]._minWidth);
|
|
228
196
|
node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);
|
|
229
197
|
}
|
|
230
|
-
|
|
231
198
|
return node;
|
|
232
199
|
}
|
|
233
|
-
|
|
234
200
|
gapSizeForList() {
|
|
235
201
|
return this.textInlines.sizeOfText('9. ', this.styleStack);
|
|
236
202
|
}
|
|
237
|
-
|
|
238
203
|
buildUnorderedMarker(styleStack, gapSize, type) {
|
|
239
204
|
function buildDisc(gapSize, color) {
|
|
240
205
|
// TODO: ascender-based calculations
|
|
@@ -250,7 +215,6 @@ class DocMeasure {
|
|
|
250
215
|
}]
|
|
251
216
|
};
|
|
252
217
|
}
|
|
253
|
-
|
|
254
218
|
function buildSquare(gapSize, color) {
|
|
255
219
|
// TODO: ascender-based calculations
|
|
256
220
|
let size = gapSize.fontSize / 3;
|
|
@@ -265,7 +229,6 @@ class DocMeasure {
|
|
|
265
229
|
}]
|
|
266
230
|
};
|
|
267
231
|
}
|
|
268
|
-
|
|
269
232
|
function buildCircle(gapSize, color) {
|
|
270
233
|
// TODO: ascender-based calculations
|
|
271
234
|
let radius = gapSize.fontSize / 6;
|
|
@@ -280,52 +243,41 @@ class DocMeasure {
|
|
|
280
243
|
}]
|
|
281
244
|
};
|
|
282
245
|
}
|
|
283
|
-
|
|
284
246
|
let marker;
|
|
285
247
|
let color = styleStack.getProperty('markerColor') || styleStack.getProperty('color') || 'black';
|
|
286
|
-
|
|
287
248
|
switch (type) {
|
|
288
249
|
case 'circle':
|
|
289
250
|
marker = buildCircle(gapSize, color);
|
|
290
251
|
break;
|
|
291
|
-
|
|
292
252
|
case 'square':
|
|
293
253
|
marker = buildSquare(gapSize, color);
|
|
294
254
|
break;
|
|
295
|
-
|
|
296
255
|
case 'none':
|
|
297
256
|
marker = {};
|
|
298
257
|
break;
|
|
299
|
-
|
|
300
258
|
case 'disc':
|
|
301
259
|
default:
|
|
302
260
|
marker = buildDisc(gapSize, color);
|
|
303
261
|
break;
|
|
304
262
|
}
|
|
305
|
-
|
|
306
263
|
marker._minWidth = marker._maxWidth = gapSize.width;
|
|
307
264
|
marker._minHeight = marker._maxHeight = gapSize.height;
|
|
308
265
|
return marker;
|
|
309
266
|
}
|
|
310
|
-
|
|
311
267
|
buildOrderedMarker(counter, styleStack, type, separator) {
|
|
312
268
|
function prepareAlpha(counter) {
|
|
313
269
|
function toAlpha(num) {
|
|
314
270
|
return (num >= 26 ? toAlpha((num / 26 >> 0) - 1) : '') + 'abcdefghijklmnopqrstuvwxyz'[num % 26 >> 0];
|
|
315
271
|
}
|
|
316
|
-
|
|
317
272
|
if (counter < 1) {
|
|
318
273
|
return counter.toString();
|
|
319
274
|
}
|
|
320
|
-
|
|
321
275
|
return toAlpha(counter - 1);
|
|
322
276
|
}
|
|
323
|
-
|
|
324
277
|
function prepareRoman(counter) {
|
|
325
278
|
if (counter < 1 || counter > 4999) {
|
|
326
279
|
return counter.toString();
|
|
327
280
|
}
|
|
328
|
-
|
|
329
281
|
let num = counter;
|
|
330
282
|
let lookup = {
|
|
331
283
|
M: 1000,
|
|
@@ -343,84 +295,66 @@ class DocMeasure {
|
|
|
343
295
|
I: 1
|
|
344
296
|
};
|
|
345
297
|
let roman = '';
|
|
346
|
-
|
|
347
298
|
for (let i in lookup) {
|
|
348
299
|
while (num >= lookup[i]) {
|
|
349
300
|
roman += i;
|
|
350
301
|
num -= lookup[i];
|
|
351
302
|
}
|
|
352
303
|
}
|
|
353
|
-
|
|
354
304
|
return roman;
|
|
355
305
|
}
|
|
356
|
-
|
|
357
306
|
function prepareDecimal(counter) {
|
|
358
307
|
return counter.toString();
|
|
359
308
|
}
|
|
360
|
-
|
|
361
309
|
let counterText;
|
|
362
|
-
|
|
363
310
|
switch (type) {
|
|
364
311
|
case 'none':
|
|
365
312
|
counterText = null;
|
|
366
313
|
break;
|
|
367
|
-
|
|
368
314
|
case 'upper-alpha':
|
|
369
315
|
counterText = prepareAlpha(counter).toUpperCase();
|
|
370
316
|
break;
|
|
371
|
-
|
|
372
317
|
case 'lower-alpha':
|
|
373
318
|
counterText = prepareAlpha(counter);
|
|
374
319
|
break;
|
|
375
|
-
|
|
376
320
|
case 'upper-roman':
|
|
377
321
|
counterText = prepareRoman(counter);
|
|
378
322
|
break;
|
|
379
|
-
|
|
380
323
|
case 'lower-roman':
|
|
381
324
|
counterText = prepareRoman(counter).toLowerCase();
|
|
382
325
|
break;
|
|
383
|
-
|
|
384
326
|
case 'decimal':
|
|
385
327
|
default:
|
|
386
328
|
counterText = prepareDecimal(counter);
|
|
387
329
|
break;
|
|
388
330
|
}
|
|
389
|
-
|
|
390
331
|
if (counterText === null) {
|
|
391
332
|
return {};
|
|
392
333
|
}
|
|
393
|
-
|
|
394
334
|
if (separator) {
|
|
395
335
|
if (Array.isArray(separator)) {
|
|
396
336
|
if (separator[0]) {
|
|
397
337
|
counterText = separator[0] + counterText;
|
|
398
338
|
}
|
|
399
|
-
|
|
400
339
|
if (separator[1]) {
|
|
401
340
|
counterText += separator[1];
|
|
402
341
|
}
|
|
403
|
-
|
|
404
342
|
counterText += ' ';
|
|
405
343
|
} else {
|
|
406
344
|
counterText += `${separator} `;
|
|
407
345
|
}
|
|
408
346
|
}
|
|
409
|
-
|
|
410
347
|
let textArray = {
|
|
411
348
|
text: counterText
|
|
412
349
|
};
|
|
413
350
|
let markerColor = styleStack.getProperty('markerColor');
|
|
414
|
-
|
|
415
351
|
if (markerColor) {
|
|
416
352
|
textArray.color = markerColor;
|
|
417
353
|
}
|
|
418
|
-
|
|
419
354
|
return {
|
|
420
355
|
_inlines: this.textInlines.buildInlines(textArray, styleStack).items
|
|
421
356
|
};
|
|
422
357
|
}
|
|
423
|
-
|
|
424
358
|
measureUnorderedList(node) {
|
|
425
359
|
let style = this.styleStack.clone();
|
|
426
360
|
let items = node.ul;
|
|
@@ -428,90 +362,69 @@ class DocMeasure {
|
|
|
428
362
|
node._gapSize = this.gapSizeForList();
|
|
429
363
|
node._minWidth = 0;
|
|
430
364
|
node._maxWidth = 0;
|
|
431
|
-
|
|
432
365
|
for (let i = 0, l = items.length; i < l; i++) {
|
|
433
366
|
let item = items[i] = this.measureNode(items[i]);
|
|
434
|
-
|
|
435
367
|
if (!item.ol && !item.ul) {
|
|
436
368
|
item.listMarker = this.buildUnorderedMarker(style, node._gapSize, item.listType || node.type);
|
|
437
369
|
}
|
|
438
|
-
|
|
439
370
|
node._minWidth = Math.max(node._minWidth, items[i]._minWidth + node._gapSize.width);
|
|
440
371
|
node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth + node._gapSize.width);
|
|
441
372
|
}
|
|
442
|
-
|
|
443
373
|
return node;
|
|
444
374
|
}
|
|
445
|
-
|
|
446
375
|
measureOrderedList(node) {
|
|
447
376
|
let style = this.styleStack.clone();
|
|
448
377
|
let items = node.ol;
|
|
449
378
|
node.type = node.type || 'decimal';
|
|
450
379
|
node.separator = node.separator || '.';
|
|
451
380
|
node.reversed = node.reversed || false;
|
|
452
|
-
|
|
453
381
|
if (!(0, _variableType.isNumber)(node.start)) {
|
|
454
382
|
node.start = node.reversed ? items.length : 1;
|
|
455
383
|
}
|
|
456
|
-
|
|
457
384
|
node._gapSize = this.gapSizeForList();
|
|
458
385
|
node._minWidth = 0;
|
|
459
386
|
node._maxWidth = 0;
|
|
460
387
|
let counter = node.start;
|
|
461
|
-
|
|
462
388
|
for (let i = 0, l = items.length; i < l; i++) {
|
|
463
389
|
let item = items[i] = this.measureNode(items[i]);
|
|
464
|
-
|
|
465
390
|
if (!item.ol && !item.ul) {
|
|
466
391
|
let counterValue = (0, _variableType.isNumber)(item.counter) ? item.counter : counter;
|
|
467
392
|
item.listMarker = this.buildOrderedMarker(counterValue, style, item.listType || node.type, node.separator);
|
|
468
|
-
|
|
469
393
|
if (item.listMarker._inlines) {
|
|
470
394
|
node._gapSize.width = Math.max(node._gapSize.width, item.listMarker._inlines[0].width);
|
|
471
395
|
}
|
|
472
396
|
} // TODO: else - nested lists numbering
|
|
473
397
|
|
|
474
|
-
|
|
475
398
|
node._minWidth = Math.max(node._minWidth, items[i]._minWidth);
|
|
476
399
|
node._maxWidth = Math.max(node._maxWidth, items[i]._maxWidth);
|
|
477
|
-
|
|
478
400
|
if (node.reversed) {
|
|
479
401
|
counter--;
|
|
480
402
|
} else {
|
|
481
403
|
counter++;
|
|
482
404
|
}
|
|
483
405
|
}
|
|
484
|
-
|
|
485
406
|
node._minWidth += node._gapSize.width;
|
|
486
407
|
node._maxWidth += node._gapSize.width;
|
|
487
|
-
|
|
488
408
|
for (let i = 0, l = items.length; i < l; i++) {
|
|
489
409
|
let item = items[i];
|
|
490
|
-
|
|
491
410
|
if (!item.ol && !item.ul) {
|
|
492
411
|
item.listMarker._minWidth = item.listMarker._maxWidth = node._gapSize.width;
|
|
493
412
|
}
|
|
494
413
|
}
|
|
495
|
-
|
|
496
414
|
return node;
|
|
497
415
|
}
|
|
498
|
-
|
|
499
416
|
measureColumns(node) {
|
|
500
417
|
let columns = node.columns;
|
|
501
418
|
node._gap = this.styleStack.getProperty('columnGap') || 0;
|
|
502
|
-
|
|
503
419
|
for (let i = 0, l = columns.length; i < l; i++) {
|
|
504
420
|
columns[i] = this.measureNode(columns[i]);
|
|
505
421
|
}
|
|
506
|
-
|
|
507
422
|
let measures = _columnCalculator.default.measureMinMax(columns);
|
|
508
|
-
|
|
509
423
|
let numGaps = columns.length > 0 ? columns.length - 1 : 0;
|
|
510
424
|
node._minWidth = measures.min + node._gap * numGaps;
|
|
511
425
|
node._maxWidth = measures.max + node._gap * numGaps;
|
|
512
426
|
return node;
|
|
513
427
|
}
|
|
514
|
-
|
|
515
428
|
measureTable(node) {
|
|
516
429
|
extendTableWidths(node);
|
|
517
430
|
node._layout = getLayout(this.tableLayouts);
|
|
@@ -521,28 +434,22 @@ class DocMeasure {
|
|
|
521
434
|
let row;
|
|
522
435
|
let cols;
|
|
523
436
|
let rows;
|
|
524
|
-
|
|
525
437
|
for (col = 0, cols = node.table.body[0].length; col < cols; col++) {
|
|
526
438
|
let c = node.table.widths[col];
|
|
527
439
|
c._minWidth = 0;
|
|
528
440
|
c._maxWidth = 0;
|
|
529
|
-
|
|
530
441
|
for (row = 0, rows = node.table.body.length; row < rows; row++) {
|
|
531
442
|
let rowData = node.table.body[row];
|
|
532
443
|
let data = rowData[col];
|
|
533
|
-
|
|
534
444
|
if (data === undefined) {
|
|
535
445
|
throw new Error(`Malformed table row, a cell is undefined.\nRow index: ${row}\nColumn index: ${col}\nRow data: ${(0, _node.stringifyNode)(rowData)}`);
|
|
536
446
|
}
|
|
537
|
-
|
|
538
447
|
if (data === null) {
|
|
539
448
|
// transform to object
|
|
540
449
|
data = '';
|
|
541
450
|
}
|
|
542
|
-
|
|
543
451
|
if (!data._span) {
|
|
544
452
|
data = rowData[col] = this.styleStack.auto(data, measureCb(this, data));
|
|
545
|
-
|
|
546
453
|
if (data.colSpan && data.colSpan > 1) {
|
|
547
454
|
markSpans(rowData, col, data.colSpan);
|
|
548
455
|
colSpans.push({
|
|
@@ -556,103 +463,81 @@ class DocMeasure {
|
|
|
556
463
|
c._maxWidth = Math.max(c._maxWidth, data._maxWidth);
|
|
557
464
|
}
|
|
558
465
|
}
|
|
559
|
-
|
|
560
466
|
if (data.rowSpan && data.rowSpan > 1) {
|
|
561
467
|
markVSpans(node.table, row, col, data.rowSpan);
|
|
562
468
|
}
|
|
563
469
|
}
|
|
564
470
|
}
|
|
565
|
-
|
|
566
471
|
extendWidthsForColSpans();
|
|
567
|
-
|
|
568
472
|
let measures = _columnCalculator.default.measureMinMax(node.table.widths);
|
|
569
|
-
|
|
570
473
|
node._minWidth = measures.min + node._offsets.total;
|
|
571
474
|
node._maxWidth = measures.max + node._offsets.total;
|
|
572
475
|
return node;
|
|
573
|
-
|
|
574
476
|
function measureCb(_this, data) {
|
|
575
477
|
return () => {
|
|
576
478
|
if ((0, _variableType.isObject)(data)) {
|
|
577
479
|
data.fillColor = _this.styleStack.getProperty('fillColor');
|
|
578
480
|
data.fillOpacity = _this.styleStack.getProperty('fillOpacity');
|
|
579
481
|
}
|
|
580
|
-
|
|
581
482
|
return _this.measureNode(data);
|
|
582
483
|
};
|
|
583
484
|
}
|
|
584
|
-
|
|
585
485
|
function getLayout(tableLayouts) {
|
|
586
486
|
let layout = node.layout;
|
|
587
|
-
|
|
588
487
|
if ((0, _variableType.isString)(layout)) {
|
|
589
488
|
layout = tableLayouts[layout];
|
|
590
489
|
}
|
|
591
|
-
|
|
592
490
|
return (0, _tools.pack)(_tableLayouts.defaultTableLayout, layout);
|
|
593
491
|
}
|
|
594
|
-
|
|
595
492
|
function getOffsets(layout) {
|
|
596
493
|
let offsets = [];
|
|
597
494
|
let totalOffset = 0;
|
|
598
495
|
let prevRightPadding = 0;
|
|
599
|
-
|
|
600
496
|
for (let i = 0, l = node.table.widths.length; i < l; i++) {
|
|
601
497
|
let lOffset = prevRightPadding + layout.vLineWidth(i, node) + layout.paddingLeft(i, node);
|
|
602
498
|
offsets.push(lOffset);
|
|
603
499
|
totalOffset += lOffset;
|
|
604
500
|
prevRightPadding = layout.paddingRight(i, node);
|
|
605
501
|
}
|
|
606
|
-
|
|
607
502
|
totalOffset += prevRightPadding + layout.vLineWidth(node.table.widths.length, node);
|
|
608
503
|
return {
|
|
609
504
|
total: totalOffset,
|
|
610
505
|
offsets: offsets
|
|
611
506
|
};
|
|
612
507
|
}
|
|
613
|
-
|
|
614
508
|
function extendWidthsForColSpans() {
|
|
615
509
|
let q;
|
|
616
510
|
let j;
|
|
617
|
-
|
|
618
511
|
for (let i = 0, l = colSpans.length; i < l; i++) {
|
|
619
512
|
let span = colSpans[i];
|
|
620
513
|
let currentMinMax = getMinMax(span.col, span.span, node._offsets);
|
|
621
514
|
let minDifference = span.minWidth - currentMinMax.minWidth;
|
|
622
515
|
let maxDifference = span.maxWidth - currentMinMax.maxWidth;
|
|
623
|
-
|
|
624
516
|
if (minDifference > 0) {
|
|
625
517
|
q = minDifference / span.span;
|
|
626
|
-
|
|
627
518
|
for (j = 0; j < span.span; j++) {
|
|
628
519
|
node.table.widths[span.col + j]._minWidth += q;
|
|
629
520
|
}
|
|
630
521
|
}
|
|
631
|
-
|
|
632
522
|
if (maxDifference > 0) {
|
|
633
523
|
q = maxDifference / span.span;
|
|
634
|
-
|
|
635
524
|
for (j = 0; j < span.span; j++) {
|
|
636
525
|
node.table.widths[span.col + j]._maxWidth += q;
|
|
637
526
|
}
|
|
638
527
|
}
|
|
639
528
|
}
|
|
640
529
|
}
|
|
641
|
-
|
|
642
530
|
function getMinMax(col, span, offsets) {
|
|
643
531
|
let result = {
|
|
644
532
|
minWidth: 0,
|
|
645
533
|
maxWidth: 0
|
|
646
534
|
};
|
|
647
|
-
|
|
648
535
|
for (let i = 0; i < span; i++) {
|
|
649
536
|
result.minWidth += node.table.widths[col + i]._minWidth + (i ? offsets.offsets[col + i] : 0);
|
|
650
537
|
result.maxWidth += node.table.widths[col + i]._maxWidth + (i ? offsets.offsets[col + i] : 0);
|
|
651
538
|
}
|
|
652
|
-
|
|
653
539
|
return result;
|
|
654
540
|
}
|
|
655
|
-
|
|
656
541
|
function markSpans(rowData, col, span) {
|
|
657
542
|
for (let i = 1; i < span; i++) {
|
|
658
543
|
rowData[col + i] = {
|
|
@@ -663,7 +548,6 @@ class DocMeasure {
|
|
|
663
548
|
};
|
|
664
549
|
}
|
|
665
550
|
}
|
|
666
|
-
|
|
667
551
|
function markVSpans(table, row, col, span) {
|
|
668
552
|
for (let i = 1; i < span; i++) {
|
|
669
553
|
table.body[row + i][col] = {
|
|
@@ -675,23 +559,18 @@ class DocMeasure {
|
|
|
675
559
|
};
|
|
676
560
|
}
|
|
677
561
|
}
|
|
678
|
-
|
|
679
562
|
function extendTableWidths(node) {
|
|
680
563
|
if (!node.table.widths) {
|
|
681
564
|
node.table.widths = 'auto';
|
|
682
565
|
}
|
|
683
|
-
|
|
684
566
|
if ((0, _variableType.isString)(node.table.widths)) {
|
|
685
567
|
node.table.widths = [node.table.widths];
|
|
686
|
-
|
|
687
568
|
while (node.table.widths.length < node.table.body[0].length) {
|
|
688
569
|
node.table.widths.push(node.table.widths[node.table.widths.length - 1]);
|
|
689
570
|
}
|
|
690
571
|
}
|
|
691
|
-
|
|
692
572
|
for (let i = 0, l = node.table.widths.length; i < l; i++) {
|
|
693
573
|
let w = node.table.widths[i];
|
|
694
|
-
|
|
695
574
|
if ((0, _variableType.isNumber)(w) || (0, _variableType.isString)(w)) {
|
|
696
575
|
node.table.widths[i] = {
|
|
697
576
|
width: w
|
|
@@ -700,59 +579,47 @@ class DocMeasure {
|
|
|
700
579
|
}
|
|
701
580
|
}
|
|
702
581
|
}
|
|
703
|
-
|
|
704
582
|
measureCanvas(node) {
|
|
705
583
|
let w = 0;
|
|
706
584
|
let h = 0;
|
|
707
|
-
|
|
708
585
|
for (let i = 0, l = node.canvas.length; i < l; i++) {
|
|
709
586
|
let vector = node.canvas[i];
|
|
710
|
-
|
|
711
587
|
switch (vector.type) {
|
|
712
588
|
case 'ellipse':
|
|
713
589
|
w = Math.max(w, vector.x + vector.r1);
|
|
714
590
|
h = Math.max(h, vector.y + vector.r2);
|
|
715
591
|
break;
|
|
716
|
-
|
|
717
592
|
case 'rect':
|
|
718
593
|
w = Math.max(w, vector.x + vector.w);
|
|
719
594
|
h = Math.max(h, vector.y + vector.h);
|
|
720
595
|
break;
|
|
721
|
-
|
|
722
596
|
case 'line':
|
|
723
597
|
w = Math.max(w, vector.x1, vector.x2);
|
|
724
598
|
h = Math.max(h, vector.y1, vector.y2);
|
|
725
599
|
break;
|
|
726
|
-
|
|
727
600
|
case 'polyline':
|
|
728
601
|
for (let i2 = 0, l2 = vector.points.length; i2 < l2; i2++) {
|
|
729
602
|
w = Math.max(w, vector.points[i2].x);
|
|
730
603
|
h = Math.max(h, vector.points[i2].y);
|
|
731
604
|
}
|
|
732
|
-
|
|
733
605
|
break;
|
|
734
606
|
}
|
|
735
607
|
}
|
|
736
|
-
|
|
737
608
|
node._minWidth = node._maxWidth = w;
|
|
738
609
|
node._minHeight = node._maxHeight = h;
|
|
739
610
|
node._alignment = this.styleStack.getProperty('alignment');
|
|
740
611
|
return node;
|
|
741
612
|
}
|
|
742
|
-
|
|
743
613
|
measureQr(node) {
|
|
744
614
|
node = _qrEnc.default.measure(node);
|
|
745
615
|
node._alignment = this.styleStack.getProperty('alignment');
|
|
746
616
|
return node;
|
|
747
617
|
}
|
|
748
|
-
|
|
749
618
|
measureAttachment(node) {
|
|
750
619
|
node._width = node.width || 7;
|
|
751
620
|
node._height = node.height || 18;
|
|
752
621
|
return node;
|
|
753
622
|
}
|
|
754
|
-
|
|
755
623
|
}
|
|
756
|
-
|
|
757
624
|
var _default = DocMeasure;
|
|
758
625
|
exports.default = _default;
|