pdfmake 0.3.0-beta.2 → 0.3.0-beta.4

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 (57) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +1 -1
  3. package/README.md +1 -1
  4. package/build/pdfmake.js +2988 -9785
  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 +6 -5
  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/3rd-party/svg-to-pdfkit/source.js +247 -920
  14. package/js/3rd-party/svg-to-pdfkit.js +0 -3
  15. package/js/DocMeasure.js +6 -139
  16. package/js/DocPreprocessor.js +2 -54
  17. package/js/DocumentContext.js +0 -40
  18. package/js/ElementWriter.js +2 -70
  19. package/js/LayoutBuilder.js +20 -165
  20. package/js/Line.js +6 -25
  21. package/js/OutputDocument.js +4 -13
  22. package/js/OutputDocumentServer.js +0 -6
  23. package/js/PDFDocument.js +1 -46
  24. package/js/PageElementWriter.js +7 -31
  25. package/js/PageSize.js +2 -16
  26. package/js/Printer.js +50 -59
  27. package/js/Renderer.js +11 -98
  28. package/js/SVGMeasure.js +1 -20
  29. package/js/StyleContextStack.js +12 -36
  30. package/js/TableProcessor.js +36 -117
  31. package/js/TextBreaker.js +2 -44
  32. package/js/TextDecorator.js +1 -38
  33. package/js/TextInlines.js +8 -49
  34. package/js/URLResolver.js +10 -18
  35. package/js/base.js +1 -17
  36. package/js/browser-extensions/OutputDocumentBrowser.js +5 -17
  37. package/js/browser-extensions/URLBrowserResolver.js +0 -17
  38. package/js/browser-extensions/fonts/Roboto.js +0 -4
  39. package/js/browser-extensions/index.js +0 -16
  40. package/js/browser-extensions/pdfMake.js +2 -4
  41. package/js/browser-extensions/standard-fonts/Courier.js +0 -4
  42. package/js/browser-extensions/standard-fonts/Helvetica.js +0 -4
  43. package/js/browser-extensions/standard-fonts/Symbol.js +0 -4
  44. package/js/browser-extensions/standard-fonts/Times.js +0 -4
  45. package/js/browser-extensions/standard-fonts/ZapfDingbats.js +0 -4
  46. package/js/columnCalculator.js +6 -18
  47. package/js/helpers/node.js +3 -27
  48. package/js/helpers/tools.js +0 -8
  49. package/js/helpers/variableType.js +4 -9
  50. package/js/index.js +0 -6
  51. package/js/qrEnc.js +126 -215
  52. package/js/tableLayouts.js +1 -28
  53. package/js/virtual-fs.js +3 -19
  54. package/package.json +2 -2
  55. package/src/3rd-party/svg-to-pdfkit/LICENSE +9 -9
  56. package/src/Printer.js +41 -13
  57. package/src/URLResolver.js +10 -5
package/js/Printer.js CHANGED
@@ -2,23 +2,14 @@
2
2
 
3
3
  exports.__esModule = true;
4
4
  exports.default = void 0;
5
-
6
5
  var _PDFDocument = _interopRequireDefault(require("./PDFDocument"));
7
-
8
6
  var _LayoutBuilder = _interopRequireDefault(require("./LayoutBuilder"));
9
-
10
7
  var _SVGMeasure = _interopRequireDefault(require("./SVGMeasure"));
11
-
12
8
  var _PageSize = require("./PageSize");
13
-
14
9
  var _tableLayouts = require("./tableLayouts");
15
-
16
10
  var _Renderer = _interopRequireDefault(require("./Renderer"));
17
-
18
11
  var _variableType = require("./helpers/variableType");
19
-
20
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
-
22
13
  /**
23
14
  * Printer which turns document definition into a pdf
24
15
  *
@@ -45,6 +36,7 @@ class PdfPrinter {
45
36
  this.virtualfs = virtualfs;
46
37
  this.urlResolver = urlResolver;
47
38
  }
39
+
48
40
  /**
49
41
  * Executes layout engine for the specified document and renders it into a pdfkit document
50
42
  * ready to be saved.
@@ -53,8 +45,6 @@ class PdfPrinter {
53
45
  * @param {object} options
54
46
  * @returns {Promise<PDFDocument>} resolved promise return a pdfkit document
55
47
  */
