@syncfusion/ej2-pdf-export 23.2.6 → 24.1.41

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.
Files changed (161) hide show
  1. package/CHANGELOG.md +0 -26
  2. package/dist/ej2-pdf-export.min.js +2 -2
  3. package/dist/ej2-pdf-export.umd.min.js +1 -1
  4. package/dist/ej2-pdf-export.umd.min.js.map +1 -1
  5. package/dist/es6/ej2-pdf-export.es2015.js.map +1 -1
  6. package/dist/es6/ej2-pdf-export.es5.js.map +1 -1
  7. package/dist/global/ej2-pdf-export.min.js +1 -1
  8. package/dist/global/ej2-pdf-export.min.js.map +1 -1
  9. package/dist/global/index.d.ts +1 -1
  10. package/dist/ts/implementation/actions/action.ts +76 -0
  11. package/dist/ts/implementation/actions/uri-action.ts +52 -0
  12. package/dist/ts/implementation/annotations/action-link-annotation.ts +43 -0
  13. package/dist/ts/implementation/annotations/annotation-collection.ts +159 -0
  14. package/dist/ts/implementation/annotations/annotation.ts +241 -0
  15. package/dist/ts/implementation/annotations/document-link-annotation.ts +118 -0
  16. package/dist/ts/implementation/annotations/link-annotation.ts +32 -0
  17. package/dist/ts/implementation/annotations/pdf-text-web-link.ts +265 -0
  18. package/dist/ts/implementation/annotations/uri-annotation.ts +86 -0
  19. package/dist/ts/implementation/collections/dictionary.ts +150 -0
  20. package/dist/ts/implementation/collections/object-object-pair/dictionary.ts +125 -0
  21. package/dist/ts/implementation/collections/utils.ts +38 -0
  22. package/dist/ts/implementation/document/automatic-fields/automatic-field-info-collection.ts +39 -0
  23. package/dist/ts/implementation/document/automatic-fields/automatic-field-info.ts +108 -0
  24. package/dist/ts/implementation/document/automatic-fields/automatic-field.ts +127 -0
  25. package/dist/ts/implementation/document/automatic-fields/composite-field.ts +76 -0
  26. package/dist/ts/implementation/document/automatic-fields/multiple-value-field.ts +37 -0
  27. package/dist/ts/implementation/document/automatic-fields/page-count-field.ts +75 -0
  28. package/dist/ts/implementation/document/automatic-fields/pdf-numbers-convertor.ts +157 -0
  29. package/dist/ts/implementation/document/automatic-fields/pdf-page-number-field.ts +82 -0
  30. package/dist/ts/implementation/document/automatic-fields/pdf-template-value-pair.ts +60 -0
  31. package/dist/ts/implementation/document/automatic-fields/single-value-field.ts +48 -0
  32. package/dist/ts/implementation/document/pdf-catalog.ts +65 -0
  33. package/dist/ts/implementation/document/pdf-document-base.ts +180 -0
  34. package/dist/ts/implementation/document/pdf-document-template.ts +310 -0
  35. package/dist/ts/implementation/document/pdf-document.ts +342 -0
  36. package/dist/ts/implementation/document/pdf-viewer-preferences.ts +578 -0
  37. package/dist/ts/implementation/drawing/pdf-drawing.ts +218 -0
  38. package/dist/ts/implementation/general/enum.ts +21 -0
  39. package/dist/ts/implementation/general/functions/pdf-function.ts +66 -0
  40. package/dist/ts/implementation/general/functions/pdf-sampled-function.ts +63 -0
  41. package/dist/ts/implementation/general/pdf-cache-collection.ts +97 -0
  42. package/dist/ts/implementation/general/pdf-collection.ts +41 -0
  43. package/dist/ts/implementation/general/pdf-destination.ts +170 -0
  44. package/dist/ts/implementation/graphics/brushes/enum.ts +237 -0
  45. package/dist/ts/implementation/graphics/brushes/pdf-blend.ts +294 -0
  46. package/dist/ts/implementation/graphics/brushes/pdf-brush.ts +68 -0
  47. package/dist/ts/implementation/graphics/brushes/pdf-brushes.ts +2438 -0
  48. package/dist/ts/implementation/graphics/brushes/pdf-color-blend.ts +295 -0
  49. package/dist/ts/implementation/graphics/brushes/pdf-gradient-brush.ts +311 -0
  50. package/dist/ts/implementation/graphics/brushes/pdf-linear-gradient-brush.ts +406 -0
  51. package/dist/ts/implementation/graphics/brushes/pdf-radial-gradient-brush.ts +290 -0
  52. package/dist/ts/implementation/graphics/brushes/pdf-solid-brush.ts +107 -0
  53. package/dist/ts/implementation/graphics/brushes/pdf-tiling-brush.ts +304 -0
  54. package/dist/ts/implementation/graphics/constants.ts +31 -0
  55. package/dist/ts/implementation/graphics/enum.ts +413 -0
  56. package/dist/ts/implementation/graphics/figures/arc.ts +133 -0
  57. package/dist/ts/implementation/graphics/figures/base/draw-element.ts +59 -0
  58. package/dist/ts/implementation/graphics/figures/base/element-layouter.ts +260 -0
  59. package/dist/ts/implementation/graphics/figures/base/fill-element.ts +72 -0
  60. package/dist/ts/implementation/graphics/figures/base/graphics-element.ts +34 -0
  61. package/dist/ts/implementation/graphics/figures/base/pdf-shape-element.ts +69 -0
  62. package/dist/ts/implementation/graphics/figures/base/shape-layouter.ts +276 -0
  63. package/dist/ts/implementation/graphics/figures/base/text-layouter.ts +205 -0
  64. package/dist/ts/implementation/graphics/figures/ellipse-part.ts +76 -0
  65. package/dist/ts/implementation/graphics/figures/enum.ts +80 -0
  66. package/dist/ts/implementation/graphics/figures/layout-element.ts +132 -0
  67. package/dist/ts/implementation/graphics/figures/path.ts +646 -0
  68. package/dist/ts/implementation/graphics/figures/pdf-template.ts +205 -0
  69. package/dist/ts/implementation/graphics/figures/rectangle-area.ts +108 -0
  70. package/dist/ts/implementation/graphics/figures/text-element.ts +445 -0
  71. package/dist/ts/implementation/graphics/fonts/enum.ts +385 -0
  72. package/dist/ts/implementation/graphics/fonts/pdf-font-metrics.ts +248 -0
  73. package/dist/ts/implementation/graphics/fonts/pdf-font.ts +316 -0
  74. package/dist/ts/implementation/graphics/fonts/pdf-standard-font-metrics-factory.ts +606 -0
  75. package/dist/ts/implementation/graphics/fonts/pdf-standard-font.ts +243 -0
  76. package/dist/ts/implementation/graphics/fonts/pdf-string-format.ts +474 -0
  77. package/dist/ts/implementation/graphics/fonts/pdf-true-type-font.ts +165 -0
  78. package/dist/ts/implementation/graphics/fonts/rtl/rtl-bidirectional.ts +958 -0
  79. package/dist/ts/implementation/graphics/fonts/rtl/rtl-text-shape.ts +374 -0
  80. package/dist/ts/implementation/graphics/fonts/rtl-renderer.ts +255 -0
  81. package/dist/ts/implementation/graphics/fonts/string-layouter.ts +617 -0
  82. package/dist/ts/implementation/graphics/fonts/string-tokenizer.ts +275 -0
  83. package/dist/ts/implementation/graphics/fonts/ttf-OS2-Table.ts +206 -0
  84. package/dist/ts/implementation/graphics/fonts/ttf-apple-cmap-sub-table.ts +18 -0
  85. package/dist/ts/implementation/graphics/fonts/ttf-cmap-sub-table.ts +18 -0
  86. package/dist/ts/implementation/graphics/fonts/ttf-cmap-table.ts +14 -0
  87. package/dist/ts/implementation/graphics/fonts/ttf-glyph-header.ts +26 -0
  88. package/dist/ts/implementation/graphics/fonts/ttf-glyph-info.ts +35 -0
  89. package/dist/ts/implementation/graphics/fonts/ttf-head-table.ts +94 -0
  90. package/dist/ts/implementation/graphics/fonts/ttf-horizontal-header-table.ts +56 -0
  91. package/dist/ts/implementation/graphics/fonts/ttf-loca-table.ts +10 -0
  92. package/dist/ts/implementation/graphics/fonts/ttf-long-hor-metric.ts +14 -0
  93. package/dist/ts/implementation/graphics/fonts/ttf-metrics.ts +106 -0
  94. package/dist/ts/implementation/graphics/fonts/ttf-microsoft-cmap-sub-table.ts +58 -0
  95. package/dist/ts/implementation/graphics/fonts/ttf-name-record.ts +33 -0
  96. package/dist/ts/implementation/graphics/fonts/ttf-name-table.ts +22 -0
  97. package/dist/ts/implementation/graphics/fonts/ttf-post-table.ts +42 -0
  98. package/dist/ts/implementation/graphics/fonts/ttf-reader.ts +1254 -0
  99. package/dist/ts/implementation/graphics/fonts/ttf-table-info.ts +26 -0
  100. package/dist/ts/implementation/graphics/fonts/ttf-trimmed-cmap-sub-table.ts +26 -0
  101. package/dist/ts/implementation/graphics/fonts/unicode-true-type-font.ts +577 -0
  102. package/dist/ts/implementation/graphics/images/byte-array.ts +137 -0
  103. package/dist/ts/implementation/graphics/images/image-decoder.ts +439 -0
  104. package/dist/ts/implementation/graphics/images/pdf-bitmap.ts +110 -0
  105. package/dist/ts/implementation/graphics/images/pdf-image.ts +132 -0
  106. package/dist/ts/implementation/graphics/pdf-color.ts +478 -0
  107. package/dist/ts/implementation/graphics/pdf-graphics.ts +2429 -0
  108. package/dist/ts/implementation/graphics/pdf-margins.ts +124 -0
  109. package/dist/ts/implementation/graphics/pdf-pen.ts +370 -0
  110. package/dist/ts/implementation/graphics/pdf-resources.ts +300 -0
  111. package/dist/ts/implementation/graphics/pdf-transformation-matrix.ts +246 -0
  112. package/dist/ts/implementation/graphics/pdf-transparency.ts +93 -0
  113. package/dist/ts/implementation/graphics/unit-convertor.ts +96 -0
  114. package/dist/ts/implementation/input-output/big-endian-writer.ts +121 -0
  115. package/dist/ts/implementation/input-output/cross-table.ts +21 -0
  116. package/dist/ts/implementation/input-output/enum.ts +16 -0
  117. package/dist/ts/implementation/input-output/pdf-cross-table.ts +524 -0
  118. package/dist/ts/implementation/input-output/pdf-dictionary-properties.ts +571 -0
  119. package/dist/ts/implementation/input-output/pdf-main-object-collection.ts +194 -0
  120. package/dist/ts/implementation/input-output/pdf-operators.ts +363 -0
  121. package/dist/ts/implementation/input-output/pdf-stream-writer.ts +681 -0
  122. package/dist/ts/implementation/input-output/pdf-writer.ts +88 -0
  123. package/dist/ts/implementation/pages/enum.ts +201 -0
  124. package/dist/ts/implementation/pages/page-added-event-arguments.ts +39 -0
  125. package/dist/ts/implementation/pages/pdf-document-page-collection.ts +180 -0
  126. package/dist/ts/implementation/pages/pdf-page-base.ts +181 -0
  127. package/dist/ts/implementation/pages/pdf-page-layer-collection.ts +348 -0
  128. package/dist/ts/implementation/pages/pdf-page-layer.ts +271 -0
  129. package/dist/ts/implementation/pages/pdf-page-settings.ts +192 -0
  130. package/dist/ts/implementation/pages/pdf-page-size.ts +162 -0
  131. package/dist/ts/implementation/pages/pdf-page-template-element.ts +663 -0
  132. package/dist/ts/implementation/pages/pdf-page.ts +235 -0
  133. package/dist/ts/implementation/pages/pdf-section-collection.ts +187 -0
  134. package/dist/ts/implementation/pages/pdf-section-page-collection.ts +61 -0
  135. package/dist/ts/implementation/pages/pdf-section-templates.ts +96 -0
  136. package/dist/ts/implementation/pages/pdf-section.ts +644 -0
  137. package/dist/ts/implementation/primitives/pdf-array.ts +386 -0
  138. package/dist/ts/implementation/primitives/pdf-boolean.ts +119 -0
  139. package/dist/ts/implementation/primitives/pdf-dictionary.ts +513 -0
  140. package/dist/ts/implementation/primitives/pdf-name.ts +218 -0
  141. package/dist/ts/implementation/primitives/pdf-number.ts +165 -0
  142. package/dist/ts/implementation/primitives/pdf-reference.ts +430 -0
  143. package/dist/ts/implementation/primitives/pdf-stream.ts +306 -0
  144. package/dist/ts/implementation/primitives/pdf-string.ts +397 -0
  145. package/dist/ts/implementation/structured-elements/grid/layout/grid-layouter.ts +2027 -0
  146. package/dist/ts/implementation/structured-elements/grid/pdf-grid-cell.ts +1193 -0
  147. package/dist/ts/implementation/structured-elements/grid/pdf-grid-column.ts +206 -0
  148. package/dist/ts/implementation/structured-elements/grid/pdf-grid-row.ts +470 -0
  149. package/dist/ts/implementation/structured-elements/grid/pdf-grid.ts +853 -0
  150. package/dist/ts/implementation/structured-elements/grid/styles/pdf-borders.ts +240 -0
  151. package/dist/ts/implementation/structured-elements/grid/styles/style.ts +424 -0
  152. package/dist/ts/implementation/structured-elements/tables/light-tables/enum.ts +16 -0
  153. package/dist/ts/interfaces/i-pdf-cache.ts +23 -0
  154. package/dist/ts/interfaces/i-pdf-changable.ts +17 -0
  155. package/dist/ts/interfaces/i-pdf-clonable.ts +12 -0
  156. package/dist/ts/interfaces/i-pdf-primitives.ts +45 -0
  157. package/dist/ts/interfaces/i-pdf-true-type-font.ts +48 -0
  158. package/dist/ts/interfaces/i-pdf-wrapper.ts +13 -0
  159. package/dist/ts/interfaces/i-pdf-writer.ts +29 -0
  160. package/package.json +7 -7
  161. package/src/implementation/document/pdf-document-base.js +1 -2
