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.
- package/CHANGELOG.md +7 -48
- package/LICENSE +1 -1
- package/README.md +78 -85
- package/build/pdfmake.js +66833 -75014
- 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/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/DocMeasure.js +20 -1
- package/js/DocPreprocessor.js +21 -6
- package/js/DocumentContext.js +64 -17
- package/js/ElementWriter.js +31 -8
- package/js/LayoutBuilder.js +488 -127
- package/js/OutputDocument.js +22 -34
- package/js/OutputDocumentServer.js +6 -11
- package/js/PDFDocument.js +1 -1
- package/js/PageElementWriter.js +17 -2
- package/js/Printer.js +133 -133
- package/js/Renderer.js +22 -14
- package/js/SVGMeasure.js +2 -2
- package/js/StyleContextStack.js +4 -0
- package/js/TableProcessor.js +40 -14
- package/js/TextBreaker.js +31 -4
- package/js/TextInlines.js +1 -1
- package/js/URLResolver.js +25 -55
- package/js/base.js +1 -1
- package/js/browser-extensions/OutputDocumentBrowser.js +35 -72
- package/js/browser-extensions/index.js +2 -2
- package/js/browser-extensions/pdfMake.js +0 -12
- package/js/browser-extensions/standard-fonts/Courier.js +4 -4
- package/js/browser-extensions/standard-fonts/Helvetica.js +4 -4
- package/js/browser-extensions/standard-fonts/Symbol.js +1 -1
- package/js/browser-extensions/standard-fonts/Times.js +4 -4
- package/js/browser-extensions/standard-fonts/ZapfDingbats.js +1 -1
- package/js/helpers/tools.js +6 -0
- package/js/index.js +1 -1
- package/package.json +25 -24
- package/src/DocMeasure.js +21 -1
- package/src/DocPreprocessor.js +25 -6
- package/src/DocumentContext.js +56 -20
- package/src/ElementWriter.js +30 -7
- package/src/LayoutBuilder.js +531 -144
- package/src/OutputDocument.js +23 -37
- package/src/OutputDocumentServer.js +6 -11
- package/src/PDFDocument.js +1 -1
- package/src/PageElementWriter.js +21 -2
- package/src/Printer.js +134 -131
- package/src/Renderer.js +13 -15
- package/src/SVGMeasure.js +2 -2
- package/src/StyleContextStack.js +4 -0
- package/src/TableProcessor.js +42 -18
- package/src/TextBreaker.js +24 -5
- package/src/TextInlines.js +1 -1
- package/src/URLResolver.js +24 -58
- package/src/base.js +1 -1
- package/src/browser-extensions/OutputDocumentBrowser.js +33 -71
- package/src/browser-extensions/index.js +3 -3
- package/src/browser-extensions/pdfMake.js +0 -14
- package/src/browser-extensions/standard-fonts/Courier.js +4 -4
- package/src/browser-extensions/standard-fonts/Helvetica.js +4 -4
- package/src/browser-extensions/standard-fonts/Symbol.js +1 -1
- package/src/browser-extensions/standard-fonts/Times.js +4 -4
- package/src/browser-extensions/standard-fonts/ZapfDingbats.js +1 -1
- package/src/columnCalculator.js +12 -12
- package/src/helpers/tools.js +5 -0
- package/src/helpers/variableType.js +1 -1
- package/src/index.js +1 -1
- package/standard-fonts/Helvetica.js +0 -1
- package/js/browser-extensions/URLBrowserResolver.js +0 -76
- package/src/browser-extensions/URLBrowserResolver.js +0 -84
package/js/TableProcessor.js
CHANGED
|
@@ -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
|
-
|
|
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("
|
|
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
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
if (
|
|
44
|
-
|
|
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
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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
|
-
|
|
47
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
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
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
7
|
+
data: fs.readFileSync(__dirname + '/../../../node_modules/pdfkit/js/data/ZapfDingbats.afm', 'utf8'),
|
|
8
8
|
encoding: 'utf8'
|
|
9
9
|
}
|
|
10
10
|
},
|
package/js/helpers/tools.js
CHANGED
|
@@ -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);
|