pdfmake 0.3.0-beta.9 → 0.3.0

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 (74) hide show
  1. package/CHANGELOG.md +7 -48
  2. package/LICENSE +1 -1
  3. package/README.md +78 -85
  4. package/build/pdfmake.js +66833 -75014
  5. package/build/pdfmake.js.map +1 -1
  6. package/build/pdfmake.min.js +2 -2
  7. package/build/pdfmake.min.js.map +1 -1
  8. package/build/vfs_fonts.js +4 -4
  9. package/fonts/Roboto/Roboto-Italic.ttf +0 -0
  10. package/fonts/Roboto/Roboto-Medium.ttf +0 -0
  11. package/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
  12. package/fonts/Roboto/Roboto-Regular.ttf +0 -0
  13. package/js/DocMeasure.js +20 -1
  14. package/js/DocPreprocessor.js +21 -6
  15. package/js/DocumentContext.js +64 -17
  16. package/js/ElementWriter.js +31 -8
  17. package/js/LayoutBuilder.js +488 -127
  18. package/js/OutputDocument.js +22 -34
  19. package/js/OutputDocumentServer.js +6 -11
  20. package/js/PDFDocument.js +1 -1
  21. package/js/PageElementWriter.js +17 -2
  22. package/js/Printer.js +133 -133
  23. package/js/Renderer.js +22 -14
  24. package/js/SVGMeasure.js +2 -2
  25. package/js/StyleContextStack.js +4 -0
  26. package/js/TableProcessor.js +40 -14
  27. package/js/TextBreaker.js +31 -4
  28. package/js/TextInlines.js +1 -1
  29. package/js/URLResolver.js +25 -55
  30. package/js/base.js +1 -1
  31. package/js/browser-extensions/OutputDocumentBrowser.js +35 -72
  32. package/js/browser-extensions/index.js +2 -2
  33. package/js/browser-extensions/pdfMake.js +0 -12
  34. package/js/browser-extensions/standard-fonts/Courier.js +4 -4
  35. package/js/browser-extensions/standard-fonts/Helvetica.js +4 -4
  36. package/js/browser-extensions/standard-fonts/Symbol.js +1 -1
  37. package/js/browser-extensions/standard-fonts/Times.js +4 -4
  38. package/js/browser-extensions/standard-fonts/ZapfDingbats.js +1 -1
  39. package/js/helpers/tools.js +6 -0
  40. package/js/index.js +1 -1
  41. package/package.json +25 -24
  42. package/src/DocMeasure.js +21 -1
  43. package/src/DocPreprocessor.js +25 -6
  44. package/src/DocumentContext.js +56 -20
  45. package/src/ElementWriter.js +30 -7
  46. package/src/LayoutBuilder.js +531 -144
  47. package/src/OutputDocument.js +23 -37
  48. package/src/OutputDocumentServer.js +6 -11
  49. package/src/PDFDocument.js +1 -1
  50. package/src/PageElementWriter.js +21 -2
  51. package/src/Printer.js +134 -131
  52. package/src/Renderer.js +13 -15
  53. package/src/SVGMeasure.js +2 -2
  54. package/src/StyleContextStack.js +4 -0
  55. package/src/TableProcessor.js +42 -18
  56. package/src/TextBreaker.js +24 -5
  57. package/src/TextInlines.js +1 -1
  58. package/src/URLResolver.js +24 -58
  59. package/src/base.js +1 -1
  60. package/src/browser-extensions/OutputDocumentBrowser.js +33 -71
  61. package/src/browser-extensions/index.js +3 -3
  62. package/src/browser-extensions/pdfMake.js +0 -14
  63. package/src/browser-extensions/standard-fonts/Courier.js +4 -4
  64. package/src/browser-extensions/standard-fonts/Helvetica.js +4 -4
  65. package/src/browser-extensions/standard-fonts/Symbol.js +1 -1
  66. package/src/browser-extensions/standard-fonts/Times.js +4 -4
  67. package/src/browser-extensions/standard-fonts/ZapfDingbats.js +1 -1
  68. package/src/columnCalculator.js +12 -12
  69. package/src/helpers/tools.js +5 -0
  70. package/src/helpers/variableType.js +1 -1
  71. package/src/index.js +1 -1
  72. package/standard-fonts/Helvetica.js +0 -1
  73. package/js/browser-extensions/URLBrowserResolver.js +0 -76
  74. package/src/browser-extensions/URLBrowserResolver.js +0 -84
