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.
Files changed (77) hide show
  1. package/.idea/workspace.xml +20 -0
  2. package/CHANGELOG.md +65 -1
  3. package/LICENSE +1 -1
  4. package/README.md +3 -1
  5. package/build/pdfmake.js +65069 -73247
  6. package/build/pdfmake.js.map +1 -1
  7. package/build/pdfmake.min.js +2 -2
  8. package/build/pdfmake.min.js.map +1 -1
  9. package/build/vfs_fonts.js +4 -4
  10. package/eslint.config.mjs +52 -0
  11. package/fonts/Roboto/Roboto-Italic.ttf +0 -0
  12. package/fonts/Roboto/Roboto-Medium.ttf +0 -0
  13. package/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
  14. package/fonts/Roboto/Roboto-Regular.ttf +0 -0
  15. package/js/3rd-party/svg-to-pdfkit/source.js +247 -922
  16. package/js/3rd-party/svg-to-pdfkit.js +2 -6
  17. package/js/DocMeasure.js +24 -148
  18. package/js/DocPreprocessor.js +8 -55
  19. package/js/DocumentContext.js +44 -62
  20. package/js/ElementWriter.js +42 -74
  21. package/js/LayoutBuilder.js +225 -177
  22. package/js/Line.js +7 -27
  23. package/js/OutputDocument.js +6 -16
  24. package/js/OutputDocumentServer.js +2 -9
  25. package/js/PDFDocument.js +24 -43
  26. package/js/PageElementWriter.js +14 -35
  27. package/js/PageSize.js +3 -17
  28. package/js/Printer.js +102 -49
  29. package/js/Renderer.js +37 -95
  30. package/js/SVGMeasure.js +3 -23
  31. package/js/StyleContextStack.js +13 -55
  32. package/js/TableProcessor.js +94 -136
  33. package/js/TextBreaker.js +4 -47
  34. package/js/TextDecorator.js +3 -41
  35. package/js/TextInlines.js +10 -52
  36. package/js/URLResolver.js +18 -24
  37. package/js/base.js +3 -20
  38. package/js/browser-extensions/OutputDocumentBrowser.js +7 -20
  39. package/js/browser-extensions/URLBrowserResolver.js +7 -20
  40. package/js/browser-extensions/fonts/Roboto.js +0 -4
  41. package/js/browser-extensions/index.js +2 -19
  42. package/js/browser-extensions/pdfMake.js +0 -14
  43. package/js/browser-extensions/standard-fonts/Courier.js +0 -4
  44. package/js/browser-extensions/standard-fonts/Helvetica.js +0 -4
  45. package/js/browser-extensions/standard-fonts/Symbol.js +0 -4
  46. package/js/browser-extensions/standard-fonts/Times.js +0 -4
  47. package/js/browser-extensions/standard-fonts/ZapfDingbats.js +0 -4
  48. package/js/columnCalculator.js +30 -24
  49. package/js/helpers/node.js +3 -27
  50. package/js/helpers/tools.js +0 -8
  51. package/js/helpers/variableType.js +15 -8
  52. package/js/index.js +0 -6
  53. package/js/qrEnc.js +133 -222
  54. package/js/standardPageSizes.js +2 -3
  55. package/js/tableLayouts.js +4 -33
  56. package/js/virtual-fs.js +4 -21
  57. package/package.json +25 -22
  58. package/src/DocMeasure.js +19 -6
  59. package/src/DocPreprocessor.js +6 -0
  60. package/src/DocumentContext.js +35 -20
  61. package/src/ElementWriter.js +45 -5
  62. package/src/LayoutBuilder.js +201 -18
  63. package/src/OutputDocument.js +1 -1
  64. package/src/PDFDocument.js +27 -1
  65. package/src/PageElementWriter.js +6 -2
  66. package/src/Printer.js +93 -7
  67. package/src/Renderer.js +35 -0
  68. package/src/StyleContextStack.js +3 -44
  69. package/src/TableProcessor.js +64 -20
  70. package/src/TextDecorator.js +1 -1
  71. package/src/URLResolver.js +16 -8
  72. package/src/browser-extensions/URLBrowserResolver.js +6 -3
  73. package/src/browser-extensions/index.js +1 -1
  74. package/src/browser-extensions/pdfMake.js +0 -14
  75. package/src/columnCalculator.js +24 -3
  76. package/src/helpers/variableType.js +11 -0
  77. package/src/qrEnc.js +5 -3
@@ -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
- page.items.push({
300
- type: 'vector',
301
- item: v
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;