pdfmake 0.3.0-beta.1 → 0.3.0-beta.10
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 +61 -1
- package/LICENSE +1 -1
- package/README.md +3 -1
- package/build/pdfmake.js +65039 -73250
- 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 +4 -4
- package/eslint.config.mjs +52 -0
- package/fonts/Roboto/Roboto-Italic.ttf +0 -0
- package/fonts/Roboto/Roboto-Medium.ttf +0 -0
- package/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
- package/fonts/Roboto/Roboto-Regular.ttf +0 -0
- package/js/3rd-party/svg-to-pdfkit/source.js +247 -922
- package/js/3rd-party/svg-to-pdfkit.js +2 -6
- package/js/DocMeasure.js +24 -148
- package/js/DocPreprocessor.js +8 -55
- package/js/DocumentContext.js +44 -62
- package/js/ElementWriter.js +38 -73
- package/js/LayoutBuilder.js +225 -177
- package/js/Line.js +7 -27
- package/js/OutputDocument.js +6 -16
- package/js/OutputDocumentServer.js +2 -9
- package/js/PDFDocument.js +24 -43
- package/js/PageElementWriter.js +12 -33
- package/js/PageSize.js +3 -17
- package/js/Printer.js +102 -49
- package/js/Renderer.js +37 -95
- package/js/SVGMeasure.js +3 -23
- package/js/StyleContextStack.js +13 -55
- package/js/TableProcessor.js +58 -124
- package/js/TextBreaker.js +4 -47
- package/js/TextDecorator.js +3 -41
- package/js/TextInlines.js +10 -52
- package/js/URLResolver.js +18 -24
- package/js/base.js +3 -20
- package/js/browser-extensions/OutputDocumentBrowser.js +7 -20
- package/js/browser-extensions/URLBrowserResolver.js +7 -20
- package/js/browser-extensions/fonts/Roboto.js +0 -4
- package/js/browser-extensions/index.js +2 -19
- package/js/browser-extensions/pdfMake.js +0 -14
- 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 +30 -24
- package/js/helpers/node.js +3 -27
- package/js/helpers/tools.js +0 -8
- package/js/helpers/variableType.js +15 -8
- package/js/index.js +0 -6
- package/js/qrEnc.js +133 -222
- package/js/standardPageSizes.js +2 -3
- package/js/tableLayouts.js +4 -33
- package/js/virtual-fs.js +4 -21
- package/package.json +25 -22
- package/src/DocMeasure.js +19 -6
- package/src/DocPreprocessor.js +6 -0
- package/src/DocumentContext.js +35 -20
- package/src/ElementWriter.js +41 -4
- package/src/LayoutBuilder.js +201 -18
- package/src/OutputDocument.js +1 -1
- package/src/PDFDocument.js +27 -1
- package/src/PageElementWriter.js +4 -0
- package/src/Printer.js +93 -7
- package/src/Renderer.js +35 -0
- package/src/StyleContextStack.js +3 -44
- package/src/TableProcessor.js +27 -5
- package/src/TextDecorator.js +1 -1
- package/src/URLResolver.js +16 -8
- package/src/browser-extensions/URLBrowserResolver.js +6 -3
- package/src/browser-extensions/index.js +1 -1
- package/src/browser-extensions/pdfMake.js +0 -14
- package/src/columnCalculator.js +24 -3
- package/src/helpers/variableType.js +11 -0
- package/src/qrEnc.js +5 -3
package/js/ElementWriter.js
CHANGED
|
@@ -2,17 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
4
|
exports.default = void 0;
|
|
5
|
-
|
|
6
5
|
var _variableType = require("./helpers/variableType");
|
|
7
|
-
|
|
8
6
|
var _tools = require("./helpers/tools");
|
|
9
|
-
|
|
10
7
|
var _DocumentContext = _interopRequireDefault(require("./DocumentContext"));
|
|
11
|
-
|
|
12
8
|
var _events = require("events");
|
|
13
|
-
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
10
|
/**
|
|
17
11
|
* A line/vector writer, which adds elements to current page and sets
|
|
18
12
|
* their positions based on the context
|
|
@@ -23,21 +17,17 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
23
17
|
this._context = context;
|
|
24
18
|
this.contextStack = [];
|
|
25
19
|
}
|
|
26
|
-
|
|
27
20
|
context() {
|
|
28
21
|
return this._context;
|
|
29
22
|
}
|
|
30
|
-
|
|
31
23
|
addLine(line, dontUpdateContextPosition, index) {
|
|
32
24
|
let height = line.getHeight();
|
|
33
25
|
let context = this.context();
|
|
34
26
|
let page = context.getCurrentPage();
|
|
35
27
|
let position = this.getCurrentPositionOnPage();
|
|
36
|
-
|
|
37
28
|
if (context.availableHeight < height || !page) {
|
|
38
29
|
return false;
|
|
39
30
|
}
|
|
40
|
-
|
|
41
31
|
line.x = context.x + (line.x || 0);
|
|
42
32
|
line.y = context.y + (line.y || 0);
|
|
43
33
|
this.alignLine(line);
|
|
@@ -46,37 +36,29 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
46
36
|
item: line
|
|
47
37
|
}, index);
|
|
48
38
|
this.emit('lineAdded', line);
|
|
49
|
-
|
|
50
39
|
if (!dontUpdateContextPosition) {
|
|
51
40
|
context.moveDown(height);
|
|
52
41
|
}
|
|
53
|
-
|
|
54
42
|
return position;
|
|
55
43
|
}
|
|
56
|
-
|
|
57
44
|
alignLine(line) {
|
|
58
45
|
let width = this.context().availableWidth;
|
|
59
46
|
let lineWidth = line.getWidth();
|
|
60
47
|
let alignment = line.inlines && line.inlines.length > 0 && line.inlines[0].alignment;
|
|
61
48
|
let offset = 0;
|
|
62
|
-
|
|
63
49
|
switch (alignment) {
|
|
64
50
|
case 'right':
|
|
65
51
|
offset = width - lineWidth;
|
|
66
52
|
break;
|
|
67
|
-
|
|
68
53
|
case 'center':
|
|
69
54
|
offset = (width - lineWidth) / 2;
|
|
70
55
|
break;
|
|
71
56
|
}
|
|
72
|
-
|
|
73
57
|
if (offset) {
|
|
74
58
|
line.x = (line.x || 0) + offset;
|
|
75
59
|
}
|
|
76
|
-
|
|
77
60
|
if (alignment === 'justify' && !line.newLineForced && !line.lastLineInParagraph && line.inlines.length > 1) {
|
|
78
61
|
let additionalSpacing = (width - lineWidth) / (line.inlines.length - 1);
|
|
79
|
-
|
|
80
62
|
for (let i = 1, l = line.inlines.length; i < l; i++) {
|
|
81
63
|
offset = i * additionalSpacing;
|
|
82
64
|
line.inlines[i].x += offset;
|
|
@@ -84,20 +66,16 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
84
66
|
}
|
|
85
67
|
}
|
|
86
68
|
}
|
|
87
|
-
|
|
88
69
|
addImage(image, index) {
|
|
89
70
|
let context = this.context();
|
|
90
71
|
let page = context.getCurrentPage();
|
|
91
72
|
let position = this.getCurrentPositionOnPage();
|
|
92
|
-
|
|
93
73
|
if (!page || image.absolutePosition === undefined && context.availableHeight < image._height && page.items.length > 0) {
|
|
94
74
|
return false;
|
|
95
75
|
}
|
|
96
|
-
|
|
97
76
|
if (image._x === undefined) {
|
|
98
77
|
image._x = image.x || 0;
|
|
99
78
|
}
|
|
100
|
-
|
|
101
79
|
image.x = context.x + image._x;
|
|
102
80
|
image.y = context.y;
|
|
103
81
|
this.alignImage(image);
|
|
@@ -108,24 +86,21 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
108
86
|
context.moveDown(image._height);
|
|
109
87
|
return position;
|
|
110
88
|
}
|
|
111
|
-
|
|
112
89
|
addCanvas(node, index) {
|
|
113
90
|
let context = this.context();
|
|
114
91
|
let page = context.getCurrentPage();
|
|
115
92
|
let positions = [];
|
|
116
93
|
let height = node._minHeight;
|
|
117
|
-
|
|
118
94
|
if (!page || node.absolutePosition === undefined && context.availableHeight < height) {
|
|
119
95
|
// TODO: support for canvas larger than a page
|
|
120
96
|
// TODO: support for other overflow methods
|
|
97
|
+
|
|
121
98
|
return false;
|
|
122
99
|
}
|
|
123
|
-
|
|
124
100
|
this.alignCanvas(node);
|
|
125
101
|
node.canvas.forEach(function (vector) {
|
|
126
102
|
let position = this.addVector(vector, false, false, index);
|
|
127
103
|
positions.push(position);
|
|
128
|
-
|
|
129
104
|
if (index !== undefined) {
|
|
130
105
|
index++;
|
|
131
106
|
}
|
|
@@ -133,21 +108,17 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
133
108
|
context.moveDown(height);
|
|
134
109
|
return positions;
|
|
135
110
|
}
|
|
136
|
-
|
|
137
111
|
addSVG(image, index) {
|
|
138
112
|
// TODO: same as addImage
|
|
139
113
|
let context = this.context();
|
|
140
114
|
let page = context.getCurrentPage();
|
|
141
115
|
let position = this.getCurrentPositionOnPage();
|
|
142
|
-
|
|
143
116
|
if (!page || image.absolutePosition === undefined && context.availableHeight < image._height && page.items.length > 0) {
|
|
144
117
|
return false;
|
|
145
118
|
}
|
|
146
|
-
|
|
147
119
|
if (image._x === undefined) {
|
|
148
120
|
image._x = image.x || 0;
|
|
149
121
|
}
|
|
150
|
-
|
|
151
122
|
image.x = context.x + image._x;
|
|
152
123
|
image.y = context.y;
|
|
153
124
|
this.alignImage(image);
|
|
@@ -158,82 +129,85 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
158
129
|
context.moveDown(image._height);
|
|
159
130
|
return position;
|
|
160
131
|
}
|
|
161
|
-
|
|
162
132
|
addQr(qr, index) {
|
|
163
133
|
let context = this.context();
|
|
164
134
|
let page = context.getCurrentPage();
|
|
165
135
|
let position = this.getCurrentPositionOnPage();
|
|
166
|
-
|
|
167
136
|
if (!page || qr.absolutePosition === undefined && context.availableHeight < qr._height) {
|
|
168
137
|
return false;
|
|
169
138
|
}
|
|
170
|
-
|
|
171
139
|
if (qr._x === undefined) {
|
|
172
140
|
qr._x = qr.x || 0;
|
|
173
141
|
}
|
|
174
|
-
|
|
175
142
|
qr.x = context.x + qr._x;
|
|
176
143
|
qr.y = context.y;
|
|
177
144
|
this.alignImage(qr);
|
|
178
|
-
|
|
179
145
|
for (let i = 0, l = qr._canvas.length; i < l; i++) {
|
|
180
146
|
let vector = qr._canvas[i];
|
|
181
147
|
vector.x += qr.x;
|
|
182
148
|
vector.y += qr.y;
|
|
183
149
|
this.addVector(vector, true, true, index);
|
|
184
150
|
}
|
|
185
|
-
|
|
186
151
|
context.moveDown(qr._height);
|
|
187
152
|
return position;
|
|
188
153
|
}
|
|
189
|
-
|
|
154
|
+
addAttachment(attachment, index) {
|
|
155
|
+
let context = this.context();
|
|
156
|
+
let page = context.getCurrentPage();
|
|
157
|
+
let position = this.getCurrentPositionOnPage();
|
|
158
|
+
if (!page || attachment.absolutePosition === undefined && context.availableHeight < attachment._height && page.items.length > 0) {
|
|
159
|
+
return false;
|
|
160
|
+
}
|
|
161
|
+
if (attachment._x === undefined) {
|
|
162
|
+
attachment._x = attachment.x || 0;
|
|
163
|
+
}
|
|
164
|
+
attachment.x = context.x + attachment._x;
|
|
165
|
+
attachment.y = context.y;
|
|
166
|
+
addPageItem(page, {
|
|
167
|
+
type: 'attachment',
|
|
168
|
+
item: attachment
|
|
169
|
+
}, index);
|
|
170
|
+
context.moveDown(attachment._height);
|
|
171
|
+
return position;
|
|
172
|
+
}
|
|
190
173
|
alignImage(image) {
|
|
191
174
|
let width = this.context().availableWidth;
|
|
192
175
|
let imageWidth = image._minWidth;
|
|
193
176
|
let offset = 0;
|
|
194
|
-
|
|
195
177
|
switch (image._alignment) {
|
|
196
178
|
case 'right':
|
|
197
179
|
offset = width - imageWidth;
|
|
198
180
|
break;
|
|
199
|
-
|
|
200
181
|
case 'center':
|
|
201
182
|
offset = (width - imageWidth) / 2;
|
|
202
183
|
break;
|
|
203
184
|
}
|
|
204
|
-
|
|
205
185
|
if (offset) {
|
|
206
186
|
image.x = (image.x || 0) + offset;
|
|
207
187
|
}
|
|
208
188
|
}
|
|
209
|
-
|
|
210
189
|
alignCanvas(node) {
|
|
211
190
|
let width = this.context().availableWidth;
|
|
212
191
|
let canvasWidth = node._minWidth;
|
|
213
192
|
let offset = 0;
|
|
214
|
-
|
|
215
193
|
switch (node._alignment) {
|
|
216
194
|
case 'right':
|
|
217
195
|
offset = width - canvasWidth;
|
|
218
196
|
break;
|
|
219
|
-
|
|
220
197
|
case 'center':
|
|
221
198
|
offset = (width - canvasWidth) / 2;
|
|
222
199
|
break;
|
|
223
200
|
}
|
|
224
|
-
|
|
225
201
|
if (offset) {
|
|
226
202
|
node.canvas.forEach(vector => {
|
|
227
203
|
(0, _tools.offsetVector)(vector, offset, 0);
|
|
228
204
|
});
|
|
229
205
|
}
|
|
230
206
|
}
|
|
231
|
-
|
|
232
207
|
addVector(vector, ignoreContextX, ignoreContextY, index) {
|
|
233
208
|
let context = this.context();
|
|
234
209
|
let page = context.getCurrentPage();
|
|
235
210
|
let position = this.getCurrentPositionOnPage();
|
|
236
|
-
|
|
237
211
|
if (page) {
|
|
238
212
|
(0, _tools.offsetVector)(vector, ignoreContextX ? 0 : context.x, ignoreContextY ? 0 : context.y);
|
|
239
213
|
addPageItem(page, {
|
|
@@ -243,7 +217,6 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
243
217
|
return position;
|
|
244
218
|
}
|
|
245
219
|
}
|
|
246
|
-
|
|
247
220
|
beginClip(width, height) {
|
|
248
221
|
let ctx = this.context();
|
|
249
222
|
let page = ctx.getCurrentPage();
|
|
@@ -258,7 +231,6 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
258
231
|
});
|
|
259
232
|
return true;
|
|
260
233
|
}
|
|
261
|
-
|
|
262
234
|
endClip() {
|
|
263
235
|
let ctx = this.context();
|
|
264
236
|
let page = ctx.getCurrentPage();
|
|
@@ -267,24 +239,19 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
267
239
|
});
|
|
268
240
|
return true;
|
|
269
241
|
}
|
|
270
|
-
|
|
271
242
|
addFragment(block, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {
|
|
272
243
|
let ctx = this.context();
|
|
273
244
|
let page = ctx.getCurrentPage();
|
|
274
|
-
|
|
275
245
|
if (!useBlockXOffset && block.height > ctx.availableHeight) {
|
|
276
246
|
return false;
|
|
277
247
|
}
|
|
278
|
-
|
|
279
248
|
block.items.forEach(item => {
|
|
280
249
|
switch (item.type) {
|
|
281
250
|
case 'line':
|
|
282
251
|
var l = item.item.clone();
|
|
283
|
-
|
|
284
252
|
if (l._node) {
|
|
285
253
|
l._node.positions[0].pageNumber = ctx.page + 1;
|
|
286
254
|
}
|
|
287
|
-
|
|
288
255
|
l.x = (l.x || 0) + (useBlockXOffset ? block.xOffset || 0 : ctx.x);
|
|
289
256
|
l.y = (l.y || 0) + (useBlockYOffset ? block.yOffset || 0 : ctx.y);
|
|
290
257
|
page.items.push({
|
|
@@ -292,16 +259,25 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
292
259
|
item: l
|
|
293
260
|
});
|
|
294
261
|
break;
|
|
295
|
-
|
|
296
262
|
case 'vector':
|
|
297
263
|
var v = (0, _tools.pack)(item.item);
|
|
298
264
|
(0, _tools.offsetVector)(v, useBlockXOffset ? block.xOffset || 0 : ctx.x, useBlockYOffset ? block.yOffset || 0 : ctx.y);
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
265
|
+
if (v._isFillColorFromUnbreakable) {
|
|
266
|
+
// If the item is a fillColor from an unbreakable block
|
|
267
|
+
// We have to add it at the beginning of the items body array of the page
|
|
268
|
+
delete v._isFillColorFromUnbreakable;
|
|
269
|
+
const endOfBackgroundItemsIndex = ctx.backgroundLength[ctx.page];
|
|
270
|
+
page.items.splice(endOfBackgroundItemsIndex, 0, {
|
|
271
|
+
type: 'vector',
|
|
272
|
+
item: v
|
|
273
|
+
});
|
|
274
|
+
} else {
|
|
275
|
+
page.items.push({
|
|
276
|
+
type: 'vector',
|
|
277
|
+
item: v
|
|
278
|
+
});
|
|
279
|
+
}
|
|
303
280
|
break;
|
|
304
|
-
|
|
305
281
|
case 'image':
|
|
306
282
|
case 'svg':
|
|
307
283
|
var img = (0, _tools.pack)(item.item);
|
|
@@ -314,13 +290,12 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
314
290
|
break;
|
|
315
291
|
}
|
|
316
292
|
});
|
|
317
|
-
|
|
318
293
|
if (!dontUpdateContextPosition) {
|
|
319
294
|
ctx.moveDown(block.height);
|
|
320
295
|
}
|
|
321
|
-
|
|
322
296
|
return true;
|
|
323
297
|
}
|
|
298
|
+
|
|
324
299
|
/**
|
|
325
300
|
* Pushes the provided context onto the stack or creates a new one
|
|
326
301
|
*
|
|
@@ -331,14 +306,11 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
331
306
|
* @param {object|number} contextOrWidth
|
|
332
307
|
* @param {number} height
|
|
333
308
|
*/
|
|
334
|
-
|
|
335
|
-
|
|
336
309
|
pushContext(contextOrWidth, height) {
|
|
337
310
|
if (contextOrWidth === undefined) {
|
|
338
311
|
height = this.context().getCurrentPage().height - this.context().pageMargins.top - this.context().pageMargins.bottom;
|
|
339
312
|
contextOrWidth = this.context().availableWidth;
|
|
340
313
|
}
|
|
341
|
-
|
|
342
314
|
if ((0, _variableType.isNumber)(contextOrWidth)) {
|
|
343
315
|
contextOrWidth = new _DocumentContext.default({
|
|
344
316
|
width: contextOrWidth,
|
|
@@ -350,21 +322,16 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
350
322
|
bottom: 0
|
|
351
323
|
});
|
|
352
324
|
}
|
|
353
|
-
|
|
354
325
|
this.contextStack.push(this.context());
|
|
355
326
|
this._context = contextOrWidth;
|
|
356
327
|
}
|
|
357
|
-
|
|
358
328
|
popContext() {
|
|
359
329
|
this._context = this.contextStack.pop();
|
|
360
330
|
}
|
|
361
|
-
|
|
362
331
|
getCurrentPositionOnPage() {
|
|
363
332
|
return (this.contextStack[0] || this.context()).getCurrentPosition();
|
|
364
333
|
}
|
|
365
|
-
|
|
366
334
|
}
|
|
367
|
-
|
|
368
335
|
function addPageItem(page, item, index) {
|
|
369
336
|
if (index === null || index === undefined || index < 0 || index > page.items.length) {
|
|
370
337
|
page.items.push(item);
|
|
@@ -372,6 +339,4 @@ function addPageItem(page, item, index) {
|
|
|
372
339
|
page.items.splice(index, 0, item);
|
|
373
340
|
}
|
|
374
341
|
}
|
|
375
|
-
|
|
376
|
-
var _default = ElementWriter;
|
|
377
|
-
exports.default = _default;
|
|
342
|
+
var _default = exports.default = ElementWriter;
|