@digicole/pdfmake-rtl 1.2.0 → 2.1.1
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/.vscode/tasks.json +17 -0
- package/CHANGELOG.md +83 -128
- package/LICENSE +22 -22
- package/README.md +188 -681
- package/build/fonts/Cairo/Cairo-Black.ttf +0 -0
- package/build/fonts/Cairo/Cairo-Bold.ttf +0 -0
- package/build/fonts/Cairo/Cairo-ExtraLight.ttf +0 -0
- package/build/fonts/Cairo/Cairo-Light.ttf +0 -0
- package/build/fonts/Cairo/Cairo-Regular.ttf +0 -0
- package/build/fonts/Cairo/Cairo-SemiBold.ttf +0 -0
- package/build/fonts/Cairo.js +27 -0
- package/build/fonts/Roboto/Roboto-Italic.ttf +0 -0
- package/build/fonts/Roboto/Roboto-Medium.ttf +0 -0
- package/build/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
- package/build/fonts/Roboto/Roboto-Regular.ttf +0 -0
- package/build/fonts/Roboto.js +27 -0
- package/build/pdfmake.js +63736 -71285
- package/build/pdfmake.js.map +1 -1
- package/build/pdfmake.min.js +2 -2
- package/build/pdfmake.min.js.map +1 -1
- package/build/standard-fonts/Courier.js +27 -0
- package/build/standard-fonts/Helvetica.js +27 -0
- package/build/standard-fonts/Symbol.js +21 -0
- package/build/standard-fonts/Times.js +27 -0
- package/build/standard-fonts/ZapfDingbats.js +21 -0
- package/build/vfs_fonts.js +11 -7
- package/build-vfs.js +44 -44
- package/fonts/Cairo/Cairo-Black.ttf +0 -0
- package/fonts/Cairo/Cairo-Bold.ttf +0 -0
- package/fonts/Cairo/Cairo-ExtraLight.ttf +0 -0
- package/fonts/Cairo/Cairo-Light.ttf +0 -0
- package/fonts/Cairo/Cairo-Regular.ttf +0 -0
- package/fonts/Cairo/Cairo-SemiBold.ttf +0 -0
- package/fonts/Cairo.js +8 -0
- 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/fonts/Roboto.js +8 -0
- package/index.js +26 -26
- package/package.json +42 -39
- package/src/3rd-party/svg-to-pdfkit/LICENSE +9 -9
- package/src/3rd-party/svg-to-pdfkit/source.js +229 -36
- package/src/3rd-party/svg-to-pdfkit.js +3 -3
- package/src/OutputDocument.js +64 -0
- package/src/OutputDocumentServer.js +32 -0
- package/src/PDFDocument.js +174 -0
- package/src/PageSize.js +53 -0
- package/src/Renderer.js +445 -0
- package/src/TextBreaker.js +168 -0
- package/src/TextInlines.js +263 -0
- package/src/URLResolver.js +43 -0
- package/src/base.js +70 -0
- package/src/browser-extensions/OutputDocumentBrowser.js +80 -0
- package/src/browser-extensions/fonts/Cairo.js +27 -0
- package/src/browser-extensions/fonts/Roboto.js +27 -0
- package/src/browser-extensions/index.js +61 -0
- package/src/browser-extensions/pdfMake.js +1 -355
- package/src/browser-extensions/standard-fonts/Courier.js +27 -0
- package/src/browser-extensions/standard-fonts/Helvetica.js +27 -0
- package/src/browser-extensions/standard-fonts/Symbol.js +21 -0
- package/src/browser-extensions/standard-fonts/Times.js +27 -0
- package/src/browser-extensions/standard-fonts/ZapfDingbats.js +21 -0
- package/src/browser-extensions/virtual-fs-cjs.js +1 -0
- package/src/columnCalculator.js +154 -157
- package/src/docMeasure.js +802 -810
- package/src/docPreprocessor.js +306 -273
- package/src/documentContext.js +345 -340
- package/src/elementWriter.js +736 -411
- package/src/helpers/node.js +136 -0
- package/src/helpers/tools.js +44 -0
- package/src/helpers/variableType.js +50 -0
- package/src/index.js +16 -0
- package/src/layoutBuilder.js +1393 -1197
- package/src/line.js +122 -104
- package/src/pageElementWriter.js +187 -174
- package/src/printer.js +370 -727
- package/src/qrEnc.js +796 -791
- package/src/rtlUtils.js +500 -485
- package/src/standardPageSizes.js +52 -54
- package/src/styleContextStack.js +208 -138
- package/src/svgMeasure.js +109 -70
- package/src/tableLayouts.js +100 -0
- package/src/tableProcessor.js +620 -606
- package/src/textDecorator.js +175 -157
- package/src/virtual-fs.js +66 -0
- package/standard-fonts/Courier.js +8 -0
- package/standard-fonts/Helvetica.js +8 -0
- package/standard-fonts/Symbol.js +5 -0
- package/standard-fonts/Times.js +8 -0
- package/standard-fonts/ZapfDingbats.js +5 -0
- package/index.html +0 -396
- package/src/browser-extensions/URLBrowserResolver.js +0 -96
- package/src/browser-extensions/virtual-fs.js +0 -55
- package/src/fontProvider.js +0 -68
- package/src/helpers.js +0 -138
- package/src/imageMeasure.js +0 -62
- package/src/pdfKitEngine.js +0 -21
- package/src/textTools.js +0 -391
- package/src/traversalTracker.js +0 -47
package/src/line.js
CHANGED
|
@@ -1,104 +1,122 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
1
|
+
class Line {
|
|
2
|
+
/**
|
|
3
|
+
* @param {number} maxWidth Maximum width this line can have
|
|
4
|
+
*/
|
|
5
|
+
constructor(maxWidth) {
|
|
6
|
+
this.maxWidth = maxWidth;
|
|
7
|
+
this.leadingCut = 0;
|
|
8
|
+
this.trailingCut = 0;
|
|
9
|
+
this.inlineWidths = 0;
|
|
10
|
+
this.inlines = [];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* @param {object} inline
|
|
15
|
+
*/
|
|
16
|
+
addInline(inline) {
|
|
17
|
+
if (this.inlines.length === 0) {
|
|
18
|
+
this.leadingCut = inline.leadingCut || 0;
|
|
19
|
+
}
|
|
20
|
+
this.trailingCut = inline.trailingCut || 0;
|
|
21
|
+
|
|
22
|
+
inline.x = this.inlineWidths - this.leadingCut;
|
|
23
|
+
|
|
24
|
+
this.inlines.push(inline);
|
|
25
|
+
this.inlineWidths += inline.width;
|
|
26
|
+
|
|
27
|
+
if (inline.lineEnd) {
|
|
28
|
+
this.newLineForced = true;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* @returns {number}
|
|
34
|
+
*/
|
|
35
|
+
getHeight() {
|
|
36
|
+
let max = 0;
|
|
37
|
+
|
|
38
|
+
this.inlines.forEach(item => {
|
|
39
|
+
max = Math.max(max, item.height || 0);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
return max;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* @returns {number}
|
|
47
|
+
*/
|
|
48
|
+
getAscenderHeight() {
|
|
49
|
+
let y = 0;
|
|
50
|
+
|
|
51
|
+
this.inlines.forEach(inline => {
|
|
52
|
+
y = Math.max(y, inline.font.ascender / 1000 * inline.fontSize);
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
return y;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @returns {number}
|
|
60
|
+
*/
|
|
61
|
+
getWidth() {
|
|
62
|
+
return this.inlineWidths - this.leadingCut - this.trailingCut;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* @returns {number}
|
|
67
|
+
*/
|
|
68
|
+
getAvailableWidth() {
|
|
69
|
+
return this.maxWidth - this.getWidth();
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* @param {object} inline
|
|
74
|
+
* @param {Array} nextInlines
|
|
75
|
+
* @returns {boolean}
|
|
76
|
+
*/
|
|
77
|
+
hasEnoughSpaceForInline(inline, nextInlines = []) {
|
|
78
|
+
if (this.inlines.length === 0) {
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
if (this.newLineForced) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
let inlineWidth = inline.width;
|
|
86
|
+
let inlineTrailingCut = inline.trailingCut || 0;
|
|
87
|
+
if (inline.noNewLine) {
|
|
88
|
+
for (let i = 0, l = nextInlines.length; i < l; i++) {
|
|
89
|
+
let nextInline = nextInlines[i];
|
|
90
|
+
inlineWidth += nextInline.width;
|
|
91
|
+
inlineTrailingCut += nextInline.trailingCut || 0;
|
|
92
|
+
if (!nextInline.noNewLine) {
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return (this.inlineWidths + inlineWidth - this.leadingCut - inlineTrailingCut) <= this.maxWidth;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Check if this line should be rendered RTL
|
|
103
|
+
* @returns {boolean}
|
|
104
|
+
*/
|
|
105
|
+
isRTL() {
|
|
106
|
+
return this.inlines.some(inline => inline.isRTL || inline.direction === 'rtl');
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
clone() {
|
|
110
|
+
let result = new Line(this.maxWidth);
|
|
111
|
+
|
|
112
|
+
for (let key in this) {
|
|
113
|
+
if (this.hasOwnProperty(key)) {
|
|
114
|
+
result[key] = this[key];
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
return result;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export default Line;
|
package/src/pageElementWriter.js
CHANGED
|
@@ -1,174 +1,187 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
*
|
|
8
|
-
* which
|
|
9
|
-
*
|
|
10
|
-
* -
|
|
11
|
-
*
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
this.moveToNextPage();
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
this.
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
prevPage
|
|
96
|
-
prevY
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
1
|
+
import ElementWriter from './ElementWriter';
|
|
2
|
+
import { normalizePageSize, normalizePageMargin } from './PageSize';
|
|
3
|
+
import DocumentContext from './DocumentContext';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* An extended ElementWriter which can handle:
|
|
7
|
+
* - page-breaks (it adds new pages when there's not enough space left),
|
|
8
|
+
* - repeatable fragments (like table-headers, which are repeated everytime
|
|
9
|
+
* a page-break occurs)
|
|
10
|
+
* - transactions (used for unbreakable-blocks when we want to make sure
|
|
11
|
+
* whole block will be rendered on the same page)
|
|
12
|
+
*/
|
|
13
|
+
class PageElementWriter extends ElementWriter {
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @param {DocumentContext} context
|
|
17
|
+
*/
|
|
18
|
+
constructor(context) {
|
|
19
|
+
super(context);
|
|
20
|
+
this.transactionLevel = 0;
|
|
21
|
+
this.repeatables = [];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
addLine(line, dontUpdateContextPosition, index) {
|
|
25
|
+
return this._fitOnPage(() => super.addLine(line, dontUpdateContextPosition, index));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
addImage(image, index) {
|
|
29
|
+
return this._fitOnPage(() => super.addImage(image, index));
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
addCanvas(image, index) {
|
|
33
|
+
return this._fitOnPage(() => super.addCanvas(image, index));
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
addSVG(image, index) {
|
|
37
|
+
return this._fitOnPage(() => super.addSVG(image, index));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
addQr(qr, index) {
|
|
41
|
+
return this._fitOnPage(() => super.addQr(qr, index));
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
addAttachment(attachment, index) {
|
|
45
|
+
return this._fitOnPage(() => super.addAttachment(attachment, index));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
addVector(vector, ignoreContextX, ignoreContextY, index, forcePage) {
|
|
49
|
+
return super.addVector(vector, ignoreContextX, ignoreContextY, index, forcePage);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
beginClip(width, height) {
|
|
53
|
+
return super.beginClip(width, height);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
endClip() {
|
|
57
|
+
return super.endClip();
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
beginVerticalAlignment(verticalAlignment) {
|
|
61
|
+
return super.beginVerticalAlignment(verticalAlignment);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
endVerticalAlignment(verticalAlignment) {
|
|
65
|
+
return super.endVerticalAlignment(verticalAlignment);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition) {
|
|
69
|
+
return this._fitOnPage(() => super.addFragment(fragment, useBlockXOffset, useBlockYOffset, dontUpdateContextPosition));
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
moveToNextPage(pageOrientation) {
|
|
73
|
+
let nextPage = this.context().moveToNextPage(pageOrientation);
|
|
74
|
+
|
|
75
|
+
// moveToNextPage is called multiple times for table, because is called for each column
|
|
76
|
+
// and repeatables are inserted only in the first time. If columns are used, is needed
|
|
77
|
+
// call for table in first column and then for table in the second column (is other repeatables).
|
|
78
|
+
this.repeatables.forEach(function (rep) {
|
|
79
|
+
if (rep.insertedOnPages[this.context().page] === undefined) {
|
|
80
|
+
rep.insertedOnPages[this.context().page] = true;
|
|
81
|
+
this.addFragment(rep, true);
|
|
82
|
+
} else {
|
|
83
|
+
this.context().moveDown(rep.height);
|
|
84
|
+
}
|
|
85
|
+
}, this);
|
|
86
|
+
|
|
87
|
+
this.emit('pageChanged', {
|
|
88
|
+
prevPage: nextPage.prevPage,
|
|
89
|
+
prevY: nextPage.prevY,
|
|
90
|
+
y: this.context().y
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
addPage(pageSize, pageOrientation, pageMargin, customProperties = {}) {
|
|
95
|
+
let prevPage = this.page;
|
|
96
|
+
let prevY = this.y;
|
|
97
|
+
|
|
98
|
+
this.context().addPage(normalizePageSize(pageSize, pageOrientation), normalizePageMargin(pageMargin), customProperties);
|
|
99
|
+
|
|
100
|
+
this.emit('pageChanged', {
|
|
101
|
+
prevPage: prevPage,
|
|
102
|
+
prevY: prevY,
|
|
103
|
+
y: this.context().y
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
beginUnbreakableBlock(width, height) {
|
|
108
|
+
if (this.transactionLevel++ === 0) {
|
|
109
|
+
this.originalX = this.context().x;
|
|
110
|
+
this.pushContext(width, height);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
commitUnbreakableBlock(forcedX, forcedY) {
|
|
115
|
+
if (--this.transactionLevel === 0) {
|
|
116
|
+
let unbreakableContext = this.context();
|
|
117
|
+
this.popContext();
|
|
118
|
+
|
|
119
|
+
let nbPages = unbreakableContext.pages.length;
|
|
120
|
+
if (nbPages > 0) {
|
|
121
|
+
// no support for multi-page unbreakableBlocks
|
|
122
|
+
let fragment = unbreakableContext.pages[0];
|
|
123
|
+
fragment.xOffset = forcedX;
|
|
124
|
+
fragment.yOffset = forcedY;
|
|
125
|
+
|
|
126
|
+
//TODO: vectors can influence height in some situations
|
|
127
|
+
if (nbPages > 1) {
|
|
128
|
+
// on out-of-context blocs (headers, footers, background) height should be the whole DocumentContext height
|
|
129
|
+
if (forcedX !== undefined || forcedY !== undefined) {
|
|
130
|
+
fragment.height = unbreakableContext.getCurrentPage().pageSize.height - unbreakableContext.pageMargins.top - unbreakableContext.pageMargins.bottom;
|
|
131
|
+
} else {
|
|
132
|
+
fragment.height = this.context().getCurrentPage().pageSize.height - this.context().pageMargins.top - this.context().pageMargins.bottom;
|
|
133
|
+
for (let i = 0, l = this.repeatables.length; i < l; i++) {
|
|
134
|
+
fragment.height -= this.repeatables[i].height;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
} else {
|
|
138
|
+
fragment.height = unbreakableContext.y;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
if (forcedX !== undefined || forcedY !== undefined) {
|
|
142
|
+
super.addFragment(fragment, true, true, true);
|
|
143
|
+
} else {
|
|
144
|
+
this.addFragment(fragment);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
currentBlockToRepeatable() {
|
|
151
|
+
let unbreakableContext = this.context();
|
|
152
|
+
let rep = { items: [] };
|
|
153
|
+
|
|
154
|
+
unbreakableContext.pages[0].items.forEach(item => {
|
|
155
|
+
rep.items.push(item);
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
rep.xOffset = this.originalX;
|
|
159
|
+
|
|
160
|
+
//TODO: vectors can influence height in some situations
|
|
161
|
+
rep.height = unbreakableContext.y;
|
|
162
|
+
|
|
163
|
+
rep.insertedOnPages = [];
|
|
164
|
+
|
|
165
|
+
return rep;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
pushToRepeatables(rep) {
|
|
169
|
+
this.repeatables.push(rep);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
popFromRepeatables() {
|
|
173
|
+
this.repeatables.pop();
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
_fitOnPage(addFct) {
|
|
177
|
+
let position = addFct();
|
|
178
|
+
if (!position) {
|
|
179
|
+
this.moveToNextPage();
|
|
180
|
+
position = addFct();
|
|
181
|
+
}
|
|
182
|
+
return position;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
export default PageElementWriter;
|