@syncfusion/ej2-pdf-export 20.2.36 → 20.2.45
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/dist/ej2-pdf-export.umd.min.js +1 -1
- package/dist/global/ej2-pdf-export.min.js +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +6 -6
- package/dist/ts/implementation/actions/action.ts +0 -76
- package/dist/ts/implementation/actions/uri-action.ts +0 -52
- package/dist/ts/implementation/annotations/action-link-annotation.ts +0 -43
- package/dist/ts/implementation/annotations/annotation-collection.ts +0 -159
- package/dist/ts/implementation/annotations/annotation.ts +0 -241
- package/dist/ts/implementation/annotations/document-link-annotation.ts +0 -118
- package/dist/ts/implementation/annotations/link-annotation.ts +0 -32
- package/dist/ts/implementation/annotations/pdf-text-web-link.ts +0 -265
- package/dist/ts/implementation/annotations/uri-annotation.ts +0 -86
- package/dist/ts/implementation/collections/dictionary.ts +0 -150
- package/dist/ts/implementation/collections/object-object-pair/dictionary.ts +0 -125
- package/dist/ts/implementation/collections/utils.ts +0 -38
- package/dist/ts/implementation/document/automatic-fields/automatic-field-info-collection.ts +0 -39
- package/dist/ts/implementation/document/automatic-fields/automatic-field-info.ts +0 -108
- package/dist/ts/implementation/document/automatic-fields/automatic-field.ts +0 -127
- package/dist/ts/implementation/document/automatic-fields/composite-field.ts +0 -76
- package/dist/ts/implementation/document/automatic-fields/multiple-value-field.ts +0 -37
- package/dist/ts/implementation/document/automatic-fields/page-count-field.ts +0 -75
- package/dist/ts/implementation/document/automatic-fields/pdf-numbers-convertor.ts +0 -157
- package/dist/ts/implementation/document/automatic-fields/pdf-page-number-field.ts +0 -82
- package/dist/ts/implementation/document/automatic-fields/pdf-template-value-pair.ts +0 -60
- package/dist/ts/implementation/document/automatic-fields/single-value-field.ts +0 -48
- package/dist/ts/implementation/document/pdf-catalog.ts +0 -52
- package/dist/ts/implementation/document/pdf-document-base.ts +0 -166
- package/dist/ts/implementation/document/pdf-document-template.ts +0 -310
- package/dist/ts/implementation/document/pdf-document.ts +0 -342
- package/dist/ts/implementation/drawing/pdf-drawing.ts +0 -218
- package/dist/ts/implementation/general/enum.ts +0 -21
- package/dist/ts/implementation/general/functions/pdf-function.ts +0 -66
- package/dist/ts/implementation/general/functions/pdf-sampled-function.ts +0 -62
- package/dist/ts/implementation/general/pdf-cache-collection.ts +0 -97
- package/dist/ts/implementation/general/pdf-collection.ts +0 -41
- package/dist/ts/implementation/general/pdf-destination.ts +0 -170
- package/dist/ts/implementation/graphics/brushes/enum.ts +0 -237
- package/dist/ts/implementation/graphics/brushes/pdf-blend.ts +0 -294
- package/dist/ts/implementation/graphics/brushes/pdf-brush.ts +0 -68
- package/dist/ts/implementation/graphics/brushes/pdf-brushes.ts +0 -2438
- package/dist/ts/implementation/graphics/brushes/pdf-color-blend.ts +0 -295
- package/dist/ts/implementation/graphics/brushes/pdf-gradient-brush.ts +0 -311
- package/dist/ts/implementation/graphics/brushes/pdf-linear-gradient-brush.ts +0 -406
- package/dist/ts/implementation/graphics/brushes/pdf-radial-gradient-brush.ts +0 -290
- package/dist/ts/implementation/graphics/brushes/pdf-solid-brush.ts +0 -107
- package/dist/ts/implementation/graphics/brushes/pdf-tiling-brush.ts +0 -304
- package/dist/ts/implementation/graphics/constants.ts +0 -31
- package/dist/ts/implementation/graphics/enum.ts +0 -413
- package/dist/ts/implementation/graphics/figures/arc.ts +0 -133
- package/dist/ts/implementation/graphics/figures/base/draw-element.ts +0 -59
- package/dist/ts/implementation/graphics/figures/base/element-layouter.ts +0 -260
- package/dist/ts/implementation/graphics/figures/base/fill-element.ts +0 -72
- package/dist/ts/implementation/graphics/figures/base/graphics-element.ts +0 -34
- package/dist/ts/implementation/graphics/figures/base/pdf-shape-element.ts +0 -69
- package/dist/ts/implementation/graphics/figures/base/shape-layouter.ts +0 -276
- package/dist/ts/implementation/graphics/figures/base/text-layouter.ts +0 -205
- package/dist/ts/implementation/graphics/figures/ellipse-part.ts +0 -76
- package/dist/ts/implementation/graphics/figures/enum.ts +0 -80
- package/dist/ts/implementation/graphics/figures/layout-element.ts +0 -132
- package/dist/ts/implementation/graphics/figures/path.ts +0 -646
- package/dist/ts/implementation/graphics/figures/pdf-template.ts +0 -205
- package/dist/ts/implementation/graphics/figures/rectangle-area.ts +0 -108
- package/dist/ts/implementation/graphics/figures/text-element.ts +0 -445
- package/dist/ts/implementation/graphics/fonts/enum.ts +0 -385
- package/dist/ts/implementation/graphics/fonts/pdf-font-metrics.ts +0 -248
- package/dist/ts/implementation/graphics/fonts/pdf-font.ts +0 -316
- package/dist/ts/implementation/graphics/fonts/pdf-standard-font-metrics-factory.ts +0 -606
- package/dist/ts/implementation/graphics/fonts/pdf-standard-font.ts +0 -243
- package/dist/ts/implementation/graphics/fonts/pdf-string-format.ts +0 -474
- package/dist/ts/implementation/graphics/fonts/pdf-true-type-font.ts +0 -165
- package/dist/ts/implementation/graphics/fonts/rtl/rtl-bidirectional.ts +0 -958
- package/dist/ts/implementation/graphics/fonts/rtl/rtl-text-shape.ts +0 -374
- package/dist/ts/implementation/graphics/fonts/rtl-renderer.ts +0 -255
- package/dist/ts/implementation/graphics/fonts/string-layouter.ts +0 -617
- package/dist/ts/implementation/graphics/fonts/string-tokenizer.ts +0 -275
- package/dist/ts/implementation/graphics/fonts/ttf-OS2-Table.ts +0 -206
- package/dist/ts/implementation/graphics/fonts/ttf-apple-cmap-sub-table.ts +0 -18
- package/dist/ts/implementation/graphics/fonts/ttf-cmap-sub-table.ts +0 -18
- package/dist/ts/implementation/graphics/fonts/ttf-cmap-table.ts +0 -14
- package/dist/ts/implementation/graphics/fonts/ttf-glyph-header.ts +0 -26
- package/dist/ts/implementation/graphics/fonts/ttf-glyph-info.ts +0 -35
- package/dist/ts/implementation/graphics/fonts/ttf-head-table.ts +0 -94
- package/dist/ts/implementation/graphics/fonts/ttf-horizontal-header-table.ts +0 -56
- package/dist/ts/implementation/graphics/fonts/ttf-loca-table.ts +0 -10
- package/dist/ts/implementation/graphics/fonts/ttf-long-hor-metric.ts +0 -14
- package/dist/ts/implementation/graphics/fonts/ttf-metrics.ts +0 -106
- package/dist/ts/implementation/graphics/fonts/ttf-microsoft-cmap-sub-table.ts +0 -58
- package/dist/ts/implementation/graphics/fonts/ttf-name-record.ts +0 -33
- package/dist/ts/implementation/graphics/fonts/ttf-name-table.ts +0 -22
- package/dist/ts/implementation/graphics/fonts/ttf-post-table.ts +0 -42
- package/dist/ts/implementation/graphics/fonts/ttf-reader.ts +0 -1254
- package/dist/ts/implementation/graphics/fonts/ttf-table-info.ts +0 -26
- package/dist/ts/implementation/graphics/fonts/ttf-trimmed-cmap-sub-table.ts +0 -26
- package/dist/ts/implementation/graphics/fonts/unicode-true-type-font.ts +0 -577
- package/dist/ts/implementation/graphics/images/byte-array.ts +0 -137
- package/dist/ts/implementation/graphics/images/image-decoder.ts +0 -437
- package/dist/ts/implementation/graphics/images/pdf-bitmap.ts +0 -110
- package/dist/ts/implementation/graphics/images/pdf-image.ts +0 -132
- package/dist/ts/implementation/graphics/pdf-color.ts +0 -478
- package/dist/ts/implementation/graphics/pdf-graphics.ts +0 -2424
- package/dist/ts/implementation/graphics/pdf-margins.ts +0 -124
- package/dist/ts/implementation/graphics/pdf-pen.ts +0 -370
- package/dist/ts/implementation/graphics/pdf-resources.ts +0 -300
- package/dist/ts/implementation/graphics/pdf-transformation-matrix.ts +0 -246
- package/dist/ts/implementation/graphics/pdf-transparency.ts +0 -93
- package/dist/ts/implementation/graphics/unit-convertor.ts +0 -96
- package/dist/ts/implementation/input-output/big-endian-writer.ts +0 -121
- package/dist/ts/implementation/input-output/cross-table.ts +0 -21
- package/dist/ts/implementation/input-output/enum.ts +0 -16
- package/dist/ts/implementation/input-output/pdf-cross-table.ts +0 -524
- package/dist/ts/implementation/input-output/pdf-dictionary-properties.ts +0 -515
- package/dist/ts/implementation/input-output/pdf-main-object-collection.ts +0 -194
- package/dist/ts/implementation/input-output/pdf-operators.ts +0 -363
- package/dist/ts/implementation/input-output/pdf-stream-writer.ts +0 -681
- package/dist/ts/implementation/input-output/pdf-writer.ts +0 -88
- package/dist/ts/implementation/pages/enum.ts +0 -201
- package/dist/ts/implementation/pages/page-added-event-arguments.ts +0 -39
- package/dist/ts/implementation/pages/pdf-document-page-collection.ts +0 -180
- package/dist/ts/implementation/pages/pdf-page-base.ts +0 -181
- package/dist/ts/implementation/pages/pdf-page-layer-collection.ts +0 -348
- package/dist/ts/implementation/pages/pdf-page-layer.ts +0 -271
- package/dist/ts/implementation/pages/pdf-page-settings.ts +0 -192
- package/dist/ts/implementation/pages/pdf-page-size.ts +0 -162
- package/dist/ts/implementation/pages/pdf-page-template-element.ts +0 -659
- package/dist/ts/implementation/pages/pdf-page.ts +0 -235
- package/dist/ts/implementation/pages/pdf-section-collection.ts +0 -187
- package/dist/ts/implementation/pages/pdf-section-page-collection.ts +0 -61
- package/dist/ts/implementation/pages/pdf-section-templates.ts +0 -96
- package/dist/ts/implementation/pages/pdf-section.ts +0 -644
- package/dist/ts/implementation/primitives/pdf-array.ts +0 -386
- package/dist/ts/implementation/primitives/pdf-boolean.ts +0 -119
- package/dist/ts/implementation/primitives/pdf-dictionary.ts +0 -513
- package/dist/ts/implementation/primitives/pdf-name.ts +0 -218
- package/dist/ts/implementation/primitives/pdf-number.ts +0 -165
- package/dist/ts/implementation/primitives/pdf-reference.ts +0 -430
- package/dist/ts/implementation/primitives/pdf-stream.ts +0 -336
- package/dist/ts/implementation/primitives/pdf-string.ts +0 -397
- package/dist/ts/implementation/structured-elements/grid/layout/grid-layouter.ts +0 -2027
- package/dist/ts/implementation/structured-elements/grid/pdf-grid-cell.ts +0 -1189
- package/dist/ts/implementation/structured-elements/grid/pdf-grid-column.ts +0 -206
- package/dist/ts/implementation/structured-elements/grid/pdf-grid-row.ts +0 -470
- package/dist/ts/implementation/structured-elements/grid/pdf-grid.ts +0 -853
- package/dist/ts/implementation/structured-elements/grid/styles/pdf-borders.ts +0 -240
- package/dist/ts/implementation/structured-elements/grid/styles/style.ts +0 -424
- package/dist/ts/implementation/structured-elements/tables/light-tables/enum.ts +0 -16
- package/dist/ts/interfaces/i-pdf-cache.ts +0 -23
- package/dist/ts/interfaces/i-pdf-changable.ts +0 -17
- package/dist/ts/interfaces/i-pdf-clonable.ts +0 -12
- package/dist/ts/interfaces/i-pdf-primitives.ts +0 -45
- package/dist/ts/interfaces/i-pdf-true-type-font.ts +0 -48
- package/dist/ts/interfaces/i-pdf-wrapper.ts +0 -13
- package/dist/ts/interfaces/i-pdf-writer.ts +0 -29
|
@@ -1,617 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PdfStringLayouter.ts class for EJ2-PDF
|
|
3
|
-
*/
|
|
4
|
-
import { PdfFont } from './pdf-font';
|
|
5
|
-
import { PdfStringFormat } from './pdf-string-format';
|
|
6
|
-
import { SizeF, RectangleF, PointF } from './../../drawing/pdf-drawing';
|
|
7
|
-
import { PdfWordWrapType } from './enum';
|
|
8
|
-
import { StringTokenizer } from './string-tokenizer';
|
|
9
|
-
/**
|
|
10
|
-
* Class `lay outing the text`.
|
|
11
|
-
*/
|
|
12
|
-
export class PdfStringLayouter {
|
|
13
|
-
// Fields
|
|
14
|
-
/**
|
|
15
|
-
* `Text` data.
|
|
16
|
-
* @private
|
|
17
|
-
*/
|
|
18
|
-
private text : string;
|
|
19
|
-
/**
|
|
20
|
-
* Pdf `font`.
|
|
21
|
-
* @private
|
|
22
|
-
*/
|
|
23
|
-
private font : PdfFont;
|
|
24
|
-
/**
|
|
25
|
-
* String `format`.
|
|
26
|
-
* @private
|
|
27
|
-
*/
|
|
28
|
-
private format : PdfStringFormat;
|
|
29
|
-
/**
|
|
30
|
-
* `Size` of the text.
|
|
31
|
-
* @private
|
|
32
|
-
*/
|
|
33
|
-
private size : SizeF;
|
|
34
|
-
/**
|
|
35
|
-
* `Bounds` of the text.
|
|
36
|
-
* @private
|
|
37
|
-
*/
|
|
38
|
-
private rectangle : RectangleF;
|
|
39
|
-
/**
|
|
40
|
-
* Pdf page `height`.
|
|
41
|
-
* @private
|
|
42
|
-
*/
|
|
43
|
-
private pageHeight : number;
|
|
44
|
-
/**
|
|
45
|
-
* String `tokenizer`.
|
|
46
|
-
* @private
|
|
47
|
-
*/
|
|
48
|
-
private reader : StringTokenizer;
|
|
49
|
-
/**
|
|
50
|
-
* Specifies if [`isTabReplaced`].
|
|
51
|
-
* @private
|
|
52
|
-
*/
|
|
53
|
-
private isTabReplaced : boolean;
|
|
54
|
-
/**
|
|
55
|
-
* Count of tab `occurance`.
|
|
56
|
-
* @private
|
|
57
|
-
*/
|
|
58
|
-
private tabOccuranceCount : number;
|
|
59
|
-
/**
|
|
60
|
-
* Checks whether the x co-ordinate is need to set as client size or not.
|
|
61
|
-
* @hidden
|
|
62
|
-
* @private
|
|
63
|
-
*/
|
|
64
|
-
private isOverloadWithPosition : boolean = false;
|
|
65
|
-
/**
|
|
66
|
-
* Stores client size of the page if the layout method invoked with `PointF` overload.
|
|
67
|
-
* @hidden
|
|
68
|
-
* @private
|
|
69
|
-
*/
|
|
70
|
-
private clientSize : SizeF;
|
|
71
|
-
// Constructors
|
|
72
|
-
/**
|
|
73
|
-
* Initializes a new instance of the `StringLayouter` class.
|
|
74
|
-
* @private
|
|
75
|
-
*/
|
|
76
|
-
public constructor() {
|
|
77
|
-
//
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
//Public methods
|
|
81
|
-
/**
|
|
82
|
-
* `Layouts` the text.
|
|
83
|
-
* @private
|
|
84
|
-
*/
|
|
85
|
-
public layout(text : string, font : PdfFont, format : PdfStringFormat, rectangle : RectangleF,
|
|
86
|
-
pageHeight : number, recalculateBounds : boolean, clientSize : SizeF) : PdfStringLayoutResult
|
|
87
|
-
public layout(text : string, font : PdfFont, format : PdfStringFormat, size : SizeF,
|
|
88
|
-
recalculateBounds : boolean, clientSize : SizeF) : PdfStringLayoutResult
|
|
89
|
-
public layout(arg1 : string, arg2 : PdfFont, arg3 : PdfStringFormat, arg4 : SizeF|RectangleF,
|
|
90
|
-
arg5 : number | boolean, arg6 : boolean | SizeF, arg7 ?: SizeF) : PdfStringLayoutResult {
|
|
91
|
-
if (arg4 instanceof RectangleF) {
|
|
92
|
-
this.initialize(arg1, arg2, arg3, <RectangleF>arg4, arg5 as number);
|
|
93
|
-
this.isOverloadWithPosition = arg6 as boolean;
|
|
94
|
-
this.clientSize = arg7 as SizeF;
|
|
95
|
-
let result : PdfStringLayoutResult = this.doLayout();
|
|
96
|
-
this.clear();
|
|
97
|
-
return result;
|
|
98
|
-
} else {
|
|
99
|
-
this.initialize(arg1, arg2, arg3, arg4 as SizeF);
|
|
100
|
-
this.isOverloadWithPosition = arg5 as boolean;
|
|
101
|
-
this.clientSize = arg6 as SizeF;
|
|
102
|
-
let result : PdfStringLayoutResult = this.doLayout();
|
|
103
|
-
this.clear();
|
|
104
|
-
return result;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
// recalculateBounds : boolean, clientSize : SizeF
|
|
108
|
-
//Implementation
|
|
109
|
-
/**
|
|
110
|
-
* `Initializes` internal data.
|
|
111
|
-
* @private
|
|
112
|
-
*/
|
|
113
|
-
private initialize(text : string, font : PdfFont, format : PdfStringFormat, rectangle : RectangleF, pageHeight : number) : void
|
|
114
|
-
private initialize(text : string, font : PdfFont, format : PdfStringFormat, size : SizeF) : void
|
|
115
|
-
private initialize(text : string, font : PdfFont, format : PdfStringFormat, rectSize : SizeF|RectangleF,
|
|
116
|
-
pageHeight ?: number) : void {
|
|
117
|
-
if (typeof pageHeight === 'number') {
|
|
118
|
-
if (text == null) {
|
|
119
|
-
throw new Error('ArgumentNullException:text');
|
|
120
|
-
}
|
|
121
|
-
if (font == null) {
|
|
122
|
-
throw new Error('ArgumentNullException:font');
|
|
123
|
-
}
|
|
124
|
-
this.text = text;
|
|
125
|
-
this.font = font;
|
|
126
|
-
this.format = format;
|
|
127
|
-
this.size = new SizeF(rectSize.width, rectSize.height);
|
|
128
|
-
this.rectangle = <RectangleF>rectSize;
|
|
129
|
-
this.pageHeight = pageHeight;
|
|
130
|
-
this.reader = new StringTokenizer(text);
|
|
131
|
-
} else {
|
|
132
|
-
this.initialize(text, font, format, new RectangleF(new PointF(0, 0), <SizeF>rectSize), 0);
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* `Clear` all resources.
|
|
137
|
-
* @private
|
|
138
|
-
*/
|
|
139
|
-
private clear() : void {
|
|
140
|
-
this.font = null;
|
|
141
|
-
this.format = null;
|
|
142
|
-
this.reader.close();
|
|
143
|
-
this.reader = null;
|
|
144
|
-
this.text = null;
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* `Layouts` the text.
|
|
148
|
-
* @private
|
|
149
|
-
*/
|
|
150
|
-
private doLayout() : PdfStringLayoutResult {
|
|
151
|
-
let result : PdfStringLayoutResult = new PdfStringLayoutResult();
|
|
152
|
-
let lineResult : PdfStringLayoutResult = new PdfStringLayoutResult();
|
|
153
|
-
let lines : LineInfo[] = [];
|
|
154
|
-
let line : string = this.reader.peekLine();
|
|
155
|
-
let lineIndent : number = this.getLineIndent(true);
|
|
156
|
-
while (line != null) {
|
|
157
|
-
lineResult = this.layoutLine(line, lineIndent);
|
|
158
|
-
if (lineResult !== null || typeof lineResult !== 'undefined') {
|
|
159
|
-
let numSymbolsInserted : number = 0;
|
|
160
|
-
/* tslint:disable */
|
|
161
|
-
let returnedValue : { success : boolean, numInserted : number } = this.copyToResult(result, lineResult, lines, /*out*/ numSymbolsInserted);
|
|
162
|
-
/* tslint:enable */
|
|
163
|
-
let success : boolean = returnedValue.success;
|
|
164
|
-
numSymbolsInserted = returnedValue.numInserted;
|
|
165
|
-
if (!success) {
|
|
166
|
-
this.reader.read(numSymbolsInserted);
|
|
167
|
-
break;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
// if (lineResult.textRemainder != null && lineResult.textRemainder.length > 0 ) {
|
|
171
|
-
// break;
|
|
172
|
-
// }
|
|
173
|
-
this.reader.readLine();
|
|
174
|
-
line = this.reader.peekLine();
|
|
175
|
-
lineIndent = this.getLineIndent(false);
|
|
176
|
-
}
|
|
177
|
-
this.finalizeResult(result, lines);
|
|
178
|
-
return result;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Returns `line indent` for the line.
|
|
182
|
-
* @private
|
|
183
|
-
*/
|
|
184
|
-
private getLineIndent(firstLine : boolean) : number {
|
|
185
|
-
let lineIndent : number = 0;
|
|
186
|
-
if (this.format != null) {
|
|
187
|
-
lineIndent = (firstLine) ? this.format.firstLineIndent : this.format.paragraphIndent;
|
|
188
|
-
lineIndent = (this.size.width > 0) ? Math.min(this.size.width, lineIndent) : lineIndent;
|
|
189
|
-
}
|
|
190
|
-
return lineIndent;
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* Calculates `height` of the line.
|
|
194
|
-
* @private
|
|
195
|
-
*/
|
|
196
|
-
private getLineHeight() : number {
|
|
197
|
-
let height : number = this.font.height;
|
|
198
|
-
if (this.format != null && this.format.lineSpacing !== 0) {
|
|
199
|
-
height = this.format.lineSpacing + this.font.height;
|
|
200
|
-
}
|
|
201
|
-
return height;
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Calculates `width` of the line.
|
|
205
|
-
* @private
|
|
206
|
-
*/
|
|
207
|
-
private getLineWidth(line : string) : number {
|
|
208
|
-
let width : number = this.font.getLineWidth(line, this.format);
|
|
209
|
-
return width;
|
|
210
|
-
}
|
|
211
|
-
// tslint:disable
|
|
212
|
-
/**
|
|
213
|
-
* `Layouts` line.
|
|
214
|
-
* @private
|
|
215
|
-
*/
|
|
216
|
-
private layoutLine(line : string, lineIndent : number) : PdfStringLayoutResult {
|
|
217
|
-
let lineResult : PdfStringLayoutResult = new PdfStringLayoutResult();
|
|
218
|
-
lineResult.layoutLineHeight = this.getLineHeight();
|
|
219
|
-
let lines : LineInfo[] = [];
|
|
220
|
-
let maxWidth : number = this.size.width;
|
|
221
|
-
let lineWidth : number = this.getLineWidth(line) + lineIndent;
|
|
222
|
-
let lineType : LineType = LineType.FirstParagraphLine;
|
|
223
|
-
let readWord : boolean = true;
|
|
224
|
-
// line is in bounds.
|
|
225
|
-
if (maxWidth <= 0 || Math.round(lineWidth) <= Math.round(maxWidth)) {
|
|
226
|
-
this.addToLineResult(lineResult, lines, line, lineWidth, LineType.NewLineBreak | lineType);
|
|
227
|
-
} else {
|
|
228
|
-
let builder : string = '';
|
|
229
|
-
let curLine : string = '';
|
|
230
|
-
lineWidth = lineIndent;
|
|
231
|
-
let curIndent : number = lineIndent;
|
|
232
|
-
let reader : StringTokenizer = new StringTokenizer(line);
|
|
233
|
-
let word : string = reader.peekWord();
|
|
234
|
-
let isSingleWord : boolean = false;
|
|
235
|
-
if (word.length !== reader.length) {
|
|
236
|
-
if (word === ' ') {
|
|
237
|
-
curLine = curLine + word;
|
|
238
|
-
builder = builder + word;
|
|
239
|
-
reader.position += 1;
|
|
240
|
-
word = reader.peekWord();
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
while (word != null) {
|
|
244
|
-
curLine = curLine + word;
|
|
245
|
-
let curLineWidth : number = /*Utils.Round(*/ this.getLineWidth(curLine.toString()) + curIndent /*)*/;
|
|
246
|
-
if (curLine.toString() === ' ') {
|
|
247
|
-
curLine = '';
|
|
248
|
-
curLineWidth = 0;
|
|
249
|
-
}
|
|
250
|
-
if (curLineWidth > maxWidth) {
|
|
251
|
-
if (this.getWrapType() === PdfWordWrapType.None) {
|
|
252
|
-
break;
|
|
253
|
-
}
|
|
254
|
-
if (curLine.length === word.length) {
|
|
255
|
-
// Character wrap is disabled or one symbol is greater than bounds.
|
|
256
|
-
if (this.getWrapType() === PdfWordWrapType.WordOnly) {
|
|
257
|
-
lineResult.textRemainder = line.substring(reader.position);
|
|
258
|
-
break;
|
|
259
|
-
} else if (curLine.length === 1) {
|
|
260
|
-
builder = builder + word;
|
|
261
|
-
break;
|
|
262
|
-
} else {
|
|
263
|
-
readWord = false;
|
|
264
|
-
curLine = '';
|
|
265
|
-
word = reader.peek().toString();
|
|
266
|
-
continue;
|
|
267
|
-
}
|
|
268
|
-
} else {
|
|
269
|
-
if (this.getLineWidth(word.toString()) > maxWidth) {
|
|
270
|
-
this.format.wordWrap = PdfWordWrapType.Character;
|
|
271
|
-
} else {
|
|
272
|
-
if (typeof this.format !== 'undefined' && this.format !== null ) {
|
|
273
|
-
this.format.wordWrap = PdfWordWrapType.Word;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
if (this.getWrapType() !== PdfWordWrapType.Character || !readWord) {
|
|
277
|
-
let ln : string = builder.toString();
|
|
278
|
-
// if (ln.indexOf(' ') === -1) {
|
|
279
|
-
// isSingleWord = true;
|
|
280
|
-
// this.addToLineResult(lineResult, lines, curLine, lineWidth, LineType.LayoutBreak | lineType);
|
|
281
|
-
// } else {
|
|
282
|
-
// this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.LayoutBreak | lineType);
|
|
283
|
-
// }
|
|
284
|
-
if (ln !== ' ') {
|
|
285
|
-
this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.LayoutBreak | lineType);
|
|
286
|
-
}
|
|
287
|
-
if (this.isOverloadWithPosition) {
|
|
288
|
-
maxWidth = this.clientSize.width;
|
|
289
|
-
}
|
|
290
|
-
curLine = '';
|
|
291
|
-
builder = '';
|
|
292
|
-
lineWidth = 0;
|
|
293
|
-
curIndent = 0;
|
|
294
|
-
curLineWidth = 0;
|
|
295
|
-
lineType = LineType.None;
|
|
296
|
-
// if (isSingleWord) {
|
|
297
|
-
// reader.readWord();
|
|
298
|
-
// readWord = false;
|
|
299
|
-
// }
|
|
300
|
-
word = (readWord) ? word : reader.peekWord();
|
|
301
|
-
//isSingleWord = false;
|
|
302
|
-
readWord = true;
|
|
303
|
-
} else {
|
|
304
|
-
readWord = false;
|
|
305
|
-
curLine = '';
|
|
306
|
-
curLine = curLine + builder.toString();
|
|
307
|
-
word = reader.peek().toString();
|
|
308
|
-
}
|
|
309
|
-
continue;
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
/*tslint:disable:max-func-body-length */
|
|
313
|
-
builder = builder + word;
|
|
314
|
-
lineWidth = curLineWidth;
|
|
315
|
-
if (readWord) {
|
|
316
|
-
reader.readWord();
|
|
317
|
-
word = reader.peekWord();
|
|
318
|
-
//isSingleWord = false;
|
|
319
|
-
} else {
|
|
320
|
-
reader.read();
|
|
321
|
-
word = reader.peek().toString();
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
if (builder.length > 0) {
|
|
325
|
-
let ln : string = builder.toString();
|
|
326
|
-
this.addToLineResult(lineResult, lines, ln, lineWidth, LineType.NewLineBreak | LineType.LastParagraphLine);
|
|
327
|
-
}
|
|
328
|
-
reader.close();
|
|
329
|
-
}
|
|
330
|
-
lineResult.layoutLines = [];
|
|
331
|
-
for (let index : number = 0; index < lines.length; index++) {
|
|
332
|
-
lineResult.layoutLines.push(lines[index]);
|
|
333
|
-
}
|
|
334
|
-
lines = [];
|
|
335
|
-
return lineResult;
|
|
336
|
-
}
|
|
337
|
-
/**
|
|
338
|
-
* `Adds` line to line result.
|
|
339
|
-
* @private
|
|
340
|
-
*/
|
|
341
|
-
private addToLineResult(lineResult : PdfStringLayoutResult, lines : LineInfo[], line : string,
|
|
342
|
-
lineWidth : number, breakType : LineType) : void {
|
|
343
|
-
let info : LineInfo = new LineInfo();
|
|
344
|
-
info.text = line;
|
|
345
|
-
info.width = lineWidth;
|
|
346
|
-
info.lineType = breakType;
|
|
347
|
-
lines.push(info);
|
|
348
|
-
let size : SizeF = lineResult.actualSize;
|
|
349
|
-
size.height += this.getLineHeight();
|
|
350
|
-
size.width = Math.max(size.width, lineWidth);
|
|
351
|
-
lineResult.size = size;
|
|
352
|
-
}
|
|
353
|
-
/**
|
|
354
|
-
* `Copies` layout result from line result to entire result. Checks whether we can proceed lay outing or not.
|
|
355
|
-
* @private
|
|
356
|
-
*/
|
|
357
|
-
private copyToResult(result : PdfStringLayoutResult, lineResult : PdfStringLayoutResult, lines : LineInfo[],
|
|
358
|
-
/*out*/ numInserted : number) : { success : boolean, numInserted : number } {
|
|
359
|
-
let success : boolean = true;
|
|
360
|
-
let allowPartialLines : boolean = (this.format != null && !this.format.lineLimit);
|
|
361
|
-
let height : number = result.actualSize.height;
|
|
362
|
-
let maxHeight : number = this.size.height;
|
|
363
|
-
if ((this.pageHeight > 0) && (maxHeight + this.rectangle.y > this.pageHeight)) {
|
|
364
|
-
maxHeight = this.rectangle.y - this.pageHeight;
|
|
365
|
-
maxHeight = Math.max(maxHeight, -maxHeight);
|
|
366
|
-
}
|
|
367
|
-
numInserted = 0;
|
|
368
|
-
if (lineResult.lines != null) {
|
|
369
|
-
for (let i : number = 0, len : number = lineResult.lines.length; i < len; i++) {
|
|
370
|
-
let expHeight : number = height + lineResult.lineHeight;
|
|
371
|
-
if (expHeight <= maxHeight || maxHeight <= 0 || allowPartialLines)
|
|
372
|
-
{
|
|
373
|
-
let info : LineInfo = lineResult.lines[i];
|
|
374
|
-
numInserted += info.text.length;
|
|
375
|
-
info = this.trimLine(info, (lines.length === 0));
|
|
376
|
-
lines.push(info);
|
|
377
|
-
// Update width.
|
|
378
|
-
let size : SizeF = result.actualSize;
|
|
379
|
-
size.width = Math.max(size.width, info.width);
|
|
380
|
-
result.size = size;
|
|
381
|
-
// The part of the line fits only and it's allowed to use partial lines.
|
|
382
|
-
// if (expHeight >= maxHeight && maxHeight > 0 && allowPartialLines)
|
|
383
|
-
// {
|
|
384
|
-
// let shouldClip : boolean = (this.format == null || !this.format.noClip);
|
|
385
|
-
|
|
386
|
-
// if (shouldClip)
|
|
387
|
-
// {
|
|
388
|
-
// let exceededHeight : number = expHeight - maxHeight;
|
|
389
|
-
// let fitHeight : number = /*Utils.Round(*/ lineResult.lineHeight - exceededHeight /*)*/;
|
|
390
|
-
// height = /*Utils.Round(*/ height + fitHeight /*)*/;
|
|
391
|
-
// }
|
|
392
|
-
// else
|
|
393
|
-
// {
|
|
394
|
-
// height = expHeight;
|
|
395
|
-
// }
|
|
396
|
-
|
|
397
|
-
// success = false;
|
|
398
|
-
// break;
|
|
399
|
-
// } else {
|
|
400
|
-
height = expHeight;
|
|
401
|
-
// }
|
|
402
|
-
}
|
|
403
|
-
else
|
|
404
|
-
{
|
|
405
|
-
success = false;
|
|
406
|
-
break;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
if (height != result.size.height)
|
|
411
|
-
{
|
|
412
|
-
let size1 : SizeF= result.actualSize;
|
|
413
|
-
size1.height = height;
|
|
414
|
-
result.size = size1;
|
|
415
|
-
}
|
|
416
|
-
return {success : success, numInserted : numInserted};
|
|
417
|
-
}
|
|
418
|
-
/**
|
|
419
|
-
* `Finalizes` final result.
|
|
420
|
-
* @private
|
|
421
|
-
*/
|
|
422
|
-
private finalizeResult(result : PdfStringLayoutResult, lines : LineInfo[]) : void {
|
|
423
|
-
result.layoutLines = [];
|
|
424
|
-
for (let index : number = 0; index < lines.length ; index++) {
|
|
425
|
-
result.layoutLines.push(lines[index]);
|
|
426
|
-
}
|
|
427
|
-
result.layoutLineHeight = this.getLineHeight();
|
|
428
|
-
if (!this.reader.end)
|
|
429
|
-
{
|
|
430
|
-
result.textRemainder = this.reader.readToEnd();
|
|
431
|
-
}
|
|
432
|
-
lines = [];
|
|
433
|
-
}
|
|
434
|
-
/**
|
|
435
|
-
* `Trims` whitespaces at the line.
|
|
436
|
-
* @private
|
|
437
|
-
*/
|
|
438
|
-
private trimLine(info : LineInfo, firstLine : boolean) : LineInfo {
|
|
439
|
-
let line : string = info.text;
|
|
440
|
-
let lineWidth : number = info.width;
|
|
441
|
-
// Trim start whitespaces if the line is not a start of the paragraph only.
|
|
442
|
-
let trimStartSpaces : boolean = ((info.lineType & LineType.FirstParagraphLine) === 0);
|
|
443
|
-
let start : boolean = (this.format == null || !this.format.rightToLeft);
|
|
444
|
-
let spaces : string[] = StringTokenizer.spaces;
|
|
445
|
-
line = (start) ? line.trim() : line.trim();
|
|
446
|
-
// Recalculate line width.
|
|
447
|
-
if (line.length !== info.text.length) {
|
|
448
|
-
lineWidth = this.getLineWidth(line);
|
|
449
|
-
if ((info.lineType & LineType.FirstParagraphLine) > 0) {
|
|
450
|
-
lineWidth += this.getLineIndent(firstLine);
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
info.text = line;
|
|
454
|
-
info.width = lineWidth;
|
|
455
|
-
return info;
|
|
456
|
-
}
|
|
457
|
-
/**
|
|
458
|
-
* Returns `wrap` type.
|
|
459
|
-
* @private
|
|
460
|
-
*/
|
|
461
|
-
private getWrapType() : PdfWordWrapType {
|
|
462
|
-
let wrapType : PdfWordWrapType = (this.format != null) ? this.format.wordWrap : PdfWordWrapType.Word;
|
|
463
|
-
return wrapType;
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
//Internal declaration
|
|
467
|
-
export class PdfStringLayoutResult {
|
|
468
|
-
//Fields
|
|
469
|
-
/**
|
|
470
|
-
* Layout `lines`.
|
|
471
|
-
* @private
|
|
472
|
-
*/
|
|
473
|
-
public layoutLines : LineInfo[];
|
|
474
|
-
/**
|
|
475
|
-
* The `text` wasn`t lay outed.
|
|
476
|
-
* @private
|
|
477
|
-
*/
|
|
478
|
-
public textRemainder : string;
|
|
479
|
-
/**
|
|
480
|
-
* Actual layout text `bounds`.
|
|
481
|
-
* @private
|
|
482
|
-
*/
|
|
483
|
-
public size : SizeF;
|
|
484
|
-
/**
|
|
485
|
-
* `Height` of the line.
|
|
486
|
-
* @private
|
|
487
|
-
*/
|
|
488
|
-
public layoutLineHeight : number;
|
|
489
|
-
// Properties
|
|
490
|
-
/**
|
|
491
|
-
* Gets the `text` which is not lay outed.
|
|
492
|
-
* @private
|
|
493
|
-
*/
|
|
494
|
-
public get remainder() : string {
|
|
495
|
-
return this.textRemainder;
|
|
496
|
-
}
|
|
497
|
-
/**
|
|
498
|
-
* Gets the actual layout text `bounds`.
|
|
499
|
-
* @private
|
|
500
|
-
*/
|
|
501
|
-
public get actualSize() : SizeF {
|
|
502
|
-
if ( typeof this.size === 'undefined' ) {
|
|
503
|
-
this.size = new SizeF(0, 0);
|
|
504
|
-
}
|
|
505
|
-
return this.size;
|
|
506
|
-
}
|
|
507
|
-
/**
|
|
508
|
-
* Gets layout `lines` information.
|
|
509
|
-
* @private
|
|
510
|
-
*/
|
|
511
|
-
public get lines() : LineInfo[] {
|
|
512
|
-
return this.layoutLines;
|
|
513
|
-
}
|
|
514
|
-
/**
|
|
515
|
-
* Gets the `height` of the line.
|
|
516
|
-
* @private
|
|
517
|
-
*/
|
|
518
|
-
public get lineHeight() : number {
|
|
519
|
-
return this.layoutLineHeight;
|
|
520
|
-
}
|
|
521
|
-
/**
|
|
522
|
-
* Gets value that indicates whether any layout text [`empty`].
|
|
523
|
-
* @private
|
|
524
|
-
*/
|
|
525
|
-
public get empty() : boolean {
|
|
526
|
-
return (this.layoutLines == null || this.layoutLines.length === 0);
|
|
527
|
-
}
|
|
528
|
-
/**
|
|
529
|
-
* Gets `number of` the layout lines.
|
|
530
|
-
* @private
|
|
531
|
-
*/
|
|
532
|
-
public get lineCount() : number {
|
|
533
|
-
let count : number = (!this.empty) ? this.layoutLines.length : 0;
|
|
534
|
-
return count;
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
|
-
export class LineInfo {
|
|
538
|
-
//Fields
|
|
539
|
-
/**
|
|
540
|
-
* Line `text`.
|
|
541
|
-
* @private
|
|
542
|
-
*/
|
|
543
|
-
public content : string;
|
|
544
|
-
/**
|
|
545
|
-
* `Width` of the text.
|
|
546
|
-
* @private
|
|
547
|
-
*/
|
|
548
|
-
public lineWidth : number;
|
|
549
|
-
/**
|
|
550
|
-
* `Breaking type` of the line.
|
|
551
|
-
* @private
|
|
552
|
-
*/
|
|
553
|
-
public type : LineType;
|
|
554
|
-
|
|
555
|
-
//Properties
|
|
556
|
-
/**
|
|
557
|
-
* Gets the `type` of the line text.
|
|
558
|
-
* @private
|
|
559
|
-
*/
|
|
560
|
-
public get lineType() : LineType {
|
|
561
|
-
return this.type;
|
|
562
|
-
}
|
|
563
|
-
public set lineType(value : LineType) {
|
|
564
|
-
this.type = value;
|
|
565
|
-
}
|
|
566
|
-
/**
|
|
567
|
-
* Gets the line `text`.
|
|
568
|
-
* @private
|
|
569
|
-
*/
|
|
570
|
-
public get text() : string {
|
|
571
|
-
return this.content;
|
|
572
|
-
}
|
|
573
|
-
public set text(value : string) {
|
|
574
|
-
this.content = value;
|
|
575
|
-
}
|
|
576
|
-
/**
|
|
577
|
-
* Gets `width` of the line text.
|
|
578
|
-
* @private
|
|
579
|
-
*/
|
|
580
|
-
public get width() : number {
|
|
581
|
-
return this.lineWidth;
|
|
582
|
-
}
|
|
583
|
-
public set width(value : number) {
|
|
584
|
-
this.lineWidth = value;
|
|
585
|
-
}
|
|
586
|
-
}
|
|
587
|
-
/**
|
|
588
|
-
* Break type of the `line`.
|
|
589
|
-
* @private
|
|
590
|
-
*/
|
|
591
|
-
export enum LineType {
|
|
592
|
-
/**
|
|
593
|
-
* Specifies the type of `None`.
|
|
594
|
-
* @private
|
|
595
|
-
*/
|
|
596
|
-
None = 0,
|
|
597
|
-
/**
|
|
598
|
-
* Specifies the type of `NewLineBreak`.
|
|
599
|
-
* @private
|
|
600
|
-
*/
|
|
601
|
-
NewLineBreak = 0x0001,
|
|
602
|
-
/**
|
|
603
|
-
* Specifies the type of `LayoutBreak`.
|
|
604
|
-
* @private
|
|
605
|
-
*/
|
|
606
|
-
LayoutBreak = 0x0002,
|
|
607
|
-
/**
|
|
608
|
-
* Specifies the type of `FirstParagraphLine`.
|
|
609
|
-
* @private
|
|
610
|
-
*/
|
|
611
|
-
FirstParagraphLine = 0x0004,
|
|
612
|
-
/**
|
|
613
|
-
* Specifies the type of `LastParagraphLine`.
|
|
614
|
-
* @private
|
|
615
|
-
*/
|
|
616
|
-
LastParagraphLine = 0x0008
|
|
617
|
-
}
|