56
-
57
-
58
48
  createPdfKitDocument(docDefinition, options = {}) {
59
49
  return new Promise((resolve, reject) => {
60
50
  this.resolveUrls(docDefinition).then(() => {
@@ -83,28 +73,24 @@ class PdfPrinter {
83
73
  embedFiles(docDefinition, this.pdfKitDoc);
84
74
  const builder = new _LayoutBuilder.default(pageSize, (0, _PageSize.normalizePageMargin)(docDefinition.pageMargins), new _SVGMeasure.default());
85
75
  builder.registerTableLayouts(_tableLayouts.tableLayouts);
86
-
87
76
  if (options.tableLayouts) {
88
77
  builder.registerTableLayouts(options.tableLayouts);
89
78
  }
90
-
91
79
  let pages = builder.layoutDocument(docDefinition.content, this.pdfKitDoc, docDefinition.styles || {}, docDefinition.defaultStyle || {
92
80
  fontSize: 12,
93
81
  font: 'Roboto'
94
82
  }, docDefinition.background, docDefinition.header, docDefinition.footer, docDefinition.watermark, docDefinition.pageBreakBefore);
95
83
  let maxNumberPages = docDefinition.maxPagesNumber || -1;
96
-
97
84
  if ((0, _variableType.isNumber)(maxNumberPages) && maxNumberPages > -1) {
98
85
  pages = pages.slice(0, maxNumberPages);
99
- } // if pageSize.height is set to Infinity, calculate the actual height of the page that
100
- // was laid out using the height of each of the items in the page.
101
-
86
+ }
102
87
 
88
+ // if pageSize.height is set to Infinity, calculate the actual height of the page that
89
+ // was laid out using the height of each of the items in the page.
103
90
  if (pageSize.height === Infinity) {
104
91
  let pageHeight = calculatePageHeight(pages, docDefinition.pageMargins);
105
92
  this.pdfKitDoc.options.size = [pageSize.width, pageHeight];
106
93
  }
107
-
108
94
  const renderer = new _Renderer.default(this.pdfKitDoc, options.progressCallback);
109
95
  renderer.renderPages(pages);
110
96
  resolve(this.pdfKitDoc);
@@ -116,12 +102,11 @@ class PdfPrinter {
116
102
  });
117
103
  });
118
104
  }
105
+
119
106
  /**
120
107
  * @param {object} docDefinition
121
108
  * @returns {Promise}
122
109
  */
123
-
124
-
125
110
  resolveUrls(docDefinition) {
126
111
  const getExtendedUrl = url => {
127
112
  if (typeof url === 'object') {
@@ -130,46 +115,67 @@ class PdfPrinter {
130
115
  headers: url.headers
131
116
  };
132
117
  }
133
-
134
118
  return {
135
119
  url: url,
136
120
  headers: {}
137
121
  };
138
122
  };
139
-
140
123
  return new Promise((resolve, reject) => {
141
124
  if (this.urlResolver === null) {
142
125
  resolve();
143
126
  }
144
-
145
127
  for (let font in this.fontDescriptors) {
146
128
  if (this.fontDescriptors.hasOwnProperty(font)) {
147
129
  if (this.fontDescriptors[font].normal) {
148
- let url = getExtendedUrl(this.fontDescriptors[font].normal);
149
- this.urlResolver.resolve(url.url, url.headers);
150
- this.fontDescriptors[font].normal = url.url;
130
+ if (Array.isArray(this.fontDescriptors[font].normal)) {
131
+ // TrueType Collection
132
+ let url = getExtendedUrl(this.fontDescriptors[font].normal[0]);
133
+ this.urlResolver.resolve(url.url, url.headers);
134
+ this.fontDescriptors[font].normal[0] = url.url;
135
+ } else {
136
+ let url = getExtendedUrl(this.fontDescriptors[font].normal);
137
+ this.urlResolver.resolve(url.url, url.headers);
138
+ this.fontDescriptors[font].normal = url.url;
139
+ }
151
140
  }
152
-
153
141
  if (this.fontDescriptors[font].bold) {
154
- let url = getExtendedUrl(this.fontDescriptors[font].bold);
155
- this.urlResolver.resolve(url.url, url.headers);
156
- this.fontDescriptors[font].bold = url.url;
142
+ if (Array.isArray(this.fontDescriptors[font].bold)) {
143
+ // TrueType Collection
144
+ let url = getExtendedUrl(this.fontDescriptors[font].bold[0]);
145
+ this.urlResolver.resolve(url.url, url.headers);
146
+ this.fontDescriptors[font].bold[0] = url.url;
147
+ } else {
148
+ let url = getExtendedUrl(this.fontDescriptors[font].bold);
149
+ this.urlResolver.resolve(url.url, url.headers);
150
+ this.fontDescriptors[font].bold = url.url;
151
+ }
157
152
  }
158
-
159
153
  if (this.fontDescriptors[font].italics) {
160
- let url = getExtendedUrl(this.fontDescriptors[font].italics);
161
- this.urlResolver.resolve(url.url, url.headers);
162
- this.fontDescriptors[font].italics = url.url;
154
+ if (Array.isArray(this.fontDescriptors[font].italics)) {
155
+ // TrueType Collection
156
+ let url = getExtendedUrl(this.fontDescriptors[font].italics[0]);
157
+ this.urlResolver.resolve(url.url, url.headers);
158
+ this.fontDescriptors[font].italics[0] = url.url;
159
+ } else {
160
+ let url = getExtendedUrl(this.fontDescriptors[font].italics);
161
+ this.urlResolver.resolve(url.url, url.headers);
162
+ this.fontDescriptors[font].italics = url.url;
163
+ }
163
164
  }
164
-
165
165
  if (this.fontDescriptors[font].bolditalics) {
166
- let url = getExtendedUrl(this.fontDescriptors[font].bolditalics);
167
- this.urlResolver.resolve(url.url, url.headers);
168
- this.fontDescriptors[font].bolditalics = url.url;
166
+ if (Array.isArray(this.fontDescriptors[font].bolditalics)) {
167
+ // TrueType Collection
168
+ let url = getExtendedUrl(this.fontDescriptors[font].bolditalics[0]);
169
+ this.urlResolver.resolve(url.url, url.headers);
170
+ this.fontDescriptors[font].bolditalics[0] = url.url;
171
+ } else {
172
+ let url = getExtendedUrl(this.fontDescriptors[font].bolditalics);
173
+ this.urlResolver.resolve(url.url, url.headers);
174
+ this.fontDescriptors[font].bolditalics = url.url;
175
+ }
169
176
  }
170
177
  }
171
178
  }
172
-
173
179
  if (docDefinition.images) {
174
180
  for (let image in docDefinition.images) {
175
181
  if (docDefinition.images.hasOwnProperty(image)) {
@@ -179,7 +185,6 @@ class PdfPrinter {
179
185
  }
180
186
  }
181
187
  }
182
-
183
188
  if (docDefinition.attachments) {
184
189
  for (let attachment in docDefinition.attachments) {
185
190
  if (docDefinition.attachments.hasOwnProperty(attachment) && docDefinition.attachments[attachment].src) {
@@ -189,7 +194,6 @@ class PdfPrinter {
189
194
  }
190
195
  }
191
196
  }
192
-
193
197
  if (docDefinition.files) {
194
198
  for (let file in docDefinition.files) {
195
199
  if (docDefinition.files.hasOwnProperty(file) && docDefinition.files[file].src) {
@@ -199,7 +203,6 @@ class PdfPrinter {
199
203
  }
200
204
  }
201
205
  }
202
-
203
206
  this.urlResolver.resolved().then(() => {
204
207
  resolve();
205
208
  }, result => {
@@ -207,9 +210,7 @@ class PdfPrinter {
207
210
  });
208
211
  });
209
212
  }
210
-
211
213
  }
212
-
213
214
  function createMetadata(docDefinition) {
214
215
  // PDF standard has these properties reserved: Title, Author, Subject, Keywords,
215
216
  // Creator, Producer, CreationDate, ModDate, Trapped.
@@ -218,49 +219,39 @@ function createMetadata(docDefinition) {
218
219
  function standardizePropertyKey(key) {
219
220
  let standardProperties = ['Title', 'Author', 'Subject', 'Keywords', 'Creator', 'Producer', 'CreationDate', 'ModDate', 'Trapped'];
220
221
  let standardizedKey = key.charAt(0).toUpperCase() + key.slice(1);
221
-
222
222
  if (standardProperties.includes(standardizedKey)) {
223
223
  return standardizedKey;
224
224
  }
225
-
226
225
  return key.replace(/\s+/g, '');
227
226
  }
228
-
229
227
  let info = {
230
228
  Producer: 'pdfmake',
231
229
  Creator: 'pdfmake'
232
230
  };
233
-
234
231
  if (docDefinition.info) {
235
232
  for (let key in docDefinition.info) {
236
233
  let value = docDefinition.info[key];
237
-
238
234
  if (value) {
239
235
  key = standardizePropertyKey(key);
240
236
  info[key] = value;
241
237
  }
242
238
  }
243
239
  }
244
-
245
240
  return info;
246
241
  }
247
-
248
242
  function embedFiles(docDefinition, pdfKitDoc) {
249
243
  if (docDefinition.files) {
250
244
  for (const key in docDefinition.files) {
251
245
  const file = docDefinition.files[key];
252
246
  if (!file.src) return;
253
-
254
247
  if (pdfKitDoc.virtualfs && pdfKitDoc.virtualfs.existsSync(file.src)) {
255
248
  file.src = pdfKitDoc.virtualfs.readFileSync(file.src);
256
249
  }
257
-
258
250
  file.name = file.name || key;
259
251
  pdfKitDoc.file(file.src, file);
260
252
  }
261
253
  }
262
254
  }
263
-
264
255
  function calculatePageHeight(pages, margins) {
265
256
  function getItemHeight(item) {
266
257
  if (typeof item.item.getHeight === 'function') {
@@ -268,25 +259,26 @@ function calculatePageHeight(pages, margins) {
268
259
  } else if (item.item._height) {
269
260
  return item.item._height;
270
261
  } else if (item.type === 'vector') {
271
- return item.item.y1 > item.item.y2 ? item.item.y1 : item.item.y2;
262
+ if (typeof item.item.y1 !== 'undefined') {
263
+ return item.item.y1 > item.item.y2 ? item.item.y1 : item.item.y2;
264
+ } else {
265
+ return item.item.h;
266
+ }
272
267
  } else {
273
268
  // TODO: add support for next item types
274
269
  return 0;
275
270
  }
276
271
  }
277
-
278
272
  function getBottomPosition(item) {
279
273
  let top = item.item.y || 0;
280
274
  let height = getItemHeight(item);
281
275
  return top + height;
282
276
  }
283
-
284
277
  let fixedMargins = (0, _PageSize.normalizePageMargin)(margins || 40);
285
278
  let height = fixedMargins.top;
286
279
  pages.forEach(page => {
287
280
  page.items.forEach(item => {
288
281
  let bottomPosition = getBottomPosition(item);
289
-
290
282
  if (bottomPosition > height) {
291
283
  height = bottomPosition;
292
284
  }
@@ -295,6 +287,5 @@ function calculatePageHeight(pages, margins) {
295
287
  height += fixedMargins.bottom;
296
288
  return height;
297
289
  }
298
-
299
290
  var _default = PdfPrinter;
300
291
  exports.default = _default;