@@ -113,13 +113,18 @@ class TableProcessor {
113
113
  }
114
114
  }
115
115
  this.dontBreakRows = tableNode.table.dontBreakRows || false;
116
- if (this.rowsWithoutPageBreak) {
116
+ if (this.rowsWithoutPageBreak || this.dontBreakRows) {
117
117
  writer.beginUnbreakableBlock();
118
+ // Draw the top border of the table
119
+ this.drawHorizontalLine(0, writer);
120
+ if (this.rowsWithoutPageBreak && this.dontBreakRows) {
121
+ // We just increase the value of transactionLevel
122
+ writer.beginUnbreakableBlock();
123
+ }
118
124
  }
119
125
 
120
126
  // update the border properties of all cells before drawing any lines
121
127
  prepareCellBorders(this.tableNode.table.body);
122
- this.drawHorizontalLine(0, writer);
123
128
  }
124
129
  onRowBreak(rowIndex, writer) {
125
130
  return () => {
@@ -135,7 +140,12 @@ class TableProcessor {
135
140
  this.rowPaddingBottom = this.layout.paddingBottom(rowIndex, this.tableNode);
136
141
  this.rowCallback = this.onRowBreak(rowIndex, writer);
137
142
  writer.addListener('pageChanged', this.rowCallback);
138
- if (this.dontBreakRows) {
143
+ if (rowIndex == 0 && !this.dontBreakRows && !this.rowsWithoutPageBreak) {
144
+ // We store the 'y' to draw later and if necessary the top border of the table
145
+ this._tableTopBorderY = writer.context().y;
146
+ writer.context().moveDown(this.topLineWidth);
147
+ }
148
+ if (this.dontBreakRows && rowIndex > 0) {
139
149
  writer.beginUnbreakableBlock();
140
150
  }
141
151
  this.rowTopY = writer.context().y;
@@ -143,7 +153,7 @@ class TableProcessor {
143
153
  writer.context().availableHeight -= this.reservedAtBottom;
144
154
  writer.context().moveDown(this.rowPaddingTop);
145
155
  }
146
- drawHorizontalLine(lineIndex, writer, overrideY) {
156
+ drawHorizontalLine(lineIndex, writer, overrideY, moveDown = true, forcePage) {
147
157
  let lineWidth = this.layout.hLineWidth(lineIndex, this.tableNode);
148
158
  if (lineWidth) {
149
159
  let style = this.layout.hLineStyle(lineIndex, this.tableNode);
@@ -237,7 +247,7 @@ class TableProcessor {
237
247
  lineWidth: lineWidth,
238
248
  dash: dash,
239
249
  lineColor: borderColor
240
- }, false, overrideY);
250
+ }, false, (0, _variableType.isNumber)(overrideY), null, forcePage);
241
251
  currentLine = null;
242
252
  borderColor = null;
243
253
  cellAbove = null;
@@ -246,7 +256,9 @@ class TableProcessor {
246
256
  }
247
257
  }
248
258
  }
249
- writer.context().moveDown(lineWidth);
259
+ if (moveDown) {
260
+ writer.context().moveDown(lineWidth);
261
+ }
250
262
  }
251
263
  }
