pdfmake 0.3.0-beta.1 → 0.3.0-beta.11
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/.idea/workspace.xml +20 -0
- package/CHANGELOG.md +65 -1
- package/LICENSE +1 -1
- package/README.md +3 -1
- package/build/pdfmake.js +65069 -73247
- 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 +42 -74
- 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 +14 -35
- 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 +94 -136
- 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 +45 -5
- package/src/LayoutBuilder.js +201 -18
- package/src/OutputDocument.js +1 -1
- package/src/PDFDocument.js +27 -1
- package/src/PageElementWriter.js +6 -2
- package/src/Printer.js +93 -7
- package/src/Renderer.js +35 -0
- package/src/StyleContextStack.js +3 -44
- package/src/TableProcessor.js +64 -20
- 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,88 @@ 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
|
-
addVector(vector, ignoreContextX, ignoreContextY, index) {
|
|
207
|
+
addVector(vector, ignoreContextX, ignoreContextY, index, forcePage) {
|
|
233
208
|
let context = this.context();
|
|
234
209
|
let page = context.getCurrentPage();
|
|
210
|
+
if ((0, _variableType.isNumber)(forcePage)) {
|
|
211
|
+
page = context.pages[forcePage];
|
|
212
|
+
}
|
|
235
213
|
let position = this.getCurrentPositionOnPage();
|
|
236
|
-
|
|
237
214
|
if (page) {
|
|
238
215
|
(0, _tools.offsetVector)(vector, ignoreContextX ? 0 : context.x, ignoreContextY ? 0 : context.y);
|
|
239
216
|
addPageItem(page, {
|
|
@@ -243,7 +220,6 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
243
220
|
return position;
|
|
244
221
|
}
|
|
245
222
|
}
|
|
246
|
-
|
|
247
223
|
beginClip(width, height) {
|
|
248
224
|
let ctx = this.context();
|
|
249
225
|
let page = ctx.getCurrentPage();
|
|
@@ -258,7 +234,6 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
258
234
|
});
|
|
259
235
|
return true;
|
|
260
236
|
}
|
|
261
|
-
|
|
262
237
|
endClip() {
|
|
263
238
|
let ctx = this.context();
|
|
264
239
|
let page = ctx.getCurrentPage();
|
|
@@ -267,24 +242,19 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
267
242
|
});
|
|
268
243
|
return true;
|
|
269
244
|
}
|
|
270
|
-
|
|
271
245
|
addFragment(block, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {
|
|
272
246
|
let ctx = this.context();
|
|
273
247
|
let page = ctx.getCurrentPage();
|
|
274
|
-
|
|
275
248
|
if (!useBlockXOffset && block.height > ctx.availableHeight) {
|
|
276
249
|
return false;
|
|
277
250
|
}
|
|
278
|
-
|
|
279
251
|
block.items.forEach(item => {
|
|
280
252
|
switch (item.type) {
|
|
281
253
|
case 'line':
|
|
282
254
|
var l = item.item.clone();
|
|
283
|
-
|
|
284
255
|
if (l._node) {
|
|
285
256
|
l._node.positions[0].pageNumber = ctx.page + 1;
|
|
286
257
|
}
|
|
287
|
-
|
|
288
258
|
l.x = (l.x || 0) + (useBlockXOffset ? block.xOffset || 0 : ctx.x);
|
|
289
259
|
l.y = (l.y || 0) + (useBlockYOffset ? block.yOffset || 0 : ctx.y);
|
|
290
260
|
page.items.push({
|
|
@@ -292,16 +262,25 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
292
262
|
item: l
|
|
293
263
|
});
|
|
294
264
|
break;
|
|
295
|
-
|
|
296
265
|
case 'vector':
|
|
297
266
|
var v = (0, _tools.pack)(item.item);
|
|
298
267
|
(0, _tools.offsetVector)(v, useBlockXOffset ? block.xOffset || 0 : ctx.x, useBlockYOffset ? block.yOffset || 0 : ctx.y);
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
268
|
+
if (v._isFillColorFromUnbreakable) {
|
|
269
|
+
// If the item is a fillColor from an unbreakable block
|
|
270
|
+
// We have to add it at the beginning of the items body array of the page
|
|
271
|
+
delete v._isFillColorFromUnbreakable;
|
|
272
|
+
const endOfBackgroundItemsIndex = ctx.backgroundLength[ctx.page];
|
|
273
|
+
page.items.splice(endOfBackgroundItemsIndex, 0, {
|
|
274
|
+
type: 'vector',
|
|
275
|
+
item: v
|
|
276
|
+
});
|
|
277
|
+
} else {
|
|
278
|
+
page.items.push({
|
|
279
|
+
type: 'vector',
|
|
280
|
+
item: v
|
|
281
|
+
});
|
|
282
|
+
}
|
|
303
283
|
break;
|
|
304
|
-
|
|
305
284
|
case 'image':
|
|
306
285
|
case 'svg':
|
|
307
286
|
var img = (0, _tools.pack)(item.item);
|
|
@@ -314,13 +293,12 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
314
293
|
break;
|
|
315
294
|
}
|
|
316
295
|
});
|
|
317
|
-
|
|
318
296
|
if (!dontUpdateContextPosition) {
|
|
319
297
|
ctx.moveDown(block.height);
|
|
320
298
|
}
|
|
321
|
-
|
|
322
299
|
return true;
|
|
323
300
|
}
|
|
301
|
+
|
|
324
302
|
/**
|
|
325
303
|
* Pushes the provided context onto the stack or creates a new one
|
|
326
304
|
*
|
|
@@ -331,14 +309,11 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
331
309
|
* @param {object|number} contextOrWidth
|
|
332
310
|
* @param {number} height
|
|
333
311
|
*/
|
|
334
|
-
|
|
335
|
-
|
|
336
312
|
pushContext(contextOrWidth, height) {
|
|
337
313
|
if (contextOrWidth === undefined) {
|
|
338
314
|
height = this.context().getCurrentPage().height - this.context().pageMargins.top - this.context().pageMargins.bottom;
|
|
339
315
|
contextOrWidth = this.context().availableWidth;
|
|
340
316
|
}
|
|
341
|
-
|
|
342
317
|
if ((0, _variableType.isNumber)(contextOrWidth)) {
|
|
343
318
|
contextOrWidth = new _DocumentContext.default({
|
|
344
319
|
width: contextOrWidth,
|
|
@@ -350,21 +325,16 @@ class ElementWriter extends _events.EventEmitter {
|
|
|
350
325
|
bottom: 0
|
|
351
326
|
});
|
|
352
327
|
}
|
|
353
|
-
|
|
354
328
|
this.contextStack.push(this.context());
|
|
355
329
|
this._context = contextOrWidth;
|
|
356
330
|
}
|
|
357
|
-
|
|
358
331
|
popContext() {
|
|
359
332
|
this._context = this.contextStack.pop();
|
|
360
333
|
}
|
|
361
|
-
|
|
362
334
|
getCurrentPositionOnPage() {
|
|
363
335
|
return (this.contextStack[0] || this.context()).getCurrentPosition();
|
|
364
336
|
}
|
|
365
|
-
|
|
366
337
|
}
|
|
367
|
-
|
|
368
338
|
function addPageItem(page, item, index) {
|
|
369
339
|
if (index === null || index === undefined || index < 0 || index > page.items.length) {
|
|
370
340
|
page.items.push(item);
|
|
@@ -372,6 +342,4 @@ function addPageItem(page, item, index) {
|
|
|
372
342
|
page.items.splice(index, 0, item);
|
|
373
343
|
}
|
|
374
344
|
}
|
|
375
|
-
|
|
376
|
-
var _default = ElementWriter;
|
|
377
|
-
exports.default = _default;
|
|
345
|
+
var _default = exports.default = ElementWriter;
|