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/OutputDocument.js
CHANGED
|
@@ -23,26 +23,24 @@ class OutputDocument {
|
|
|
23
23
|
* @returns {Promise<Buffer>}
|
|
24
24
|
*/
|
|
25
25
|
getBuffer() {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
55
|
-
|
|
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
|
-
|
|
68
|
-
|
|
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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
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("
|
|
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';
|
package/js/PageElementWriter.js
CHANGED
|
@@ -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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
if (this.fontDescriptors.
|
|
130
|
-
if (this.fontDescriptors[font].normal) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
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
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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
|
-
|
|
156
|
+
this.fontDescriptors[font].bold = url.url;
|
|
186
157
|
}
|
|
187
158
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
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
|
-
|
|
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
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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
|
-
|
|
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
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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
|
-
|
|
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
|
-
|
|
28
|
+
let doc;
|
|
29
29
|
try {
|
|
30
30
|
doc = new _xmldoc.default.XmlDocument(svgString);
|
|
31
31
|
} catch (err) {
|
package/js/StyleContextStack.js
CHANGED
|
@@ -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)) {
|