252
264
  drawVerticalLine(x, y0, y1, vLineColIndex, writer, vLineRowIndex, beforeVLineColIndex) {
@@ -369,6 +381,15 @@ class TableProcessor {
369
381
  }
370
382
  ys[ys.length - 1].y1 = endingY;
371
383
  let skipOrphanePadding = ys[0].y1 - ys[0].y0 === this.rowPaddingTop;
384
+ if (rowIndex === 0 && !skipOrphanePadding && !this.rowsWithoutPageBreak && !this.dontBreakRows) {
385
+ // Draw the top border of the table
386
+ let pageTableStartedAt = null;
387
+ if (pageBreaks && pageBreaks.length > 0) {
388
+ // Get the page where table started at
389
+ pageTableStartedAt = pageBreaks[0].prevPage;
390
+ }
391
+ this.drawHorizontalLine(0, writer, this._tableTopBorderY, false, pageTableStartedAt);
392
+ }
372
393
  for (let yi = skipOrphanePadding ? 1 : 0, yl = ys.length; yi < yl; yi++) {
373
394
  let willBreak = yi < ys.length - 1;
374
395
  let rowBreakWithoutHeader = yi > 0 && !this.headerRows;
@@ -385,6 +406,14 @@ class TableProcessor {
385
406
  // TableProcessor should be pageChanged listener, instead of processRow
386
407
  this.reservedAtBottom = 0;
387
408
  }
409
+
410
+ // Draw horizontal lines before the vertical lines so they are not overridden
411
+ if (willBreak && this.layout.hLineWhenBroken !== false) {
412
+ this.drawHorizontalLine(rowIndex + 1, writer, y2);
413
+ }
414
+ if (rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) {
415
+ this.drawHorizontalLine(rowIndex, writer, y1);
416
+ }
388
417
  for (let i = 0, l = xs.length; i < l; i++) {
389
418
  let leftCellBorder = false;
390
419
  let rightCellBorder = false;
@@ -447,7 +476,9 @@ class TableProcessor {
447
476
  h: bgHeight,
448
477
  lineWidth: 0,
449
478
  color: fillColor,
450
- fillOpacity: fillOpacity
479
+ fillOpacity: fillOpacity,
480
+ // mark if we are in an unbreakable block
481
+ _isFillColorFromUnbreakable: !!writer.transactionLevel
451
482
  }, false, true, writer.context().backgroundLength[writer.context().page]);
452
483
  }
453
484
  if (overlayPattern) {
@@ -465,12 +496,6 @@ class TableProcessor {
465
496
  }
466
497
  }
467
498
  }
468
- if (willBreak && this.layout.hLineWhenBroken !== false) {
469
- this.drawHorizontalLine(rowIndex + 1, writer, y2);
470
- }
471
- if (rowBreakWithoutHeader && this.layout.hLineWhenBroken !== false) {
472
- this.drawHorizontalLine(rowIndex, writer, y1);
473
- }
474
499
  }
475
500
  writer.context().page = endingPage;
476
501
  writer.context().y = endingY;
@@ -503,7 +528,8 @@ class TableProcessor {
503
528
  }