@@ -0,0 +1,306 @@
1
+ /**
2
+ * PdfStream.ts class for EJ2-PDF
3
+ */
4
+ import { IPdfWriter } from './../../interfaces/i-pdf-writer';
5
+ import { PdfDictionary } from './pdf-dictionary';
6
+ import { PdfNumber } from './pdf-number';
7
+ import { Operators } from './../input-output/pdf-operators';
8
+ import { PdfName } from './pdf-name';
9
+ import { PdfArray } from './pdf-array';
10
+ import { PdfReferenceHolder } from './pdf-reference';
11
+ import { IPdfPrimitive } from './../../interfaces/i-pdf-primitives';
12
+ import { CompressedStreamWriter } from '@syncfusion/ej2-compression';
13
+ import { UnicodeTrueTypeFont } from './../graphics/fonts/unicode-true-type-font';
14
+ /**
15
+ * `PdfStream` class is used to perform stream related primitive operations.
16
+ * @private
17
+ */
18
+ export class PdfStream extends PdfDictionary {
19
+ //Constants
20
+ /**
21
+ * @hidden
22
+ * @private
23
+ */
24
+ private readonly dicPrefix : string = 'stream';
25
+ /**
26
+ * @hidden
27
+ * @private
28
+ */
29
+ private readonly dicSuffix : string = 'endstream';
30
+ //Fields
31
+ /**
32
+ * @hidden
33
+ * @private
34
+ */
35
+ private dataStream2 : string[];
36
+ /**
37
+ * @hidden
38
+ * @private
39
+ */
40
+ private blockEncryption2 : boolean;
41
+ /**
42
+ * @hidden
43
+ * @private
44
+ */
45
+ private bDecrypted2 : boolean;
46
+ /**
47
+ * @hidden
48
+ * @private
49
+ */
50
+ private bCompress2 : boolean;
51
+ /**
52
+ * @hidden
53
+ * @private
54
+ */
55
+ private bEncrypted2 : boolean;
56
+ /**
57
+ * Internal variable to hold `cloned object`.
58
+ * @private
59
+ */
60
+ private clonedObject2 : PdfStream = null;
61
+ /**
62
+ * @hidden
63
+ * @private
64
+ */
65
+ private bCompress : boolean = true;
66
+ /**
67
+ * Event. Raise `before the object saves`.
68
+ * @private
69
+ */
70
+ public cmapBeginSave : SaveCmapEventHandler;
71
+ /**
72
+ * Event. Raise `before the object saves`.
73
+ * @private
74
+ */
75
+ public fontProgramBeginSave : SaveFontProgramEventHandler;
76
+ //Constructors
77
+ /**
78
+ * Initialize an instance for `PdfStream` class.
79
+ * @private
80
+ */
81
+ public constructor()
82
+ /**
83
+ * Initialize an instance for `PdfStream` class.
84
+ * @private
85
+ */
86
+ public constructor(dictionary : PdfDictionary, data : string[])
87
+ public constructor(dictionary? : PdfDictionary, data? : string[]) {
88
+ super(dictionary);
89
+ if (typeof dictionary !== 'undefined' || typeof data !== 'undefined') {
90
+ this.dataStream2 = [];
91
+ this.dataStream2 = data;
92
+ this.bCompress2 = false;
93
+ } else {
94
+ this.dataStream2 = [];
95
+ this.bCompress2 = true;
96
+ //Pending
97
+ }
98
+ }
99
+ /**
100
+ * Gets the `internal` stream.
101
+ * @private
102
+ */
103
+ public get internalStream() : string[] {
104
+ return this.dataStream2;
105
+ }
106
+ public set internalStream(value : string[]) {
107
+ this.dataStream2 = [];
108
+ this.dataStream2 = value;
109
+ this.modify();
110
+ }
111
+ /**
112
+ * Gets or sets `compression` flag.
113
+ * @private
114
+ */
115
+ public get compress() : boolean {
116
+ return this.bCompress;
117
+ }
118
+ public set compress(value : boolean) {
119
+ this.bCompress = value;
120
+ this.modify();
121
+ }
122
+ /**
123
+ * Gets or sets the `data`.
124
+ * @private
125
+ */
126
+ public get data() : string[] {
127
+ return this.dataStream2;
128
+ }
129
+ public set data(value : string[]) {
130
+ this.dataStream2 = [];
131
+ this.dataStream2 = value;
132
+ this.modify();
133
+ }
134
+ /**
135
+ * `Clear` the internal stream.
136
+ * @private
137
+ */
138
+ public clearStream() : void {
139
+ this.internalStream = [];
140
+ if (this.items.containsKey(this.dictionaryProperties.filter)) {
141
+ this.remove(this.dictionaryProperties.filter);
142
+ }
143
+ this.bCompress = true;
144
+ this.modify();
145
+ }
146
+ /**
147
+ * `Writes` the specified string.
148
+ * @private
149
+ */
150
+ public write(text : string) : void {
151
+ if (text == null) {
152
+ throw new Error('ArgumentNullException:text');
153
+ }
154
+ if (text.length <= 0) {
155
+ throw new Error('ArgumentException: Can not write an empty string, text');
156
+ }
157
+ this.dataStream2.push(text);
158
+ this.modify();
159
+ }
160
+ /**
161
+ * `Writes` the specified bytes.
162
+ * @private
163
+ */
164
+ public writeBytes(data : number[]) : void {
165
+ if (data === null) {
166
+ throw new Error('ArgumentNullException:data');
167
+ }
168
+ if (data.length <= 0) {
169
+ throw new Error('ArgumentException: Can not write an empty bytes, data');
170
+ }
171
+ let text : string = '';
172
+ for (let i : number = 0; i < data.length; i++) {
173
+ text += String.fromCharCode(data[i]);
174
+ }
175
+ this.dataStream2.push(text);
176
+ this.modify();
177
+ }
178
+ /**
179
+ * Raises event `Cmap BeginSave`.
180
+ * @private
181
+ */
182
+ public onCmapBeginSave() : void {
183
+ (this.cmapBeginSave as SaveCmapEventHandler).sender.cmapBeginSave();
184
+ }
185
+ /**
186
+ * Raises event `Font Program BeginSave`.
187
+ * @private
188
+ */
189
+ protected onFontProgramBeginSave() : void {
190
+ (this.fontProgramBeginSave as SaveFontProgramEventHandler).sender.fontProgramBeginSave();
191
+ }
192
+ /**
193
+ * `Compresses the content` if it's required.
194
+ * @private
195
+ */
196
+ private compressContent(data : string, writer : IPdfWriter) : string {
197
+ if (this.bCompress) {
198
+ let byteArray : number[] = [];
199
+ for (let i : number = 0; i < data.length; i++) {
200
+ byteArray.push(data.charCodeAt(i));
201
+ }
202
+ let dataArray : Uint8Array = new Uint8Array(byteArray);
203
+ let sw : CompressedStreamWriter = new CompressedStreamWriter();
204
+ // data = 'Hello World!!!';
205
+ sw.write(dataArray, 0, dataArray.length);
206
+ sw.close();
207
+ data = sw.getCompressedString;
208
+ this.addFilter(this.dictionaryProperties.flatedecode);
209
+ }
210
+ return data;
211
+ }
212
+ /**
213
+ * `Adds a filter` to the filter array.
214
+ * @private
215
+ */
216
+ public addFilter(filterName : string) : void {
217
+ let obj : IPdfPrimitive = this.items.getValue(this.dictionaryProperties.filter);
218
+ if (obj instanceof PdfReferenceHolder) {
219
+ let rh : PdfReferenceHolder = obj as PdfReferenceHolder;
220
+ obj = rh.object;
221
+ }
222
+ let array : PdfArray = obj as PdfArray;
223
+ let name : PdfName = obj as PdfName;
224
+ if (name != null) {
225
+ array = new PdfArray();
226
+ array.insert(0, name);
227
+ this.items.setValue(this.dictionaryProperties.filter, array);
228
+ }
229
+ name = new PdfName(filterName);
230
+ if (array == null) {
231
+ this.items.setValue(this.dictionaryProperties.filter, name);
232
+ } else {
233
+ array.insert(0, name);
234
+ }
235
+ }
236
+ /**
237
+ * `Saves` the object using the specified writer.
238
+ * @private
239
+ */
240
+ public save(writer : IPdfWriter) : void {
241
+ if (typeof this.cmapBeginSave !== 'undefined') {
242
+ this.onCmapBeginSave();
243
+ }
244
+ if (typeof this.fontProgramBeginSave !== 'undefined') {
245
+ this.onFontProgramBeginSave();
246
+ }
247
+ let data : string = '';
248
+ for (let i : number = 0; i < this.data.length; i++) {
249
+ data = data + this.data[i];
250
+ }
251
+ if (data.length > 1 && !this.isResource) {
252
+ data = 'q\r\n' + data + 'Q\r\n';
253
+ }
254
+ data = this.compressContent(data, writer);
255
+ let length : number = data.length;
256
+ this.items.setValue(this.dictionaryProperties.length, new PdfNumber(length));
257
+ super.save(writer, false);
258
+ writer.write(this.dicPrefix);
259
+ writer.write(Operators.newLine);
260
+ if (data.length > 0) {
261
+ writer.write(data);
262
+ }
263
+ writer.write(Operators.newLine);
264
+ writer.write(this.dicSuffix);
265
+ writer.write(Operators.newLine);
266
+ }
267
+ /**
268
+ * Converts `bytes to string`.
269
+ * @private
270
+ */
271
+ public static bytesToString(byteArray : number[]) : string {
272
+ let output : string = '';
273
+ for (let i : number = 0; i < byteArray.length; i++ ) {
274
+ output = output + String.fromCharCode(byteArray[i]);
275
+ }
276
+ return output;
277
+ }
278
+ }
279
+ export class SaveCmapEventHandler {
280
+ /**
281
+ * @hidden
282
+ * @private
283
+ */
284
+ public sender : UnicodeTrueTypeFont;
285
+ /**
286
+ * New instance for `save section collection event handler` class.
287
+ * @private
288
+ */
289
+ public constructor(sender : UnicodeTrueTypeFont) {
290
+ this.sender = sender;
291
+ }
292
+ }
293
+ export class SaveFontProgramEventHandler {
294
+ /**
295
+ * @hidden
296
+ * @private
297
+ */
298
+ public sender : UnicodeTrueTypeFont;
299
+ /**
300
+ * New instance for `save section collection event handler` class.
301
+ * @private
302
+ */
303
+ public constructor(sender : UnicodeTrueTypeFont) {
304
+ this.sender = sender;
305
+ }
306
+ }
@@ -0,0 +1,397 @@
1
+ /**
2
+ * PdfString.ts class for EJ2-PDF
3
+ */
4
+ import { IPdfPrimitive } from './../../interfaces/i-pdf-primitives';
5
+ import { IPdfWriter } from './../../interfaces/i-pdf-writer';
6
+ import { ObjectStatus } from './../input-output/enum';
7
+ import { PdfCrossTable } from './../input-output/pdf-cross-table';
8
+ /**
9
+ * `PdfString` class is used to perform string related primitive operations.
10
+ * @private
11
+ */
12
+ export namespace InternalEnum {
13
+ //Internals
14
+ /**
15
+ * public Enum for `ForceEncoding`.
16
+ * @private
17
+ */
18
+ export enum ForceEncoding {
19
+ /**
20
+ * Specifies the type of `None`.
21
+ * @private
22
+ */
23
+ None,
24
+ /**
25
+ * Specifies the type of `Ascii`.
26
+ * @private
27
+ */
28
+ Ascii,
29
+ /**
30
+ * Specifies the type of `Unicode`.
31
+ * @private
32
+ */
33
+ Unicode
34
+ }
35
+ /**
36
+ * public Enum for `SourceType`.
37
+ * @private
38
+ */
39
+ enum SourceType {
40
+ /**
41
+ * Specifies the type of `StringValue`.
42
+ * @private
43
+ */
44
+ StringValue,
45
+ /**
46
+ * Specifies the type of `ByteBuffer`.
47
+ * @private
48
+ */
49
+ ByteBuffer,
50
+ }
51
+ }
52
+ export class PdfString implements IPdfPrimitive {
53
+ //constants = ;
54
+ /**
55
+ * `General markers` for string.
56
+ * @private
57
+ */
58
+ public static readonly stringMark : string = '()';
59
+ /**
60
+ * `Hex markers` for string.
61
+ * @private
62
+ */
63
+ public static readonly hexStringMark : string = '<>';
64
+ /**
65
+ * Format of password data.
66
+ * @private
67
+ */
68
+ private static readonly hexFormatPattern : string = '{0:X2}';
69
+ //Fields
70
+ /**
71
+ * Value of the object.
72
+ * @private
73
+ */
74
+ private stringValue : string;
75
+ /**
76
+ * The byte data of the string.
77
+ * @private
78
+ */
79
+ private data : number[];
80
+ /**
81
+ * Value indicating whether the string was converted to hex.
82
+ * @default false
83
+ * @private
84
+ */
85
+ private bHex : boolean = false;
86
+ /**
87
+ * Shows the type of object `status` whether it is object registered or other status;
88
+ * @private
89
+ */
90
+ private status1 : ObjectStatus;
91
+ /**
92
+ * Indicates if the object is currently in `saving state or not`.
93
+ * @private
94
+ */
95
+ private isSaving1 : boolean;
96
+ /**
97
+ * Internal variable to store the `position`.
98
+ * @default -1
99
+ * @private
100
+ */
101
+ private position1 : number = -1;
102
+ /**
103
+ * Internal variable to hold `PdfCrossTable` reference.
104
+ * @private
105
+ */
106
+ private crossTable : PdfCrossTable;
107
+ /**
108
+ * Internal variable to hold `cloned object`.
109
+ * @default null
110
+ * @private
111
+ */
112
+ private clonedObject1 : PdfString = null;
113
+ /**
114
+ * Indicates whether to check if the value `has unicode characters`.
115
+ * @private
116
+ */
117
+ private bConverted : boolean;
118
+ /**
119
+ * Indicates whether we should convert `data to Unicode`.
120
+ * @private
121
+ */
122
+ private bForceEncoding : InternalEnum.ForceEncoding;
123
+ /**
124
+ * `Shows` if the data of the stream was decrypted.
125
+ * @default false
126
+ * @private
127
+ */
128
+ private bDecrypted : boolean = false;
129
+ /**
130
+ * Holds the `index` number of the object.
131
+ * @private
132
+ */
133
+ private index1 : number;
134
+ /**
135
+ * Shows if the data of the stream `was decrypted`.
136
+ * @default false
137
+ * @private
138
+ */
139
+ private isParentDecrypted : boolean = false;
140
+ /**
141
+ * Gets a value indicating whether the object is `packed or not`.
142
+ * @default false
143
+ * @private
144
+ */
145
+ private isPacked : boolean = false;
146
+ /**
147
+ * @hidden
148
+ * @private
149
+ */
150
+ public isFormField : boolean = false;
151
+ /**
152
+ * @hidden
153
+ * @private
154
+ */
155
+ public isColorSpace : boolean = false;
156
+ /**
157
+ * @hidden
158
+ * @private
159
+ */
160
+ public isHexString : boolean = true;
161
+ /**
162
+ * @hidden
163
+ * @private
164
+ */
165
+ private encodedBytes : number[];
166
+ //constructor
167
+ /**
168
+ * Initializes a new instance of the `PdfString` class.
169
+ * @private
170
+ */
171
+ public constructor()
172
+ /**
173
+ * Initializes a new instance of the `PdfString` class.
174
+ * @private
175
+ */
176
+ public constructor(value : string)
177
+ public constructor(value? : string) {
178
+ if (typeof value === 'undefined') {
179
+ this.bHex = false;
180
+ } else {
181
+ if (!(value.length > 0 && value[0] === '0xfeff')) {
182
+ this.stringValue = value;
183
+ this.data = [];
184
+ for (let i : number = 0; i < value.length; ++i) {
185
+ this.data.push(value.charCodeAt(i));
186
+ }
187
+ }
188
+ }
189
+ }
190
+ //Property
191
+ /**
192
+ * Gets a value indicating whether string is in `hex`.
193
+ * @private
194
+ */
195
+ public get hex() : boolean {
196
+ return this.bHex;
197
+ }
198
+ /**
199
+ * Gets or sets string `value` of the object.
200
+ * @private
201
+ */
202
+ public get value() : string {
203
+ return this.stringValue;
204
+ }
205
+ public set value(value : string) {
206
+ this.stringValue = value;
207
+ this.data = null;
208
+ }
209
+ /**
210
+ * Gets or sets the `Status` of the specified object.
211
+ * @private
212
+ */
213
+ public get status() : ObjectStatus {
214
+ return this.status1;
215
+ }
216
+ public set status(value : ObjectStatus) {
217
+ this.status1 = value;
218
+ }
219
+ /**
220
+ * Gets or sets a value indicating whether this document `is saving` or not.
221
+ * @private
222
+ */
223
+ public get isSaving() : boolean {
224
+ return this.isSaving1;
225
+ }
226
+ public set isSaving(value : boolean) {
227
+ this.isSaving1 = value;
228
+ }
229
+ /**
230
+ * Gets or sets the `index` value of the specified object.
231
+ * @private
232
+ */
233
+ public get objectCollectionIndex() : number {
234
+ return this.index1;
235
+ }
236
+ public set objectCollectionIndex(value : number) {
237
+ this.index1 = value;
238
+ }
239
+ /**
240
+ * Returns `cloned object`.
241
+ * @private
242
+ */
243
+ public get clonedObject() : IPdfPrimitive {
244
+ return this.clonedObject1;
245
+ }
246
+ /**
247
+ * Gets or sets the `position` of the object.
248
+ * @private
249
+ */
250
+ public get position() : number {
251
+ return this.position1;
252
+ }
253
+ public set position(value : number) {
254
+ this.position1 = value;
255
+ }
256
+ /**
257
+ * Returns `PdfCrossTable` associated with the object.
258
+ * @private
259
+ */
260
+ public get CrossTable() : PdfCrossTable {
261
+ return this.crossTable;
262
+ }
263
+ /**
264
+ * Gets a value indicating whether to check if the value has unicode characters.
265
+ * @private
266
+ */
267
+ public get converted() : boolean {
268
+ return this.bConverted;
269
+ }
270
+ /**
271
+ * sets a value indicating whether to check if the value has unicode characters.
272
+ * @private
273
+ */
274
+ public set converted(value : boolean) {
275
+ this.bConverted = value;
276
+ }
277
+ /**
278
+ * Gets value indicating whether we should convert data to Unicode.
279
+ */
280
+ public get encode() : InternalEnum.ForceEncoding {
281
+ return this.bForceEncoding;
282
+ }
283
+ public set encode(value : InternalEnum.ForceEncoding) {
284
+ this.bForceEncoding = value;
285
+ }
286
+ //Methods
287
+ /**
288
+ * Converts `bytes to string using hex format` for representing string.
289
+ * @private
290
+ */
291
+ public static bytesToHex(bytes : number[]) : string {
292
+ if (bytes == null) {
293
+ return '';
294
+ }
295
+ let builder : string = '';
296
+ return builder;
297
+ }
298
+ /**
299
+ * `Saves` the object using the specified writer.
300
+ * @private
301
+ */
302
+ public save(writer : IPdfWriter) : void {
303
+ if (writer === null) {
304
+ throw new Error('ArgumentNullException : writer');
305
+ }
306
+ if (this.encode !== undefined && this.encode === InternalEnum.ForceEncoding.Ascii) {
307
+ writer.write(this.pdfEncode());
308
+ } else {
309
+ writer.write(PdfString.stringMark[0] + this.value + PdfString.stringMark[1]);
310
+ }
311
+ }
312
+ public pdfEncode() : string {
313
+ let result : string = '';
314
+ if (this.encode !== undefined && this.encode === InternalEnum.ForceEncoding.Ascii) {
315
+ let data : number[] = this.escapeSymbols(this.value);
316
+ for (let i : number = 0; i < data.length; i++) {
317
+ result += String.fromCharCode(data[i]);
318
+ }
319
+ result = PdfString.stringMark[0] + result + PdfString.stringMark[1];
320
+ } else {
321
+ result = this.value;
322
+ }
323
+ return result;
324
+ }
325
+ private escapeSymbols(value : string) : number[] {
326
+ let data : number[] = [];
327
+ for (let i : number = 0; i < value.length; i++) {
328
+ let currentData : number = value.charCodeAt(i);
329
+ switch (currentData) {
330
+ case 40:
331
+ case 41:
332
+ data.push(92);
333
+ data.push(currentData);
334
+ break;
335
+ case 13:
336
+ data.push(92);
337
+ data.push(114);
338
+ break;
339
+ case 92:
340
+ data.push(92);
341
+ data.push(currentData);
342
+ break;
343
+
344
+ default:
345
+ data.push(currentData);
346
+ break;
347
+ }
348
+ }
349
+ return data;
350
+ }
351
+ /**
352
+ * Creates a `copy of PdfString`.
353
+ * @private
354
+ */
355
+ public clone(crossTable : PdfCrossTable) : IPdfPrimitive {
356
+ if (this.clonedObject1 !== null && this.clonedObject1.CrossTable === crossTable) {
357
+ return this.clonedObject1;
358
+ } else {
359
+ this.clonedObject1 = null;
360
+ }
361
+ let newString : PdfString = new PdfString(this.stringValue);
362
+ newString.bHex = this.bHex;
363
+ newString.crossTable = crossTable;
364
+ newString.isColorSpace = this.isColorSpace;
365
+ this.clonedObject1 = newString;
366
+ return newString;
367
+ }
368
+ /**
369
+ * Converts string to array of unicode symbols.
370
+ */
371
+ public static toUnicodeArray(value : string, bAddPrefix : boolean) : number[] {
372
+ if (value == null) {
373
+ throw new Error('Argument Null Exception : value');
374
+ }
375
+ let startIndex : number = 0;
376
+ let output : number[] = [];
377
+ for (let i : number = 0; i < value.length; i++) {
378
+ let code : number = value.charCodeAt(i);
379
+ output.push(code / 256 >>> 0);
380
+ output.push(code & 0xff);
381
+ }
382
+ return output;
383
+ }
384
+ /**
385
+ * Converts byte data to string.
386
+ */
387
+ public static byteToString(data : number[]) : string {
388
+ if (data == null) {
389
+ throw new Error('Argument Null Exception : stream');
390
+ }
391
+ let result : string = '';
392
+ for (let i : number = 0; i < data.length; ++i) {
393
+ result += String.fromCharCode(data[i]);
394
+ }
395
+ return result;
396
+ }
397
+ }