pdfmake 0.3.0-beta.18 → 0.3.0-beta.19
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 +8 -0
- package/README.md +1 -7
- package/build/pdfmake.js +61757 -61686
- 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/LayoutBuilder.js +10 -1
- package/js/OutputDocument.js +22 -34
- package/js/OutputDocumentServer.js +6 -11
- package/js/Printer.js +132 -147
- package/js/TextBreaker.js +30 -3
- package/js/URLResolver.js +23 -62
- package/js/browser-extensions/OutputDocumentBrowser.js +35 -72
- package/js/browser-extensions/index.js +2 -2
- package/package.json +17 -17
- package/src/LayoutBuilder.js +11 -1
- package/src/OutputDocument.js +23 -37
- package/src/OutputDocumentServer.js +6 -11
- package/src/Printer.js +131 -145
- package/src/TextBreaker.js +23 -4
- package/src/URLResolver.js +23 -68
- package/src/browser-extensions/OutputDocumentBrowser.js +33 -71
- package/src/browser-extensions/index.js +2 -2
- package/js/browser-extensions/URLBrowserResolver.js +0 -81
- package/src/browser-extensions/URLBrowserResolver.js +0 -89
|
@@ -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) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pdfmake",
|
|
3
|
-
"version": "0.3.0-beta.
|
|
3
|
+
"version": "0.3.0-beta.19",
|
|
4
4
|
"description": "Client/server side PDF printing in pure JavaScript",
|
|
5
5
|
"main": "js/index.js",
|
|
6
6
|
"esnext": "src/index.js",
|
|
@@ -10,44 +10,44 @@
|
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"linebreak": "^1.1.0",
|
|
13
|
-
"pdfkit": "^0.17.
|
|
14
|
-
"xmldoc": "^2.0.
|
|
13
|
+
"pdfkit": "^0.17.2",
|
|
14
|
+
"xmldoc": "^2.0.3"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
|
-
"@babel/cli": "^7.
|
|
18
|
-
"@babel/core": "^7.
|
|
17
|
+
"@babel/cli": "^7.28.3",
|
|
18
|
+
"@babel/core": "^7.28.5",
|
|
19
19
|
"@babel/plugin-transform-modules-commonjs": "^7.27.1",
|
|
20
|
-
"@babel/preset-env": "^7.
|
|
21
|
-
"@eslint/js": "^9.
|
|
20
|
+
"@babel/preset-env": "^7.28.5",
|
|
21
|
+
"@eslint/js": "^9.39.2",
|
|
22
22
|
"assert": "^2.1.0",
|
|
23
23
|
"babel-loader": "^10.0.0",
|
|
24
24
|
"brfs": "^2.0.2",
|
|
25
25
|
"browserify-zlib": "^0.2.0",
|
|
26
26
|
"buffer": "^6.0.3",
|
|
27
|
-
"core-js": "^3.
|
|
28
|
-
"eslint": "^9.
|
|
29
|
-
"eslint-plugin-jsdoc": "^
|
|
27
|
+
"core-js": "^3.47.0",
|
|
28
|
+
"eslint": "^9.39.2",
|
|
29
|
+
"eslint-plugin-jsdoc": "^61.5.0",
|
|
30
30
|
"expose-loader": "^5.0.1",
|
|
31
31
|
"file-saver": "^2.0.5",
|
|
32
|
-
"globals": "^16.
|
|
33
|
-
"mocha": "^11.
|
|
32
|
+
"globals": "^16.5.0",
|
|
33
|
+
"mocha": "^11.7.5",
|
|
34
34
|
"npm-run-all": "^4.1.5",
|
|
35
35
|
"process": "^0.11.10",
|
|
36
|
-
"rewire": "^
|
|
36
|
+
"rewire": "^9.0.1",
|
|
37
37
|
"shx": "^0.4.0",
|
|
38
|
-
"sinon": "^
|
|
38
|
+
"sinon": "^21.0.1",
|
|
39
39
|
"source-map-loader": "^5.0.0",
|
|
40
40
|
"stream-browserify": "^3.0.0",
|
|
41
41
|
"string-replace-webpack-plugin": "^0.1.3",
|
|
42
42
|
"svg-to-pdfkit": "^0.1.8",
|
|
43
|
-
"terser-webpack-plugin": "^5.3.
|
|
43
|
+
"terser-webpack-plugin": "^5.3.16",
|
|
44
44
|
"transform-loader": "^0.2.4",
|
|
45
45
|
"util": "^0.12.5",
|
|
46
|
-
"webpack": "^5.
|
|
46
|
+
"webpack": "^5.104.1",
|
|
47
47
|
"webpack-cli": "^6.0.1"
|
|
48
48
|
},
|
|
49
49
|
"engines": {
|
|
50
|
-
"node": ">=
|
|
50
|
+
"node": ">=20"
|
|
51
51
|
},
|
|
52
52
|
"scripts": {
|
|
53
53
|
"test": "run-s build mocha lint",
|
package/src/LayoutBuilder.js
CHANGED
|
@@ -72,7 +72,17 @@ class LayoutBuilder {
|
|
|
72
72
|
return false;
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
const hasRenderableContent = node => {
|
|
76
|
+
if (!node || node.positions.length === 0) {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
if (node.text === '' && !node.listMarker) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
return true;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
linearNodeList = linearNodeList.filter(hasRenderableContent);
|
|
76
86
|
|
|
77
87
|
linearNodeList.forEach(node => {
|
|
78
88
|
let nodeInfo = {};
|
package/src/OutputDocument.js
CHANGED
|
@@ -20,57 +20,43 @@ class OutputDocument {
|
|
|
20
20
|
* @returns {Promise<Buffer>}
|
|
21
21
|
*/
|
|
22
22
|
getBuffer() {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
let
|
|
29
|
-
stream.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
chunks.push(chunk);
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
stream.on('end', () => {
|
|
36
|
-
result = Buffer.concat(chunks);
|
|
37
|
-
resolve(result);
|
|
38
|
-
});
|
|
39
|
-
stream.end();
|
|
40
|
-
|
|
41
|
-
}, result => {
|
|
42
|
-
reject(result);
|
|
23
|
+
const getBufferInternal = (async () => {
|
|
24
|
+
const stream = await this.getStream();
|
|
25
|
+
return new Promise((resolve) => {
|
|
26
|
+
let chunks = [];
|
|
27
|
+
stream.on('readable', () => {
|
|
28
|
+
let chunk;
|
|
29
|
+
while ((chunk = stream.read(this.bufferSize)) !== null) {
|
|
30
|
+
chunks.push(chunk);
|
|
31
|
+
}
|
|
43
32
|
});
|
|
33
|
+
stream.on('end', () => {
|
|
34
|
+
resolve(Buffer.concat(chunks));
|
|
35
|
+
});
|
|
36
|
+
stream.end();
|
|
44
37
|
});
|
|
45
|
-
}
|
|
38
|
+
});
|
|
46
39
|
|
|
40
|
+
if (this.bufferPromise === null) {
|
|
41
|
+
this.bufferPromise = getBufferInternal();
|
|
42
|
+
}
|
|
47
43
|
return this.bufferPromise;
|
|
48
44
|
}
|
|
49
45
|
|
|
50
46
|
/**
|
|
51
47
|
* @returns {Promise<string>}
|
|
52
48
|
*/
|
|
53
|
-
getBase64() {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
resolve(buffer.toString('base64'));
|
|
57
|
-
}, result => {
|
|
58
|
-
reject(result);
|
|
59
|
-
});
|
|
60
|
-
});
|
|
49
|
+
async getBase64() {
|
|
50
|
+
const buffer = await this.getBuffer();
|
|
51
|
+
return buffer.toString('base64');
|
|
61
52
|
}
|
|
62
53
|
|
|
63
54
|
/**
|
|
64
55
|
* @returns {Promise<string>}
|
|
65
56
|
*/
|
|
66
|
-
getDataUrl() {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
resolve('data:application/pdf;base64,' + data);
|
|
70
|
-
}, result => {
|
|
71
|
-
reject(result);
|
|
72
|
-
});
|
|
73
|
-
});
|
|
57
|
+
async getDataUrl() {
|
|
58
|
+
const data = await this.getBase64();
|
|
59
|
+
return 'data:application/pdf;base64,' + data;
|
|
74
60
|
}
|
|
75
61
|
|
|
76
62
|
}
|
|
@@ -7,17 +7,12 @@ class OutputDocumentServer extends OutputDocument {
|
|
|
7
7
|
* @param {string} filename
|
|
8
8
|
* @returns {Promise}
|
|
9
9
|
*/
|
|
10
|
-
write(filename) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
});
|
|
17
|
-
stream.end();
|
|
18
|
-
}, result => {
|
|
19
|
-
reject(result);
|
|
20
|
-
});
|
|
10
|
+
async write(filename) {
|
|
11
|
+
const stream = await this.getStream();
|
|
12
|
+
return new Promise((resolve) => {
|
|
13
|
+
stream.pipe(fs.createWriteStream(filename));
|
|
14
|
+
stream.on('end', resolve);
|
|
15
|
+
stream.end();
|
|
21
16
|
});
|
|
22
17
|
}
|
|
23
18
|
|