504
529
  if (this.dontBreakRows) {
505
530
  const pageChangedCallback = () => {
506
- if (!this.headerRows && this.layout.hLineWhenBroken !== false) {
531
+ if (rowIndex > 0 && !this.headerRows && this.layout.hLineWhenBroken !== false) {
532
+ // Draw the top border of the row after a page break
507
533
  this.drawHorizontalLine(rowIndex, writer);
508
534
  }
509
535
  };
package/js/TextBreaker.js CHANGED
@@ -2,23 +2,49 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  exports.default = void 0;
5
- var _linebreak = _interopRequireDefault(require("@foliojs-fork/linebreak"));
5
+ var _linebreak = _interopRequireDefault(require("linebreak"));
6
6
  var _variableType = require("./helpers/variableType");
7
7
  var _StyleContextStack = _interopRequireDefault(require("./StyleContextStack"));
8
8
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
9
  /**
10
10
  * @param {string} text
11
11
  * @param {boolean} noWrap
12
+ * @param {boolean} breakAll
12
13
  * @returns {Array}
13
14
  */
14
- const splitWords = (text, noWrap) => {
15
+ const splitWords = (text, noWrap, breakAll = false) => {
15
16
  let words = [];
17
+ if (text === undefined || text === null) {
18
+ text = '';
19
+ } else {
20
+ text = String(text);
21
+ }
16
22
  if (noWrap) {
17
23
  words.push({
18
24
  text: text
19
25
  });
20
26
  return words;
21
27
  }
28
+ if (breakAll) {
29
+ return text.split('').map(c => {
30
+ if (c.match(/^\n$|^\r$/)) {
31
+ // new line
32
+ return {
33
+ text: '',
34
+ lineEnd: true
35
+ };
36
+ }
37
+ return {
38
+ text: c
39
+ };
40
+ });
41
+ }
42
+ if (text.length === 0) {
43
+ words.push({
44
+ text: ''
45
+ });
46
+ return words;
47
+ }
22
48
  let breaker = new _linebreak.default(text);
23
49
  let last = 0;
24
50
  let bk;
@@ -101,15 +127,16 @@ class TextBreaker {
101
127
  let item = texts[i];
102
128
  let style = null;
103
129
  let words;
130
+ let breakAll = _StyleContextStack.default.getStyleProperty(item || {}, styleContextStack, 'wordBreak', 'normal') === 'break-all';
104
131
  let noWrap = _StyleContextStack.default.getStyleProperty(item || {}, styleContextStack, 'noWrap', false);
105
132
  if ((0, _variableType.isObject)(item)) {
106
133
  if (item._textRef && item._textRef._textNodeRef.text) {
107
134
  item.text = item._textRef._textNodeRef.text;
108
135
  }
109
- words = splitWords(item.text, noWrap);
136
+ words = splitWords(item.text, noWrap, breakAll);
110
137
  style = _StyleContextStack.default.copyStyle(item);
111
138
  } else {
112
- words = splitWords(item, noWrap);
139
+ words = splitWords(item, noWrap, breakAll);
113
140
  }
114
141
  if (lastWord && words.length) {
115
142
  let firstWord = getFirstWord(words, noWrap);
package/js/TextInlines.js CHANGED
@@ -45,7 +45,7 @@ class TextInlines {
45
45
  * Converts an array of strings (or inline-definition-objects) into a collection
46
46
  * of inlines and calculated minWidth/maxWidth and their min/max widths
47
47
  *
48
- * @param {Array} textArray an array of inline-definition-objects (or strings)
48
+ * @param {Array|object} textArray an array of inline-definition-objects (or strings)
49
49
  * @param {StyleContextStack} styleContextStack current style stack
50
50
  * @returns {object} collection of inlines, minWidth, maxWidth
51
51
  */
package/js/URLResolver.js CHANGED
@@ -2,72 +2,42 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  exports.default = void 0;
5
- var _http = _interopRequireDefault(require("http"));
6
- var _https = _interopRequireDefault(require("https"));
7
- function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
8
- const fetchUrl = (url, headers = {}) => {
9
- return new Promise((resolve, reject) => {
10
- const parsedUrl = new URL(url);
11
- const h = parsedUrl.protocol === 'https:' ? _https.default : _http.default;
12
- let options = {
13
- headers: headers
14
- };
15
- h.get(url, options, res => {
16
- if (res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
17
- // redirect url
18
- fetchUrl(res.headers.location).then(buffer => {
19
- resolve(buffer);
20
- }, result => {
21
- reject(result);
22
- });
23
- return;
24
- }
25
- const ok = res.statusCode >= 200 && res.statusCode < 300;
26
- if (!ok) {
27
- reject(new TypeError(`Failed to fetch (status code: ${res.statusCode}, url: "${url}")`));
28
- }
29
- const chunks = [];
30
- res.on('end', () => resolve(Buffer.concat(chunks)));
31
- res.on('data', d => chunks.push(d));
32
- }).on('error', reject);
33
- });
34
- };
5
+ async function fetchUrl(url, headers = {}) {
6
+ try {
7
+ const response = await fetch(url, {
8
+ headers
9
+ });
10
+ if (!response.ok) {
11
+ throw new Error(`Failed to fetch (status code: ${response.status}, url: "${url}")`);
12
+ }
13
+ return await response.arrayBuffer();
14
+ } catch (error) {
15
+ throw new Error(`Network request failed (url: "${url}", error: ${error.message})`);
16
+ }
17
+ }
35
18
  class URLResolver {
36
19
  constructor(fs) {
37
20
  this.fs = fs;
38
21
  this.resolving = {};
39
22
  }
40
23
  resolve(url, headers = {}) {
41
- if (!this.resolving[url]) {
42
- this.resolving[url] = new Promise((resolve, reject) => {
43
- if (url.toLowerCase().indexOf('https://') === 0 || url.toLowerCase().indexOf('http://') === 0) {
44
- if (this.fs.existsSync(url)) {
45
- // url was downloaded earlier
46
- resolve();
47
- } else {
48
- fetchUrl(url, headers).then(buffer => {
49
- this.fs.writeFileSync(url, buffer);
50
- resolve();
51
- }, result => {
52
- reject(result);
53
- });
54
- }
55
- } else {
56
- // cannot be resolved
57
- resolve();
24
+ const resolveUrlInternal = async () => {
25
+ if (url.toLowerCase().startsWith('https://') || url.toLowerCase().startsWith('http://')) {
26
+ if (this.fs.existsSync(url)) {
27
+ return; // url was downloaded earlier
58
28
  }
59
- });
29
+ const buffer = await fetchUrl(url, headers);
30
+ this.fs.writeFileSync(url, buffer);
31
+ }
32
+ // else cannot be resolved
33
+ };
34
+ if (!this.resolving[url]) {
35
+ this.resolving[url] = resolveUrlInternal();
60
36
  }
61
37
  return this.resolving[url];
62
38
  }
63
39
  resolved() {
64
- return new Promise((resolve, reject) => {
65
- Promise.all(Object.values(this.resolving)).then(() => {
66
- resolve();
67
- }, result => {
68
- reject(result);
69
- });
70
- });
40
+ return Promise.all(Object.values(this.resolving));
71
41
  }
72
42
  }
73
43
  var _default = exports.default = URLResolver;
package/js/base.js CHANGED
@@ -20,7 +20,7 @@ class pdfmake {
20
20
  createPdf(docDefinition, options = {}) {
21
21
  options.progressCallback = this.progressCallback;
22
22
  options.tableLayouts = this.tableLayouts;
23
- let printer = new _Printer.default(this.fonts, this.virtualfs, this.urlResolver);
23
+ let printer = new _Printer.default(this.fonts, this.virtualfs, this.urlResolver());
24
24
  const pdfDocumentPromise = printer.createPdfKitDocument(docDefinition, options);
25
25
  return this._transformToDocument(pdfDocumentPromise);
26
26
  }
@@ -21,20 +21,10 @@ class OutputDocumentBrowser extends _OutputDocument.default {
21
21
  /**
22
22
  * @returns {Promise<Blob>}
23
23
  */
24
- getBlob() {
25
- return new Promise((resolve, reject) => {
26
- this.getBuffer().then(buffer => {
27
- try {
28
- let blob = new Blob([buffer], {
29
- type: 'application/pdf'
30
- });
31
- resolve(blob);
32
- } catch (e) {
33
- reject(e);
34
- }
35
- }, result => {
36
- reject(result);
37
- });
24
+ async getBlob() {
25
+ const buffer = await this.getBuffer();
26
+ return new Blob([buffer], {
27
+ type: 'application/pdf'
38
28
  });
39
29
  }
40
30
 
@@ -42,77 +32,50 @@ class OutputDocumentBrowser extends _OutputDocument.default {
42
32
  * @param {string} filename
43
33
  * @returns {Promise}
44
34
  */
45
- download(filename = 'file.pdf') {
46
- return new Promise((resolve, reject) => {
47
- this.getBlob().then(blob => {
48
- try {
49
- (0, _fileSaver.saveAs)(blob, filename);
50
- resolve();
51
- } catch (e) {
52
- reject(e);
53
- }
54
- }, result => {
55
- reject(result);
56
- });
57
- });
35
+ async download(filename = 'file.pdf') {
36
+ const blob = await this.getBlob();
37
+ (0, _fileSaver.saveAs)(blob, filename);
58
38
  }
59
39
 
60
40
  /**
61
41
  * @param {Window} win
62
42
  * @returns {Promise}
63
43
  */
64
- open(win = null) {
65
- return new Promise((resolve, reject) => {
66
- if (!win) {
67
- win = openWindow();
68
- }
69
- this.getBlob().then(blob => {
70
- try {
71
- let urlCreator = window.URL || window.webkitURL;
72
- let pdfUrl = urlCreator.createObjectURL(blob);
73
- win.location.href = pdfUrl;
44
+ async open(win = null) {
45
+ if (!win) {
46
+ win = openWindow();
47
+ }
48
+ const blob = await this.getBlob();
49
+ try {
50
+ let urlCreator = window.URL || window.webkitURL;
51
+ let pdfUrl = urlCreator.createObjectURL(blob);
52
+ win.location.href = pdfUrl;
74
53
 
75
- //
76
- resolve();
77
- /* temporarily disabled
78
- if (win === window) {
79
- resolve();
80
- } else {
81
- setTimeout(() => {
82
- if (win.window === null) { // is closed by AdBlock
83
- window.location.href = pdfUrl; // open in actual window
84
- }
85
- resolve();
86
- }, 500);
87
- }
88
- */
89
- } catch (e) {
90
- win.close();
91
- reject(e);
92
- }
93
- }, result => {
94
- reject(result);
95
- });
96
- });
54
+ /* temporarily disabled
55
+ if (win === window) {
56
+ return;
57
+ } else {
58
+ setTimeout(() => {
59
+ if (win.window === null) { // is closed by AdBlock
60
+ window.location.href = pdfUrl; // open in actual window
61
+ }
62
+ return;
63
+ }, 500);
64
+ }
65
+ */
66
+ } finally {
67
+ win.close();
68
+ }
97
69
  }
98
70
 
99
71
  /**
100
72
  * @param {Window} win
101
73
  * @returns {Promise}
102
74
  */
103
- print(win = null) {
104
- return new Promise((resolve, reject) => {
105
- this.getStream().then(stream => {
106
- stream.setOpenActionAsPrint();
107
- return this.open(win).then(() => {
108
- resolve();
109
- }, result => {
110
- reject(result);
111
- });
112
- }, result => {
113
- reject(result);
114
- });
115
- });
75
+ async print(win = null) {
76
+ const stream = await this.getStream();
77
+ stream.setOpenActionAsPrint();
78
+ await this.open(win);
116
79
  }
117
80
  }
118
81
  var _default = exports.default = OutputDocumentBrowser;
@@ -4,7 +4,7 @@ exports.__esModule = true;
4
4
  exports.default = void 0;
5
5
  var _base = _interopRequireDefault(require("../base"));
6
6
  var _OutputDocumentBrowser = _interopRequireDefault(require("./OutputDocumentBrowser"));
7
- var _URLBrowserResolver = _interopRequireDefault(require("./URLBrowserResolver"));
7
+ var _URLResolver = _interopRequireDefault(require("../URLResolver"));
8
8
  var _fs = _interopRequireDefault(require("fs"));
9
9
  var _configurator = _interopRequireDefault(require("core-js/configurator"));
10
10
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
@@ -23,7 +23,7 @@ let defaultClientFonts = {
23
23
  class pdfmake extends _base.default {
24
24
  constructor() {
25
25
  super();
26
- this.urlResolver = new _URLBrowserResolver.default(this.virtualfs);
26
+ this.urlResolver = () => new _URLResolver.default(this.virtualfs);
27
27
  this.fonts = defaultClientFonts;
28
28
  }
29
29
  addFontContainer(fontContainer) {
@@ -1,15 +1,3 @@
1
1
  "use strict";
2
2
 
3
- const isBrowserSupported = () => {
4
- if (typeof window === 'undefined' || typeof window.navigator === 'undefined') {
5
- // Enviroment is not browser.
6
- return true;
7
- }
8
-
9
- // Internet Explorer 10 and older is not supported.
10
- return window.navigator.userAgent.indexOf("MSIE") === -1;
11
- };
12
- if (!isBrowserSupported()) {
13
- throw new Error('pdfmake: Internet Explorer 10 and older is not supported. Upgrade to version 11 or use modern browser.');
14
- }
15
3
  module.exports = require('./index').default;
@@ -4,19 +4,19 @@ var fs = require('fs');
4
4
  var fontContainer = {
5
5
  vfs: {
6
6
  'data/Courier.afm': {
7
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/Courier.afm', 'utf8'),
7
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Courier.afm', 'utf8'),
8
8
  encoding: 'utf8'
9
9
  },
10
10
  'data/Courier-Bold.afm': {
11
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/Courier-Bold.afm', 'utf8'),
11
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Courier-Bold.afm', 'utf8'),
12
12
  encoding: 'utf8'
13
13
  },
14
14
  'data/Courier-Oblique.afm': {
15
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/Courier-Oblique.afm', 'utf8'),
15
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Courier-Oblique.afm', 'utf8'),
16
16
  encoding: 'utf8'
17
17
  },
18
18
  'data/Courier-BoldOblique.afm': {
19
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/Courier-BoldOblique.afm', 'utf8'),
19
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Courier-BoldOblique.afm', 'utf8'),
20
20
  encoding: 'utf8'
21
21
  }
22
22
  },
@@ -4,19 +4,19 @@ var fs = require('fs');
4
4
  var fontContainer = {
5
5
  vfs: {
6
6
  'data/Helvetica.afm': {
7
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/Helvetica.afm', 'utf8'),
7
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Helvetica.afm', 'utf8'),
8
8
  encoding: 'utf8'
9
9
  },
10
10
  'data/Helvetica-Bold.afm': {
11
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/Helvetica-Bold.afm', 'utf8'),
11
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Helvetica-Bold.afm', 'utf8'),
12
12
  encoding: 'utf8'
13
13
  },
14
14
  'data/Helvetica-Oblique.afm': {
15
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/Helvetica-Oblique.afm', 'utf8'),
15
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Helvetica-Oblique.afm', 'utf8'),
16
16
  encoding: 'utf8'
17
17
  },
18
18
  'data/Helvetica-BoldOblique.afm': {
19
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/Helvetica-BoldOblique.afm', 'utf8'),
19
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Helvetica-BoldOblique.afm', 'utf8'),
20
20
  encoding: 'utf8'
21
21
  }
22
22
  },
@@ -4,7 +4,7 @@ var fs = require('fs');
4
4
  var fontContainer = {
5
5
  vfs: {
6
6
  'data/Symbol.afm': {
7
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/Symbol.afm', 'utf8'),
7
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Symbol.afm', 'utf8'),
8
8
  encoding: 'utf8'
9
9
  }
10
10
  },
@@ -4,19 +4,19 @@ var fs = require('fs');
4
4
  var fontContainer = {
5
5
  vfs: {
6
6
  'data/Times-Roman.afm': {
7
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/Times-Roman.afm', 'utf8'),
7
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Times-Roman.afm', 'utf8'),
8
8
  encoding: 'utf8'
9
9
  },
10
10
  'data/Times-Bold.afm': {
11
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/Times-Bold.afm', 'utf8'),
11
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Times-Bold.afm', 'utf8'),
12
12
  encoding: 'utf8'
13
13
  },
14
14
  'data/Times-Italic.afm': {
15
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/Times-Italic.afm', 'utf8'),
15
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Times-Italic.afm', 'utf8'),
16
16
  encoding: 'utf8'
17
17
  },
18
18
  'data/Times-BoldItalic.afm': {
19
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/Times-BoldItalic.afm', 'utf8'),
19
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/Times-BoldItalic.afm', 'utf8'),
20
20
  encoding: 'utf8'
21
21
  }
22
22
  },
@@ -4,7 +4,7 @@ var fs = require('fs');
4
4
  var fontContainer = {
5
5
  vfs: {
6
6
  'data/ZapfDingbats.afm': {
7
- data: fs.readFileSync(__dirname + '/../../../node_modules/@foliojs-fork/pdfkit/js/data/ZapfDingbats.afm', 'utf8'),
7
+ data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/ZapfDingbats.afm', 'utf8'),
8
8
  encoding: 'utf8'
9
9
  }
10
10
  },
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  exports.__esModule = true;
4
+ exports.convertToDynamicContent = convertToDynamicContent;
4
5
  exports.offsetVector = offsetVector;
5
6
  exports.pack = pack;
6
7
  function pack(...args) {
@@ -37,4 +38,9 @@ function offsetVector(vector, x, y) {
37
38
  }
38
39
  break;
39
40
  }
41
+ }
42
+ function convertToDynamicContent(staticContent) {
43
+ return () =>
44
+ // copy to new object
45
+ JSON.parse(JSON.stringify(staticContent));
40
46
  }
package/js/index.js CHANGED
@@ -6,7 +6,7 @@ const URLResolver = require('./URLResolver').default;
6
6
  class pdfmake extends pdfmakeBase {
7
7
  constructor() {
8
8
  super();
9
- this.urlResolver = new URLResolver(this.virtualfs);
9
+ this.urlResolver = () => new URLResolver(this.virtualfs);
10
10
  }
11
11
  _transformToDocument(doc) {
12
12
  return new OutputDocumentServer(doc);