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
@@ -23,26 +23,24 @@ class OutputDocument {
23
23
  * @returns {Promise<Buffer>}
24
24
  */
25
25
  getBuffer() {
26
- if (this.bufferPromise === null) {
27
- this.bufferPromise = new Promise((resolve, reject) => {
28
- this.getStream().then(stream => {
29
- let chunks = [];
30
- let result;
31
- stream.on('readable', () => {
32
- let chunk;
33
- while ((chunk = stream.read(this.bufferSize)) !== null) {
34
- chunks.push(chunk);
35
- }
36
- });
37
- stream.on('end', () => {
38
- result = Buffer.concat(chunks);
39
- resolve(result);
40
- });
41
- stream.end();
42
- }, result => {
43
- reject(result);
26
+ const getBufferInternal = async () => {
27
+ const stream = await this.getStream();
28
+ return new Promise(resolve => {
29
+ let chunks = [];
30
+ stream.on('readable', () => {
31
+ let chunk;
32
+ while ((chunk = stream.read(this.bufferSize)) !== null) {
33
+ chunks.push(chunk);
34
+ }
35
+ });
36
+ stream.on('end', () => {
37
+ resolve(Buffer.concat(chunks));
44
38
  });
39
+ stream.end();
45
40
  });
41
+ };
42
+ if (this.bufferPromise === null) {
43
+ this.bufferPromise = getBufferInternal();
46
44
  }
47
45
  return this.bufferPromise;
48
46
  }
@@ -50,27 +48,17 @@ class OutputDocument {
50
48
  /**
51
49
  * @returns {Promise<string>}
52
50
  */
53
- getBase64() {
54
- return new Promise((resolve, reject) => {
55
- this.getBuffer().then(buffer => {
56
- resolve(buffer.toString('base64'));
57
- }, result => {
58
- reject(result);
59
- });
60
- });
51
+ async getBase64() {
52
+ const buffer = await this.getBuffer();
53
+ return buffer.toString('base64');
61
54
  }
62
55
 
63
56
  /**
64
57
  * @returns {Promise<string>}
65
58
  */
66
- getDataUrl() {
67
- return new Promise((resolve, reject) => {
68
- this.getBase64().then(data => {
69
- resolve('data:application/pdf;base64,' + data);
70
- }, result => {
71
- reject(result);
72
- });
73
- });
59
+ async getDataUrl() {
60
+ const data = await this.getBase64();
61
+ return 'data:application/pdf;base64,' + data;
74
62
  }
75
63
  }
76
64
  var _default = exports.default = OutputDocument;
@@ -10,17 +10,12 @@ class OutputDocumentServer extends _OutputDocument.default {
10
10
  * @param {string} filename
11
11
  * @returns {Promise}
12
12
  */
13
- write(filename) {
14
- return new Promise((resolve, reject) => {
15
- this.getStream().then(stream => {
16
- stream.pipe(_fs.default.createWriteStream(filename));
17
- stream.on('end', () => {
18
- resolve();
19
- });
20
- stream.end();
21
- }, result => {
22
- reject(result);
23
- });
13
+ async write(filename) {
14
+ const stream = await this.getStream();
15
+ return new Promise(resolve => {
16
+ stream.pipe(_fs.default.createWriteStream(filename));
17
+ stream.on('end', resolve);
18
+ stream.end();
24
19
  });
25
20
  }
26
21
  }
package/js/PDFDocument.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  exports.default = void 0;
5
- var _pdfkit = _interopRequireDefault(require("@foliojs-fork/pdfkit"));
5
+ var _pdfkit = _interopRequireDefault(require("pdfkit"));
6
6
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
7
  const typeName = (bold, italics) => {
8
8
  let type = 'normal';
@@ -3,6 +3,8 @@
3
3
  exports.__esModule = true;
4
4
  exports.default = void 0;
5
5
  var _ElementWriter = _interopRequireDefault(require("./ElementWriter"));
6
+ var _PageSize = require("./PageSize");
7
+ var _DocumentContext = _interopRequireDefault(require("./DocumentContext"));
6
8
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
7
9
  /**
8
10
  * An extended ElementWriter which can handle:
@@ -13,6 +15,9 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
13
15
  * whole block will be rendered on the same page)
14
16
  */
15
17
  class PageElementWriter extends _ElementWriter.default {
18
+ /**
19
+ * @param {DocumentContext} context
20
+ */
16
21
  constructor(context) {
17
22
  super(context);
18
23
  this.transactionLevel = 0;
@@ -36,8 +41,8 @@ class PageElementWriter extends _ElementWriter.default {
36
41
  addAttachment(attachment, index) {
37
42
  return this._fitOnPage(() => super.addAttachment(attachment, index));
38
43
  }
39
- addVector(vector, ignoreContextX, ignoreContextY, index) {
40
- return super.addVector(vector, ignoreContextX, ignoreContextY, index);
44
+ addVector(vector, ignoreContextX, ignoreContextY, index, forcePage) {
45
+ return super.addVector(vector, ignoreContextX, ignoreContextY, index, forcePage);
41
46
  }
42
47
  beginClip(width, height) {
43
48
  return super.beginClip(width, height);
@@ -68,6 +73,16 @@ class PageElementWriter extends _ElementWriter.default {
68
73
  y: this.context().y
69
74
  });
70
75
  }
76
+ addPage(pageSize, pageOrientation, pageMargin, customProperties = {}) {
77
+ let prevPage = this.page;
78
+ let prevY = this.y;
79
+ this.context().addPage((0, _PageSize.normalizePageSize)(pageSize, pageOrientation), (0, _PageSize.normalizePageMargin)(pageMargin), customProperties);
80
+ this.emit('pageChanged', {
81
+ prevPage: prevPage,
82
+ prevY: prevY,
83
+ y: this.context().y
84
+ });
85
+ }
71
86
  beginUnbreakableBlock(width, height) {
72
87
  if (this.transactionLevel++ === 0) {
73
88
  this.originalX = this.context().x;
package/js/Printer.js CHANGED
@@ -9,6 +9,7 @@ var _PageSize = require("./PageSize");
9
9
  var _tableLayouts = require("./tableLayouts");
10
10
  var _Renderer = _interopRequireDefault(require("./Renderer"));
11
11
  var _variableType = require("./helpers/variableType");
12
+ var _tools = require("./helpers/tools");
12
13
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
14
  /**
14
15
  * Printer which turns document definition into a pdf
@@ -45,70 +46,75 @@ class PdfPrinter {
45
46
  * @param {object} options
46
47
  * @returns {Promise<PDFDocument>} resolved promise return a pdfkit document
47
48
  */
48
- createPdfKitDocument(docDefinition, options = {}) {
49
- return new Promise((resolve, reject) => {
50
- this.resolveUrls(docDefinition).then(() => {
51
- try {
52
- docDefinition.version = docDefinition.version || '1.3';
53
- docDefinition.compress = typeof docDefinition.compress === 'boolean' ? docDefinition.compress : true;
54
- docDefinition.images = docDefinition.images || {};
55
- docDefinition.attachments = docDefinition.attachments || {};
56
- docDefinition.pageMargins = (0, _variableType.isValue)(docDefinition.pageMargins) ? docDefinition.pageMargins : 40;
57
- docDefinition.patterns = docDefinition.patterns || {};
58
- let pageSize = (0, _PageSize.normalizePageSize)(docDefinition.pageSize, docDefinition.pageOrientation);
59
- let pdfOptions = {
60
- size: [pageSize.width, pageSize.height],
61
- pdfVersion: docDefinition.version,
62
- compress: docDefinition.compress,
63
- userPassword: docDefinition.userPassword,
64
- ownerPassword: docDefinition.ownerPassword,
65
- permissions: docDefinition.permissions,
66
- lang: docDefinition.language,
67
- fontLayoutCache: typeof options.fontLayoutCache === 'boolean' ? options.fontLayoutCache : true,
68
- bufferPages: options.bufferPages || false,
69
- autoFirstPage: false,
70
- info: createMetadata(docDefinition),
71
- font: null
72
- };
73
- this.pdfKitDoc = new _PDFDocument.default(this.fontDescriptors, docDefinition.images, docDefinition.patterns, docDefinition.attachments, pdfOptions, this.virtualfs);
74
- embedFiles(docDefinition, this.pdfKitDoc);
75
- const builder = new _LayoutBuilder.default(pageSize, (0, _PageSize.normalizePageMargin)(docDefinition.pageMargins), new _SVGMeasure.default());
76
- builder.registerTableLayouts(_tableLayouts.tableLayouts);
77
- if (options.tableLayouts) {
78
- builder.registerTableLayouts(options.tableLayouts);
79
- }
80
- let pages = builder.layoutDocument(docDefinition.content, this.pdfKitDoc, docDefinition.styles || {}, docDefinition.defaultStyle || {
81
- fontSize: 12,
82
- font: 'Roboto'
83
- }, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.watermark, docDefinition.pageBreakBefore);
84
- let maxNumberPages = docDefinition.maxPagesNumber || -1;
85
- if ((0, _variableType.isNumber)(maxNumberPages) && maxNumberPages > -1) {
86
- pages = pages.slice(0, maxNumberPages);
87
- }
49
+ async createPdfKitDocument(docDefinition, options = {}) {
50
+ await this.resolveUrls(docDefinition);
51
+ docDefinition.version = docDefinition.version || '1.3';
52
+ docDefinition.subset = docDefinition.subset || undefined;
53
+ docDefinition.tagged = typeof docDefinition.tagged === 'boolean' ? docDefinition.tagged : false;
54
+ docDefinition.displayTitle = typeof docDefinition.displayTitle === 'boolean' ? docDefinition.displayTitle : false;
55
+ docDefinition.compress = typeof docDefinition.compress === 'boolean' ? docDefinition.compress : true;
56
+ docDefinition.images = docDefinition.images || {};
57
+ docDefinition.attachments = docDefinition.attachments || {};
58
+ docDefinition.pageMargins = (0, _variableType.isValue)(docDefinition.pageMargins) ? docDefinition.pageMargins : 40;
59
+ docDefinition.patterns = docDefinition.patterns || {};
60
+ if (docDefinition.header && typeof docDefinition.header !== 'function') {
61
+ docDefinition.header = (0, _tools.convertToDynamicContent)(docDefinition.header);
62
+ }
63
+ if (docDefinition.footer && typeof docDefinition.footer !== 'function') {
64
+ docDefinition.footer = (0, _tools.convertToDynamicContent)(docDefinition.footer);
65
+ }
66
+ let pageSize = (0, _PageSize.normalizePageSize)(docDefinition.pageSize, docDefinition.pageOrientation);
67
+ let pdfOptions = {
68
+ size: [pageSize.width, pageSize.height],
69
+ pdfVersion: docDefinition.version,
70
+ subset: docDefinition.subset,
71
+ tagged: docDefinition.tagged,
72
+ displayTitle: docDefinition.displayTitle,
73
+ compress: docDefinition.compress,
74
+ userPassword: docDefinition.userPassword,
75
+ ownerPassword: docDefinition.ownerPassword,
76
+ permissions: docDefinition.permissions,
77
+ lang: docDefinition.language,
78
+ fontLayoutCache: typeof options.fontLayoutCache === 'boolean' ? options.fontLayoutCache : true,
79
+ bufferPages: options.bufferPages || false,
80
+ autoFirstPage: false,
81
+ info: createMetadata(docDefinition),
82
+ font: null
83
+ };
84
+ this.pdfKitDoc = new _PDFDocument.default(this.fontDescriptors, docDefinition.images, docDefinition.patterns, docDefinition.attachments, pdfOptions, this.virtualfs);
85
+ embedFiles(docDefinition, this.pdfKitDoc);
86
+ const builder = new _LayoutBuilder.default(pageSize, (0, _PageSize.normalizePageMargin)(docDefinition.pageMargins), new _SVGMeasure.default());
87
+ builder.registerTableLayouts(_tableLayouts.tableLayouts);
88
+ if (options.tableLayouts) {
89
+ builder.registerTableLayouts(options.tableLayouts);
90
+ }
91
+ let pages = builder.layoutDocument(docDefinition.content, this.pdfKitDoc, docDefinition.styles || {}, docDefinition.defaultStyle || {
92
+ fontSize: 12,
93
+ font: 'Roboto'
94
+ }, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.watermark, docDefinition.pageBreakBefore);
95
+ let maxNumberPages = docDefinition.maxPagesNumber || -1;
96
+ if ((0, _variableType.isNumber)(maxNumberPages) && maxNumberPages > -1) {
97
+ pages = pages.slice(0, maxNumberPages);
98
+ }
88
99
 
89
- // if pageSize.height is set to Infinity, calculate the actual height of the page that
90
- // was laid out using the height of each of the items in the page.
91
- if (pageSize.height === Infinity) {
92
- let pageHeight = calculatePageHeight(pages, docDefinition.pageMargins);
93
- this.pdfKitDoc.options.size = [pageSize.width, pageHeight];
94
- }
95
- const renderer = new _Renderer.default(this.pdfKitDoc, options.progressCallback);
96
- renderer.renderPages(pages);
97
- resolve(this.pdfKitDoc);
98
- } catch (e) {
99
- reject(e);
100
- }
101
- }, result => {
102
- reject(result);
100
+ // if pageSize.height is set to Infinity, calculate the actual height of the page that
101
+ // was laid out using the height of each of the items in the page.
102
+ if (pageSize.height === Infinity) {
103
+ let pageHeight = calculatePageHeight(pages, docDefinition.pageMargins);
104
+ pages.forEach(page => {
105
+ page.pageSize.height = pageHeight;
103
106
  });
104
- });
107
+ }
108
+ const renderer = new _Renderer.default(this.pdfKitDoc, options.progressCallback);
109
+ renderer.renderPages(pages);
110
+ return this.pdfKitDoc;
105
111
  }
106
112
 
107
113
  /**
108
114
  * @param {object} docDefinition
109
115
  * @returns {Promise}
110
116
  */
111
- resolveUrls(docDefinition) {
117
+ async resolveUrls(docDefinition) {
112
118
  const getExtendedUrl = url => {
113
119
  if (typeof url === 'object') {
114
120
  return {
@@ -121,95 +127,89 @@ class PdfPrinter {
121
127
  headers: {}
122
128
  };
123
129
  };
124
- return new Promise((resolve, reject) => {
125
- if (this.urlResolver === null) {
126
- resolve();
127
- }
128
- for (let font in this.fontDescriptors) {
129
- if (this.fontDescriptors.hasOwnProperty(font)) {
130
- if (this.fontDescriptors[font].normal) {
131
- if (Array.isArray(this.fontDescriptors[font].normal)) {
132
- // TrueType Collection
133
- let url = getExtendedUrl(this.fontDescriptors[font].normal[0]);
134
- this.urlResolver.resolve(url.url, url.headers);
135
- this.fontDescriptors[font].normal[0] = url.url;
136
- } else {
137
- let url = getExtendedUrl(this.fontDescriptors[font].normal);
138
- this.urlResolver.resolve(url.url, url.headers);
139
- this.fontDescriptors[font].normal = url.url;
140
- }
141
- }
142
- if (this.fontDescriptors[font].bold) {
143
- if (Array.isArray(this.fontDescriptors[font].bold)) {
144
- // TrueType Collection
145
- let url = getExtendedUrl(this.fontDescriptors[font].bold[0]);
146
- this.urlResolver.resolve(url.url, url.headers);
147
- this.fontDescriptors[font].bold[0] = url.url;
148
- } else {
149
- let url = getExtendedUrl(this.fontDescriptors[font].bold);
150
- this.urlResolver.resolve(url.url, url.headers);
151
- this.fontDescriptors[font].bold = url.url;
152
- }
153
- }
154
- if (this.fontDescriptors[font].italics) {
155
- if (Array.isArray(this.fontDescriptors[font].italics)) {
156
- // TrueType Collection
157
- let url = getExtendedUrl(this.fontDescriptors[font].italics[0]);
158
- this.urlResolver.resolve(url.url, url.headers);
159
- this.fontDescriptors[font].italics[0] = url.url;
160
- } else {
161
- let url = getExtendedUrl(this.fontDescriptors[font].italics);
162
- this.urlResolver.resolve(url.url, url.headers);
163
- this.fontDescriptors[font].italics = url.url;
164
- }
165
- }
166
- if (this.fontDescriptors[font].bolditalics) {
167
- if (Array.isArray(this.fontDescriptors[font].bolditalics)) {
168
- // TrueType Collection
169
- let url = getExtendedUrl(this.fontDescriptors[font].bolditalics[0]);
170
- this.urlResolver.resolve(url.url, url.headers);
171
- this.fontDescriptors[font].bolditalics[0] = url.url;
172
- } else {
173
- let url = getExtendedUrl(this.fontDescriptors[font].bolditalics);
174
- this.urlResolver.resolve(url.url, url.headers);
175
- this.fontDescriptors[font].bolditalics = url.url;
176
- }
130
+ if (this.urlResolver === null) {
131
+ return;
132
+ }
133
+ for (let font in this.fontDescriptors) {
134
+ if (this.fontDescriptors.hasOwnProperty(font)) {
135
+ if (this.fontDescriptors[font].normal) {
136
+ if (Array.isArray(this.fontDescriptors[font].normal)) {
137
+ // TrueType Collection
138
+ let url = getExtendedUrl(this.fontDescriptors[font].normal[0]);
139
+ this.urlResolver.resolve(url.url, url.headers);
140
+ this.fontDescriptors[font].normal[0] = url.url;
141
+ } else {
142
+ let url = getExtendedUrl(this.fontDescriptors[font].normal);
143
+ this.urlResolver.resolve(url.url, url.headers);
144
+ this.fontDescriptors[font].normal = url.url;
177
145
  }
178
146
  }
179
- }
180
- if (docDefinition.images) {
181
- for (let image in docDefinition.images) {
182
- if (docDefinition.images.hasOwnProperty(image)) {
183
- let url = getExtendedUrl(docDefinition.images[image]);
147
+ if (this.fontDescriptors[font].bold) {
148
+ if (Array.isArray(this.fontDescriptors[font].bold)) {
149
+ // TrueType Collection
150
+ let url = getExtendedUrl(this.fontDescriptors[font].bold[0]);
151
+ this.urlResolver.resolve(url.url, url.headers);
152
+ this.fontDescriptors[font].bold[0] = url.url;
153
+ } else {
154
+ let url = getExtendedUrl(this.fontDescriptors[font].bold);
184
155
  this.urlResolver.resolve(url.url, url.headers);
185
- docDefinition.images[image] = url.url;
156
+ this.fontDescriptors[font].bold = url.url;
186
157
  }
187
158
  }
188
- }
189
- if (docDefinition.attachments) {
190
- for (let attachment in docDefinition.attachments) {
191
- if (docDefinition.attachments.hasOwnProperty(attachment) && docDefinition.attachments[attachment].src) {
192
- let url = getExtendedUrl(docDefinition.attachments[attachment].src);
159
+ if (this.fontDescriptors[font].italics) {
160
+ if (Array.isArray(this.fontDescriptors[font].italics)) {
161
+ // TrueType Collection
162
+ let url = getExtendedUrl(this.fontDescriptors[font].italics[0]);
193
163
  this.urlResolver.resolve(url.url, url.headers);
194
- docDefinition.attachments[attachment].src = url.url;
164
+ this.fontDescriptors[font].italics[0] = url.url;
165
+ } else {
166
+ let url = getExtendedUrl(this.fontDescriptors[font].italics);
167
+ this.urlResolver.resolve(url.url, url.headers);
168
+ this.fontDescriptors[font].italics = url.url;
195
169
  }
196
170
  }
197
- }
198
- if (docDefinition.files) {
199
- for (let file in docDefinition.files) {
200
- if (docDefinition.files.hasOwnProperty(file) && docDefinition.files[file].src) {
201
- let url = getExtendedUrl(docDefinition.files[file].src);
171
+ if (this.fontDescriptors[font].bolditalics) {
172
+ if (Array.isArray(this.fontDescriptors[font].bolditalics)) {
173
+ // TrueType Collection
174
+ let url = getExtendedUrl(this.fontDescriptors[font].bolditalics[0]);
202
175
  this.urlResolver.resolve(url.url, url.headers);
203
- docDefinition.files[file].src = url.url;
176
+ this.fontDescriptors[font].bolditalics[0] = url.url;
177
+ } else {
178
+ let url = getExtendedUrl(this.fontDescriptors[font].bolditalics);
179
+ this.urlResolver.resolve(url.url, url.headers);
180
+ this.fontDescriptors[font].bolditalics = url.url;
204
181
  }
205
182
  }
206
183
  }
207
- this.urlResolver.resolved().then(() => {
208
- resolve();
209
- }, result => {
210
- reject(result);
211
- });
212
- });
184
+ }
185
+ if (docDefinition.images) {
186
+ for (let image in docDefinition.images) {
187
+ if (docDefinition.images.hasOwnProperty(image)) {
188
+ let url = getExtendedUrl(docDefinition.images[image]);
189
+ this.urlResolver.resolve(url.url, url.headers);
190
+ docDefinition.images[image] = url.url;
191
+ }
192
+ }
193
+ }
194
+ if (docDefinition.attachments) {
195
+ for (let attachment in docDefinition.attachments) {
196
+ if (docDefinition.attachments.hasOwnProperty(attachment) && docDefinition.attachments[attachment].src) {
197
+ let url = getExtendedUrl(docDefinition.attachments[attachment].src);
198
+ this.urlResolver.resolve(url.url, url.headers);
199
+ docDefinition.attachments[attachment].src = url.url;
200
+ }
201
+ }
202
+ }
203
+ if (docDefinition.files) {
204
+ for (let file in docDefinition.files) {
205
+ if (docDefinition.files.hasOwnProperty(file) && docDefinition.files[file].src) {
206
+ let url = getExtendedUrl(docDefinition.files[file].src);
207
+ this.urlResolver.resolve(url.url, url.headers);
208
+ docDefinition.files[file].src = url.url;
209
+ }
210
+ }
211
+ }
212
+ await this.urlResolver.resolved();
213
213
  }
214
214
  }
215
215
  function createMetadata(docDefinition) {
package/js/Renderer.js CHANGED
@@ -29,7 +29,7 @@ const findFont = (fonts, requiredFonts, defaultFont) => {
29
29
  * @returns {number}
30
30
  */
31
31
  const offsetText = (y, inline) => {
32
- var newY = y;
32
+ let newY = y;
33
33
  if (inline.sup) {
34
34
  newY -= inline.fontSize * 0.75;
35
35
  }
@@ -45,7 +45,7 @@ class Renderer {
45
45
  }
46
46
  renderPages(pages) {
47
47
  this.pdfDocument._pdfMakePages = pages; // TODO: Why?
48
- this.pdfDocument.addPage();
48
+
49
49
  let totalItems = 0;
50
50
  if (this.progressCallback) {
51
51
  pages.forEach(page => {
@@ -54,10 +54,9 @@ class Renderer {
54
54
  }
55
55
  let renderedItems = 0;
56
56
  for (let i = 0; i < pages.length; i++) {
57
- if (i > 0) {
58
- this._updatePageOrientationInOptions(pages[i]);
59
- this.pdfDocument.addPage(this.pdfDocument.options);
60
- }
57
+ this.pdfDocument.addPage({
58
+ size: [pages[i].pageSize.width, pages[i].pageSize.height]
59
+ });
61
60
  let page = pages[i];
62
61
  for (let ii = 0, il = page.items.length; ii < il; ii++) {
63
62
  let item = page.items[ii];
@@ -329,6 +328,23 @@ class Renderer {
329
328
  return fontFile;
330
329
  };
331
330
  (0, _svgToPdfkit.default)(this.pdfDocument, svg.svg, svg.x, svg.y, options);
331
+ if (svg.link) {
332
+ this.pdfDocument.link(svg.x, svg.y, svg._width, svg._height, svg.link);
333
+ }
334
+ if (svg.linkToPage) {
335
+ this.pdfDocument.ref({
336
+ Type: 'Action',
337
+ S: 'GoTo',
338
+ D: [svg.linkToPage, 0, 0]
339
+ }).end();
340
+ this.pdfDocument.annotate(svg.x, svg.y, svg._width, svg._height, {
341
+ Subtype: 'Link',
342
+ Dest: [svg.linkToPage - 1, 'XYZ', null, null, null]
343
+ });
344
+ }
345
+ if (svg.linkToDestination) {
346
+ this.pdfDocument.goTo(svg.x, svg.y, svg._width, svg._height, svg.linkToDestination);
347
+ }
332
348
  }
333
349
  renderAttachment(attachment) {
334
350
  const file = this.pdfDocument.provideAttachment(attachment.attachment);
@@ -363,13 +379,5 @@ class Renderer {
363
379
  });
364
380
  this.pdfDocument.restore();
365
381
  }
366
- _updatePageOrientationInOptions(currentPage) {
367
- let previousPageOrientation = this.pdfDocument.options.size[0] > this.pdfDocument.options.size[1] ? 'landscape' : 'portrait';
368
- if (currentPage.pageSize.orientation !== previousPageOrientation) {
369
- let width = this.pdfDocument.options.size[0];
370
- let height = this.pdfDocument.options.size[1];
371
- this.pdfDocument.options.size = [height, width];
372
- }
373
- }
374
382
  }
375
383
  var _default = exports.default = Renderer;
package/js/SVGMeasure.js CHANGED
@@ -11,7 +11,7 @@ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e
11
11
  * @returns {?number}
12
12
  */
13
13
  const stripUnits = textVal => {
14
- var n = parseFloat(textVal);
14
+ let n = parseFloat(textVal);
15
15
  if (typeof n !== 'number' || isNaN(n)) {
16
16
  return undefined;
17
17
  }
@@ -25,7 +25,7 @@ const stripUnits = textVal => {
25
25
  * @returns {object}
26
26
  */
27
27
  const parseSVG = svgString => {
28
- var doc;
28
+ let doc;
29
29
  try {
30
30
  doc = new _xmldoc.default.XmlDocument(svgString);
31
31
  } catch (err) {
@@ -64,6 +64,10 @@ class StyleContextStack {
64
64
  if ((0, _variableType.isString)(item)) {
65
65
  return 0;
66
66
  }
67
+ if (typeof item.section !== 'undefined') {
68
+ // section node not support style overrides
69
+ return 0;
70
+ }
67
71
  let styleNames = [];
68
72
  if (item.style) {
69
73
  if (Array.isArray(item.style)) {