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.
- package/CHANGELOG.md +12 -0
- package/LICENSE +1 -1
- package/README.md +1 -1
- package/build/pdfmake.js +2988 -9785
- 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 +6 -5
- 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/3rd-party/svg-to-pdfkit/source.js +247 -920
- package/js/3rd-party/svg-to-pdfkit.js +0 -3
- package/js/DocMeasure.js +6 -139
- package/js/DocPreprocessor.js +2 -54
- package/js/DocumentContext.js +0 -40
- package/js/ElementWriter.js +2 -70
- package/js/LayoutBuilder.js +20 -165
- package/js/Line.js +6 -25
- package/js/OutputDocument.js +4 -13
- package/js/OutputDocumentServer.js +0 -6
- package/js/PDFDocument.js +1 -46
- package/js/PageElementWriter.js +7 -31
- package/js/PageSize.js +2 -16
- package/js/Printer.js +50 -59
- package/js/Renderer.js +11 -98
- package/js/SVGMeasure.js +1 -20
- package/js/StyleContextStack.js +12 -36
- package/js/TableProcessor.js +36 -117
- package/js/TextBreaker.js +2 -44
- package/js/TextDecorator.js +1 -38
- package/js/TextInlines.js +8 -49
- package/js/URLResolver.js +10 -18
- package/js/base.js +1 -17
- package/js/browser-extensions/OutputDocumentBrowser.js +5 -17
- package/js/browser-extensions/URLBrowserResolver.js +0 -17
- package/js/browser-extensions/fonts/Roboto.js +0 -4
- package/js/browser-extensions/index.js +0 -16
- package/js/browser-extensions/pdfMake.js +2 -4
- package/js/browser-extensions/standard-fonts/Courier.js +0 -4
- package/js/browser-extensions/standard-fonts/Helvetica.js +0 -4
- package/js/browser-extensions/standard-fonts/Symbol.js +0 -4
- package/js/browser-extensions/standard-fonts/Times.js +0 -4
- package/js/browser-extensions/standard-fonts/ZapfDingbats.js +0 -4
- package/js/columnCalculator.js +6 -18
- package/js/helpers/node.js +3 -27
- package/js/helpers/tools.js +0 -8
- package/js/helpers/variableType.js +4 -9
- package/js/index.js +0 -6
- package/js/qrEnc.js +126 -215
- package/js/tableLayouts.js +1 -28
- package/js/virtual-fs.js +3 -19
- package/package.json +2 -2
- package/src/3rd-party/svg-to-pdfkit/LICENSE +9 -9
- package/src/Printer.js +41 -13
- 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
|
-
}
|
|
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
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
-
|
|
161
|
-
|
|
162
|
-
|
|
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
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
-
|
|
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;
|