@syncfusion/ej2-pdf-export 23.2.4 → 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.
- package/CHANGELOG.md +0 -18
- package/dist/ej2-pdf-export.min.js +2 -2
- package/dist/ej2-pdf-export.umd.min.js +2 -2
- package/dist/ej2-pdf-export.umd.min.js.map +1 -1
- package/dist/es6/ej2-pdf-export.es2015.js +6 -1
- package/dist/es6/ej2-pdf-export.es2015.js.map +1 -1
- package/dist/es6/ej2-pdf-export.es5.js +6 -1
- package/dist/es6/ej2-pdf-export.es5.js.map +1 -1
- package/dist/global/ej2-pdf-export.min.js +2 -2
- package/dist/global/ej2-pdf-export.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/dist/ts/implementation/actions/action.ts +76 -0
- package/dist/ts/implementation/actions/uri-action.ts +52 -0
- package/dist/ts/implementation/annotations/action-link-annotation.ts +43 -0
- package/dist/ts/implementation/annotations/annotation-collection.ts +159 -0
- package/dist/ts/implementation/annotations/annotation.ts +241 -0
- package/dist/ts/implementation/annotations/document-link-annotation.ts +118 -0
- package/dist/ts/implementation/annotations/link-annotation.ts +32 -0
- package/dist/ts/implementation/annotations/pdf-text-web-link.ts +265 -0
- package/dist/ts/implementation/annotations/uri-annotation.ts +86 -0
- package/dist/ts/implementation/collections/dictionary.ts +150 -0
- package/dist/ts/implementation/collections/object-object-pair/dictionary.ts +125 -0
- package/dist/ts/implementation/collections/utils.ts +38 -0
- package/dist/ts/implementation/document/automatic-fields/automatic-field-info-collection.ts +39 -0
- package/dist/ts/implementation/document/automatic-fields/automatic-field-info.ts +108 -0
- package/dist/ts/implementation/document/automatic-fields/automatic-field.ts +127 -0
- package/dist/ts/implementation/document/automatic-fields/composite-field.ts +76 -0
- package/dist/ts/implementation/document/automatic-fields/multiple-value-field.ts +37 -0
- package/dist/ts/implementation/document/automatic-fields/page-count-field.ts +75 -0
- package/dist/ts/implementation/document/automatic-fields/pdf-numbers-convertor.ts +157 -0
- package/dist/ts/implementation/document/automatic-fields/pdf-page-number-field.ts +82 -0
- package/dist/ts/implementation/document/automatic-fields/pdf-template-value-pair.ts +60 -0
- package/dist/ts/implementation/document/automatic-fields/single-value-field.ts +48 -0
- package/dist/ts/implementation/document/pdf-catalog.ts +65 -0
- package/dist/ts/implementation/document/pdf-document-base.ts +180 -0
- package/dist/ts/implementation/document/pdf-document-template.ts +310 -0
- package/dist/ts/implementation/document/pdf-document.ts +342 -0
- package/dist/ts/implementation/document/pdf-viewer-preferences.ts +578 -0
- package/dist/ts/implementation/drawing/pdf-drawing.ts +218 -0
- package/dist/ts/implementation/general/enum.ts +21 -0
- package/dist/ts/implementation/general/functions/pdf-function.ts +66 -0
- package/dist/ts/implementation/general/functions/pdf-sampled-function.ts +63 -0
- package/dist/ts/implementation/general/pdf-cache-collection.ts +97 -0
- package/dist/ts/implementation/general/pdf-collection.ts +41 -0
- package/dist/ts/implementation/general/pdf-destination.ts +170 -0
- package/dist/ts/implementation/graphics/brushes/enum.ts +237 -0
- package/dist/ts/implementation/graphics/brushes/pdf-blend.ts +294 -0
- package/dist/ts/implementation/graphics/brushes/pdf-brush.ts +68 -0
- package/dist/ts/implementation/graphics/brushes/pdf-brushes.ts +2438 -0
- package/dist/ts/implementation/graphics/brushes/pdf-color-blend.ts +295 -0
- package/dist/ts/implementation/graphics/brushes/pdf-gradient-brush.ts +311 -0
- package/dist/ts/implementation/graphics/brushes/pdf-linear-gradient-brush.ts +406 -0
- package/dist/ts/implementation/graphics/brushes/pdf-radial-gradient-brush.ts +290 -0
- package/dist/ts/implementation/graphics/brushes/pdf-solid-brush.ts +107 -0
- package/dist/ts/implementation/graphics/brushes/pdf-tiling-brush.ts +304 -0
- package/dist/ts/implementation/graphics/constants.ts +31 -0
- package/dist/ts/implementation/graphics/enum.ts +413 -0
- package/dist/ts/implementation/graphics/figures/arc.ts +133 -0
- package/dist/ts/implementation/graphics/figures/base/draw-element.ts +59 -0
- package/dist/ts/implementation/graphics/figures/base/element-layouter.ts +260 -0
- package/dist/ts/implementation/graphics/figures/base/fill-element.ts +72 -0
- package/dist/ts/implementation/graphics/figures/base/graphics-element.ts +34 -0
- package/dist/ts/implementation/graphics/figures/base/pdf-shape-element.ts +69 -0
- package/dist/ts/implementation/graphics/figures/base/shape-layouter.ts +276 -0
- package/dist/ts/implementation/graphics/figures/base/text-layouter.ts +205 -0
- package/dist/ts/implementation/graphics/figures/ellipse-part.ts +76 -0
- package/dist/ts/implementation/graphics/figures/enum.ts +80 -0
- package/dist/ts/implementation/graphics/figures/layout-element.ts +132 -0
- package/dist/ts/implementation/graphics/figures/path.ts +646 -0
- package/dist/ts/implementation/graphics/figures/pdf-template.ts +205 -0
- package/dist/ts/implementation/graphics/figures/rectangle-area.ts +108 -0
- package/dist/ts/implementation/graphics/figures/text-element.ts +445 -0
- package/dist/ts/implementation/graphics/fonts/enum.ts +385 -0
- package/dist/ts/implementation/graphics/fonts/pdf-font-metrics.ts +248 -0
- package/dist/ts/implementation/graphics/fonts/pdf-font.ts +316 -0
- package/dist/ts/implementation/graphics/fonts/pdf-standard-font-metrics-factory.ts +606 -0
- package/dist/ts/implementation/graphics/fonts/pdf-standard-font.ts +243 -0
- package/dist/ts/implementation/graphics/fonts/pdf-string-format.ts +474 -0
- package/dist/ts/implementation/graphics/fonts/pdf-true-type-font.ts +165 -0
- package/dist/ts/implementation/graphics/fonts/rtl/rtl-bidirectional.ts +958 -0
- package/dist/ts/implementation/graphics/fonts/rtl/rtl-text-shape.ts +374 -0
- package/dist/ts/implementation/graphics/fonts/rtl-renderer.ts +255 -0
- package/dist/ts/implementation/graphics/fonts/string-layouter.ts +617 -0
- package/dist/ts/implementation/graphics/fonts/string-tokenizer.ts +275 -0
- package/dist/ts/implementation/graphics/fonts/ttf-OS2-Table.ts +206 -0
- package/dist/ts/implementation/graphics/fonts/ttf-apple-cmap-sub-table.ts +18 -0
- package/dist/ts/implementation/graphics/fonts/ttf-cmap-sub-table.ts +18 -0
- package/dist/ts/implementation/graphics/fonts/ttf-cmap-table.ts +14 -0
- package/dist/ts/implementation/graphics/fonts/ttf-glyph-header.ts +26 -0
- package/dist/ts/implementation/graphics/fonts/ttf-glyph-info.ts +35 -0
- package/dist/ts/implementation/graphics/fonts/ttf-head-table.ts +94 -0
- package/dist/ts/implementation/graphics/fonts/ttf-horizontal-header-table.ts +56 -0
- package/dist/ts/implementation/graphics/fonts/ttf-loca-table.ts +10 -0
- package/dist/ts/implementation/graphics/fonts/ttf-long-hor-metric.ts +14 -0
- package/dist/ts/implementation/graphics/fonts/ttf-metrics.ts +106 -0
- package/dist/ts/implementation/graphics/fonts/ttf-microsoft-cmap-sub-table.ts +58 -0
- package/dist/ts/implementation/graphics/fonts/ttf-name-record.ts +33 -0
- package/dist/ts/implementation/graphics/fonts/ttf-name-table.ts +22 -0
- package/dist/ts/implementation/graphics/fonts/ttf-post-table.ts +42 -0
- package/dist/ts/implementation/graphics/fonts/ttf-reader.ts +1254 -0
- package/dist/ts/implementation/graphics/fonts/ttf-table-info.ts +26 -0
- package/dist/ts/implementation/graphics/fonts/ttf-trimmed-cmap-sub-table.ts +26 -0
- package/dist/ts/implementation/graphics/fonts/unicode-true-type-font.ts +577 -0
- package/dist/ts/implementation/graphics/images/byte-array.ts +137 -0
- package/dist/ts/implementation/graphics/images/image-decoder.ts +439 -0
- package/dist/ts/implementation/graphics/images/pdf-bitmap.ts +110 -0
- package/dist/ts/implementation/graphics/images/pdf-image.ts +132 -0
- package/dist/ts/implementation/graphics/pdf-color.ts +478 -0
- package/dist/ts/implementation/graphics/pdf-graphics.ts +2429 -0
- package/dist/ts/implementation/graphics/pdf-margins.ts +124 -0
- package/dist/ts/implementation/graphics/pdf-pen.ts +370 -0
- package/dist/ts/implementation/graphics/pdf-resources.ts +300 -0
- package/dist/ts/implementation/graphics/pdf-transformation-matrix.ts +246 -0
- package/dist/ts/implementation/graphics/pdf-transparency.ts +93 -0
- package/dist/ts/implementation/graphics/unit-convertor.ts +96 -0
- package/dist/ts/implementation/input-output/big-endian-writer.ts +121 -0
- package/dist/ts/implementation/input-output/cross-table.ts +21 -0
- package/dist/ts/implementation/input-output/enum.ts +16 -0
- package/dist/ts/implementation/input-output/pdf-cross-table.ts +524 -0
- package/dist/ts/implementation/input-output/pdf-dictionary-properties.ts +571 -0
- package/dist/ts/implementation/input-output/pdf-main-object-collection.ts +194 -0
- package/dist/ts/implementation/input-output/pdf-operators.ts +363 -0
- package/dist/ts/implementation/input-output/pdf-stream-writer.ts +681 -0
- package/dist/ts/implementation/input-output/pdf-writer.ts +88 -0
- package/dist/ts/implementation/pages/enum.ts +201 -0
- package/dist/ts/implementation/pages/page-added-event-arguments.ts +39 -0
- package/dist/ts/implementation/pages/pdf-document-page-collection.ts +180 -0
- package/dist/ts/implementation/pages/pdf-page-base.ts +181 -0
- package/dist/ts/implementation/pages/pdf-page-layer-collection.ts +348 -0
- package/dist/ts/implementation/pages/pdf-page-layer.ts +271 -0
- package/dist/ts/implementation/pages/pdf-page-settings.ts +192 -0
- package/dist/ts/implementation/pages/pdf-page-size.ts +162 -0
- package/dist/ts/implementation/pages/pdf-page-template-element.ts +663 -0
- package/dist/ts/implementation/pages/pdf-page.ts +235 -0
- package/dist/ts/implementation/pages/pdf-section-collection.ts +187 -0
- package/dist/ts/implementation/pages/pdf-section-page-collection.ts +61 -0
- package/dist/ts/implementation/pages/pdf-section-templates.ts +96 -0
- package/dist/ts/implementation/pages/pdf-section.ts +644 -0
- package/dist/ts/implementation/primitives/pdf-array.ts +386 -0
- package/dist/ts/implementation/primitives/pdf-boolean.ts +119 -0
- package/dist/ts/implementation/primitives/pdf-dictionary.ts +513 -0
- package/dist/ts/implementation/primitives/pdf-name.ts +218 -0
- package/dist/ts/implementation/primitives/pdf-number.ts +165 -0
- package/dist/ts/implementation/primitives/pdf-reference.ts +430 -0
- package/dist/ts/implementation/primitives/pdf-stream.ts +306 -0
- package/dist/ts/implementation/primitives/pdf-string.ts +397 -0
- package/dist/ts/implementation/structured-elements/grid/layout/grid-layouter.ts +2027 -0
- package/dist/ts/implementation/structured-elements/grid/pdf-grid-cell.ts +1193 -0
- package/dist/ts/implementation/structured-elements/grid/pdf-grid-column.ts +206 -0
- package/dist/ts/implementation/structured-elements/grid/pdf-grid-row.ts +470 -0
- package/dist/ts/implementation/structured-elements/grid/pdf-grid.ts +853 -0
- package/dist/ts/implementation/structured-elements/grid/styles/pdf-borders.ts +240 -0
- package/dist/ts/implementation/structured-elements/grid/styles/style.ts +424 -0
- package/dist/ts/implementation/structured-elements/tables/light-tables/enum.ts +16 -0
- package/dist/ts/interfaces/i-pdf-cache.ts +23 -0
- package/dist/ts/interfaces/i-pdf-changable.ts +17 -0
- package/dist/ts/interfaces/i-pdf-clonable.ts +12 -0
- package/dist/ts/interfaces/i-pdf-primitives.ts +45 -0
- package/dist/ts/interfaces/i-pdf-true-type-font.ts +48 -0
- package/dist/ts/interfaces/i-pdf-wrapper.ts +13 -0
- package/dist/ts/interfaces/i-pdf-writer.ts +29 -0
- package/package.json +7 -7
- package/src/implementation/document/pdf-document-base.js +1 -2
- package/src/implementation/graphics/pdf-graphics.js +7 -2
- package/src/implementation/graphics/pdf-transformation-matrix.d.ts +1 -1
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PdfResources.ts class for EJ2-PDF
|
|
3
|
+
*/
|
|
4
|
+
import { PdfDictionary } from './../primitives/pdf-dictionary';
|
|
5
|
+
import { Dictionary } from './../collections/dictionary';
|
|
6
|
+
import { TemporaryDictionary } from './../collections/object-object-pair/dictionary';
|
|
7
|
+
import { PdfName } from './../primitives/pdf-name';
|
|
8
|
+
import { PdfArray } from './../primitives/pdf-array';
|
|
9
|
+
import { IPdfPrimitive } from './../../interfaces/i-pdf-primitives';
|
|
10
|
+
import { IPdfWrapper } from './../../interfaces/i-pdf-wrapper';
|
|
11
|
+
import { PdfDocument } from './../document/pdf-document';
|
|
12
|
+
import { PdfReferenceHolder } from './../primitives/pdf-reference';
|
|
13
|
+
import { PdfCrossTable } from './../input-output/pdf-cross-table';
|
|
14
|
+
import { PdfFont } from './fonts/pdf-font';
|
|
15
|
+
import { PdfTemplate } from './figures/pdf-template';
|
|
16
|
+
import { PdfBrush } from './brushes/pdf-brush';
|
|
17
|
+
import { PdfTransparency } from './pdf-transparency';
|
|
18
|
+
import { PdfBitmap } from './../graphics/images/pdf-bitmap';
|
|
19
|
+
import { PdfImage } from './../graphics/images/pdf-image';
|
|
20
|
+
import { PdfStream } from './../primitives/pdf-stream';
|
|
21
|
+
import { PdfGradientBrush } from './brushes/pdf-gradient-brush';
|
|
22
|
+
import { PdfTilingBrush } from './brushes/pdf-tiling-brush';
|
|
23
|
+
/**
|
|
24
|
+
* `PdfResources` class used to set resource contents like font, image.
|
|
25
|
+
* @private
|
|
26
|
+
*/
|
|
27
|
+
export class PdfResources extends PdfDictionary {
|
|
28
|
+
//Fields
|
|
29
|
+
/**
|
|
30
|
+
* Dictionary for the `objects names`.
|
|
31
|
+
* @private
|
|
32
|
+
*/
|
|
33
|
+
private pdfNames : TemporaryDictionary<IPdfPrimitive, PdfName>;
|
|
34
|
+
/**
|
|
35
|
+
* Dictionary for the `properties names`.
|
|
36
|
+
* @private
|
|
37
|
+
*/
|
|
38
|
+
private properties : PdfDictionary = new PdfDictionary();
|
|
39
|
+
/**
|
|
40
|
+
* `Font name`.
|
|
41
|
+
* @private
|
|
42
|
+
*/
|
|
43
|
+
private fontName : string;
|
|
44
|
+
/**
|
|
45
|
+
* Stores instance of `parent document`.
|
|
46
|
+
* @private
|
|
47
|
+
*/
|
|
48
|
+
private pdfDocument : PdfDocument;
|
|
49
|
+
//Constructors
|
|
50
|
+
/**
|
|
51
|
+
* Initializes a new instance of the `PdfResources` class.
|
|
52
|
+
* @private
|
|
53
|
+
*/
|
|
54
|
+
public constructor()
|
|
55
|
+
/**
|
|
56
|
+
* Initializes a new instance of the `PdfResources` class.
|
|
57
|
+
* @private
|
|
58
|
+
*/
|
|
59
|
+
public constructor(baseDictionary : PdfDictionary)
|
|
60
|
+
public constructor(baseDictionary ?: PdfDictionary) {
|
|
61
|
+
super(baseDictionary);
|
|
62
|
+
}
|
|
63
|
+
//Properties
|
|
64
|
+
/**
|
|
65
|
+
* Gets the `font names`.
|
|
66
|
+
* @private
|
|
67
|
+
*/
|
|
68
|
+
private get names() : TemporaryDictionary<IPdfPrimitive, PdfName> {
|
|
69
|
+
return this.getNames();
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Get or set the `page document`.
|
|
73
|
+
* @private
|
|
74
|
+
*/
|
|
75
|
+
public get document() : PdfDocument {
|
|
76
|
+
return this.pdfDocument;
|
|
77
|
+
}
|
|
78
|
+
public set document(value : PdfDocument) {
|
|
79
|
+
this.pdfDocument = value;
|
|
80
|
+
}
|
|
81
|
+
//Public Methods
|
|
82
|
+
/**
|
|
83
|
+
* `Generates name` for the object and adds to the resource if the object is new.
|
|
84
|
+
* @private
|
|
85
|
+
*/
|
|
86
|
+
public getName(obj : IPdfWrapper) : PdfName {
|
|
87
|
+
let primitive : IPdfPrimitive = obj.element;
|
|
88
|
+
let name : PdfName = null;
|
|
89
|
+
if (this.names.containsKey(primitive)) {
|
|
90
|
+
name = this.names.getValue(primitive);
|
|
91
|
+
}
|
|
92
|
+
// Object is new.
|
|
93
|
+
if (name == null) {
|
|
94
|
+
let sName : string = this.generateName();
|
|
95
|
+
name = new PdfName(sName);
|
|
96
|
+
this.names.setValue(primitive, name);
|
|
97
|
+
if (obj instanceof PdfFont) {
|
|
98
|
+
this.add(obj, name);
|
|
99
|
+
} else if (obj instanceof PdfTemplate) {
|
|
100
|
+
this.add(obj, name);
|
|
101
|
+
} else if (obj instanceof PdfGradientBrush || obj instanceof PdfTilingBrush) {
|
|
102
|
+
this.add(obj, name);
|
|
103
|
+
} else if (obj instanceof PdfTransparency) {
|
|
104
|
+
this.add(obj, name);
|
|
105
|
+
} else if (obj instanceof PdfImage || obj instanceof PdfBitmap) {
|
|
106
|
+
this.add(obj, name);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return name;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Gets `resource names` to font dictionaries.
|
|
113
|
+
* @private
|
|
114
|
+
*/
|
|
115
|
+
public getNames() : TemporaryDictionary<IPdfPrimitive, PdfName> {
|
|
116
|
+
if (this.pdfNames == null) {
|
|
117
|
+
this.pdfNames = new TemporaryDictionary<IPdfPrimitive, PdfName>();
|
|
118
|
+
}
|
|
119
|
+
let fonts : IPdfPrimitive = this.items.getValue(this.dictionaryProperties.font);
|
|
120
|
+
if (fonts != null) {
|
|
121
|
+
let reference : PdfReferenceHolder = fonts as PdfReferenceHolder;
|
|
122
|
+
let dictionary : PdfDictionary = fonts as PdfDictionary;
|
|
123
|
+
dictionary = PdfCrossTable.dereference(fonts) as PdfDictionary;
|
|
124
|
+
}
|
|
125
|
+
return this.pdfNames;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Add `RequireProcedureSet` into procset array.
|
|
129
|
+
* @private
|
|
130
|
+
*/
|
|
131
|
+
public requireProcedureSet(procedureSetName : string) : void {
|
|
132
|
+
if (procedureSetName == null) {
|
|
133
|
+
throw new Error('ArgumentNullException:procedureSetName');
|
|
134
|
+
}
|
|
135
|
+
let procSets : PdfArray = this.items.getValue(this.dictionaryProperties.procset) as PdfArray;
|
|
136
|
+
if (procSets == null) {
|
|
137
|
+
procSets = new PdfArray();
|
|
138
|
+
this.items.setValue(this.dictionaryProperties.procset, procSets);
|
|
139
|
+
}
|
|
140
|
+
let name : PdfName = new PdfName(procedureSetName);
|
|
141
|
+
if (!procSets.contains(name)) {
|
|
142
|
+
procSets.add(name);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//Helper Methods
|
|
146
|
+
/**
|
|
147
|
+
* `Remove font` from array.
|
|
148
|
+
* @private
|
|
149
|
+
*/
|
|
150
|
+
public removeFont(name : string) : void {
|
|
151
|
+
let key : IPdfPrimitive = null;
|
|
152
|
+
let keys : IPdfPrimitive[] = this.pdfNames.keys();
|
|
153
|
+
for (let index : number = 0; index < this.pdfNames.size(); index++) {
|
|
154
|
+
if (this.pdfNames.getValue(keys[index]) === new PdfName(name)) {
|
|
155
|
+
key = keys[index];
|
|
156
|
+
break;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
if (key != null) {
|
|
160
|
+
this.pdfNames.remove(key);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Generates `Unique string name`.
|
|
165
|
+
* @private
|
|
166
|
+
*/
|
|
167
|
+
private generateName() : string {
|
|
168
|
+
let name : string = Guid.getNewGuidString();
|
|
169
|
+
return name;
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* `Adds object` to the resources.
|
|
173
|
+
* @private
|
|
174
|
+
*/
|
|
175
|
+
public add(font : PdfFont, name : PdfName) : void
|
|
176
|
+
/**
|
|
177
|
+
* `Adds object` to the resources.
|
|
178
|
+
* @private
|
|
179
|
+
*/
|
|
180
|
+
public add(template : PdfTemplate, name : PdfName) : void
|
|
181
|
+
/**
|
|
182
|
+
* `Adds object` to the resources.
|
|
183
|
+
* @private
|
|
184
|
+
*/
|
|
185
|
+
public add(brush : PdfBrush, name : PdfName) : void
|
|
186
|
+
/**
|
|
187
|
+
* `Adds object` to the resources.
|
|
188
|
+
* @private
|
|
189
|
+
*/
|
|
190
|
+
public add(transparency : PdfTransparency, name : PdfName) : void
|
|
191
|
+
/**
|
|
192
|
+
* `Adds object` to the resources.
|
|
193
|
+
* @private
|
|
194
|
+
*/
|
|
195
|
+
public add(image : PdfImage|PdfBitmap, name : PdfName) : void
|
|
196
|
+
public add(arg1 : PdfFont|PdfTemplate|PdfTransparency|PdfBrush|PdfImage|PdfBitmap, arg2 : PdfName) : void {
|
|
197
|
+
if (arg1 instanceof PdfFont) {
|
|
198
|
+
let dictionary : PdfDictionary = null;
|
|
199
|
+
let fonts : IPdfPrimitive = this.items.getValue(this.dictionaryProperties.font);
|
|
200
|
+
if (fonts != null) {
|
|
201
|
+
let reference : PdfReferenceHolder = fonts as PdfReferenceHolder;
|
|
202
|
+
dictionary = fonts as PdfDictionary;
|
|
203
|
+
dictionary = fonts as PdfDictionary;
|
|
204
|
+
} else {
|
|
205
|
+
dictionary = new PdfDictionary();
|
|
206
|
+
this.items.setValue(this.dictionaryProperties.font, dictionary);
|
|
207
|
+
}
|
|
208
|
+
dictionary.items.setValue(arg2.value, new PdfReferenceHolder((<IPdfWrapper>arg1).element));
|
|
209
|
+
} else if (arg1 instanceof PdfTemplate) {
|
|
210
|
+
let xobjects : PdfDictionary;
|
|
211
|
+
xobjects = this.items.getValue(this.dictionaryProperties.xObject) as PdfDictionary;
|
|
212
|
+
// Create fonts dictionary.
|
|
213
|
+
if (xobjects == null) {
|
|
214
|
+
xobjects = new PdfDictionary();
|
|
215
|
+
this.items.setValue(this.dictionaryProperties.xObject, xobjects);
|
|
216
|
+
}
|
|
217
|
+
xobjects.items.setValue(arg2.value, new PdfReferenceHolder((<IPdfWrapper>arg1).element));
|
|
218
|
+
} else if (arg1 instanceof PdfBrush) {
|
|
219
|
+
if (arg1 instanceof PdfGradientBrush || arg1 instanceof PdfTilingBrush) {
|
|
220
|
+
let savable : IPdfPrimitive = (arg1 as IPdfWrapper).element;
|
|
221
|
+
if (savable != null) {
|
|
222
|
+
let pattern : PdfDictionary = this.items.getValue(this.dictionaryProperties.pattern) as PdfDictionary;
|
|
223
|
+
// Create a new pattern dictionary.
|
|
224
|
+
if (pattern == null) {
|
|
225
|
+
pattern = new PdfDictionary();
|
|
226
|
+
this.items.setValue(this.dictionaryProperties.pattern, pattern);
|
|
227
|
+
}
|
|
228
|
+
pattern.items.setValue(arg2.value, new PdfReferenceHolder(savable));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
} else if (arg1 instanceof PdfTransparency) {
|
|
232
|
+
let savable : IPdfPrimitive = (arg1 as IPdfWrapper).element;
|
|
233
|
+
let transDic : PdfDictionary = null;
|
|
234
|
+
transDic = this.items.getValue(this.dictionaryProperties.extGState) as PdfDictionary;
|
|
235
|
+
// Create a new pattern dictionary.
|
|
236
|
+
if (transDic == null) {
|
|
237
|
+
transDic = new PdfDictionary();
|
|
238
|
+
this.items.setValue(this.dictionaryProperties.extGState, transDic);
|
|
239
|
+
}
|
|
240
|
+
transDic.items.setValue(arg2.value, new PdfReferenceHolder(savable));
|
|
241
|
+
} else {
|
|
242
|
+
/* tslint:disable */
|
|
243
|
+
let xobjects : PdfDictionary = this.Dictionary.items.getValue(this.dictionaryProperties.xObject) as PdfDictionary;
|
|
244
|
+
let parentXObjects : PdfDictionary;
|
|
245
|
+
if (typeof this.pdfDocument !== 'undefined') {
|
|
246
|
+
parentXObjects = ((this.pdfDocument.sections.element as PdfDictionary).items.getValue(this.dictionaryProperties.resources) as PdfDictionary).items.getValue(this.dictionaryProperties.xObject) as PdfDictionary;
|
|
247
|
+
}
|
|
248
|
+
let values : IPdfPrimitive[] = this.Dictionary.items.values();
|
|
249
|
+
let hasSameImageStream : boolean = false;
|
|
250
|
+
let oldReference : PdfReferenceHolder;
|
|
251
|
+
if ( typeof this.pdfDocument !== 'undefined' && (typeof parentXObjects === undefined || parentXObjects == null)) {
|
|
252
|
+
parentXObjects = new PdfDictionary();
|
|
253
|
+
((this.pdfDocument.sections.element as PdfDictionary).items.getValue(this.dictionaryProperties.resources) as PdfDictionary).items.setValue(this.dictionaryProperties.xObject, parentXObjects);
|
|
254
|
+
} else if (typeof this.pdfDocument !== 'undefined') {
|
|
255
|
+
let values : IPdfPrimitive[] = parentXObjects.items.values();
|
|
256
|
+
for (let i : number = 0; i < values.length; i++) {
|
|
257
|
+
if (typeof (values[i] as PdfReferenceHolder) !== 'undefined' && typeof ((values[i] as PdfReferenceHolder).element as PdfStream) !== 'undefined') {
|
|
258
|
+
if (((values[i] as PdfReferenceHolder).element as PdfStream).data[0] === (arg1.element as PdfStream).data[0]) {
|
|
259
|
+
oldReference = values[i] as PdfReferenceHolder;
|
|
260
|
+
hasSameImageStream = true;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
if (xobjects == null) {
|
|
266
|
+
xobjects = new PdfDictionary();
|
|
267
|
+
this.Dictionary.items.setValue(this.dictionaryProperties.xObject, xobjects);
|
|
268
|
+
}
|
|
269
|
+
if (hasSameImageStream && typeof oldReference !== 'undefined') {
|
|
270
|
+
xobjects.items.setValue(arg2.value, oldReference);
|
|
271
|
+
} else {
|
|
272
|
+
let reference : PdfReferenceHolder = new PdfReferenceHolder((arg1 as IPdfWrapper).element);
|
|
273
|
+
xobjects.items.setValue(arg2.value, reference);
|
|
274
|
+
if ( typeof this.pdfDocument !== 'undefined' ) {
|
|
275
|
+
parentXObjects.items.setValue(arg2.value, reference);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
/* tslint:enable */
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
/* tslint:disable */
|
|
283
|
+
/**
|
|
284
|
+
* Used to create new guid for resources.
|
|
285
|
+
* @private
|
|
286
|
+
*/
|
|
287
|
+
export class Guid {
|
|
288
|
+
/**
|
|
289
|
+
* Generate `new GUID`.
|
|
290
|
+
* @private
|
|
291
|
+
*/
|
|
292
|
+
public static getNewGuidString() : string {
|
|
293
|
+
return 'aaaaaaaa-aaaa-4aaa-baaa-aaaaaaaaaaaa'.replace(/[ab]/g, (c : string) => {
|
|
294
|
+
let random : number = Math.random() * 16 | 0;
|
|
295
|
+
let result : number = c === 'a' ? random : (random & 0x3 | 0x8);
|
|
296
|
+
return result.toString(16);
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
/* tslint:enable */
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PdfTransformationMatrix.ts class for EJ2-PDF
|
|
3
|
+
*/
|
|
4
|
+
import { PointF } from './../drawing/pdf-drawing';
|
|
5
|
+
import { PdfNumber } from './../primitives/pdf-number';
|
|
6
|
+
/**
|
|
7
|
+
* Class for representing Root `transformation matrix`.
|
|
8
|
+
*/
|
|
9
|
+
export class PdfTransformationMatrix {
|
|
10
|
+
// Constants
|
|
11
|
+
/**
|
|
12
|
+
* Value for `angle converting`.
|
|
13
|
+
* @default Math.PI / 180.0
|
|
14
|
+
* @private
|
|
15
|
+
*/
|
|
16
|
+
private static readonly degRadFactor : number = Math.PI / 180.0;
|
|
17
|
+
/**
|
|
18
|
+
* Value for `angle converting`.
|
|
19
|
+
* @default 180.0 / Math.PI
|
|
20
|
+
* @private
|
|
21
|
+
*/
|
|
22
|
+
private readonly radDegFactor : number = 180.0 / Math.PI;
|
|
23
|
+
// Fields
|
|
24
|
+
/**
|
|
25
|
+
* `Transformation matrix`.
|
|
26
|
+
* @private
|
|
27
|
+
*/
|
|
28
|
+
private transformationMatrix : Matrix;
|
|
29
|
+
|
|
30
|
+
// Properties
|
|
31
|
+
/**
|
|
32
|
+
* Gets or sets the `internal matrix object`.
|
|
33
|
+
* @private
|
|
34
|
+
*/
|
|
35
|
+
public get matrix() : Matrix {
|
|
36
|
+
return this.transformationMatrix;
|
|
37
|
+
}
|
|
38
|
+
public set matrix(value : Matrix) {
|
|
39
|
+
this.transformationMatrix = value;
|
|
40
|
+
}
|
|
41
|
+
// Constructors
|
|
42
|
+
/**
|
|
43
|
+
* Initializes object of `PdfTransformationMatrix` class.
|
|
44
|
+
* @private
|
|
45
|
+
*/
|
|
46
|
+
public constructor()
|
|
47
|
+
/**
|
|
48
|
+
* Initializes object of `PdfTransformationMatrix` class.
|
|
49
|
+
* @private
|
|
50
|
+
*/
|
|
51
|
+
public constructor(value : boolean)
|
|
52
|
+
public constructor(value ? : boolean) {
|
|
53
|
+
if (typeof value === 'undefined') {
|
|
54
|
+
this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, 1.00, 0.00, 0.00);
|
|
55
|
+
} else {
|
|
56
|
+
this.transformationMatrix = new Matrix(1.00, 0.00, 0.00, -1.00, 0.00, 0.00);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Public methods
|
|
60
|
+
/**
|
|
61
|
+
* `Translates` coordinates by specified coordinates.
|
|
62
|
+
* @private
|
|
63
|
+
*/
|
|
64
|
+
public translate(offsetX : number, offsetY : number) : void {
|
|
65
|
+
this.transformationMatrix.translate(offsetX, offsetY);
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* `Scales` coordinates by specified coordinates.
|
|
69
|
+
* @private
|
|
70
|
+
*/
|
|
71
|
+
public scale(scaleX : number, scaleY : number) : void {
|
|
72
|
+
this.transformationMatrix.elements[0] = scaleX;
|
|
73
|
+
this.transformationMatrix.elements[3] = scaleY;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* `Rotates` coordinate system in counterclockwise direction.
|
|
77
|
+
* @private
|
|
78
|
+
*/
|
|
79
|
+
public rotate(angle : number) : void {
|
|
80
|
+
//Convert from degree to radian
|
|
81
|
+
angle = (angle * Math.PI) / 180;
|
|
82
|
+
//Rotation
|
|
83
|
+
this.transformationMatrix.elements[0] = Math.cos(angle);
|
|
84
|
+
this.transformationMatrix.elements[1] = Math.sin(angle);
|
|
85
|
+
this.transformationMatrix.elements[2] = -Math.sin(angle);
|
|
86
|
+
this.transformationMatrix.elements[3] = Math.cos(angle);
|
|
87
|
+
}
|
|
88
|
+
// Overrides
|
|
89
|
+
/**
|
|
90
|
+
* Gets `PDF representation`.
|
|
91
|
+
* @private
|
|
92
|
+
*/
|
|
93
|
+
public toString() : string {
|
|
94
|
+
let builder : string = '';
|
|
95
|
+
let whitespace : string = ' ';
|
|
96
|
+
for (let i : number = 0, len : number = this.transformationMatrix.elements.length; i < len; i++) {
|
|
97
|
+
let temp : number = this.matrix.elements[i];
|
|
98
|
+
builder += PdfNumber.floatToString(this.transformationMatrix.elements[i]);
|
|
99
|
+
builder += whitespace;
|
|
100
|
+
}
|
|
101
|
+
return builder;
|
|
102
|
+
}
|
|
103
|
+
// Implementation
|
|
104
|
+
/**
|
|
105
|
+
* `Multiplies` matrices (changes coordinate system.)
|
|
106
|
+
* @private
|
|
107
|
+
*/
|
|
108
|
+
public multiply(matrix : PdfTransformationMatrix) : void {
|
|
109
|
+
this.transformationMatrix.multiply(matrix.matrix);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Converts `degrees to radians`.
|
|
113
|
+
* @private
|
|
114
|
+
*/
|
|
115
|
+
public static degreesToRadians(degreesX : number) : number {
|
|
116
|
+
return this.degRadFactor * degreesX;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Converts `radians to degrees`.
|
|
120
|
+
* @private
|
|
121
|
+
*/
|
|
122
|
+
public radiansToDegrees(radians : number) : number {
|
|
123
|
+
return this.radDegFactor * radians;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* `Clones` this instance of PdfTransformationMatrix.
|
|
127
|
+
* @private
|
|
128
|
+
*/
|
|
129
|
+
public clone() : PdfTransformationMatrix {
|
|
130
|
+
return this;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
export class Matrix {
|
|
134
|
+
//Fields
|
|
135
|
+
/**
|
|
136
|
+
* `elements` in the matrix.
|
|
137
|
+
* @private
|
|
138
|
+
*/
|
|
139
|
+
private metrixElements : number[];
|
|
140
|
+
// Constructor
|
|
141
|
+
/**
|
|
142
|
+
* Initializes a new instance of the `Matrix` class.
|
|
143
|
+
* @private
|
|
144
|
+
*/
|
|
145
|
+
public constructor()
|
|
146
|
+
/**
|
|
147
|
+
* Initializes a new instance of the `Matrix` class with number array.
|
|
148
|
+
* @private
|
|
149
|
+
*/
|
|
150
|
+
public constructor(elements : number[])
|
|
151
|
+
/**
|
|
152
|
+
* Initializes a new instance of the `Matrix` class.
|
|
153
|
+
* @private
|
|
154
|
+
*/
|
|
155
|
+
public constructor(m11 : number, m12 : number, m21 : number, m22 : number, dx : number, dy : number)
|
|
156
|
+
public constructor(arg1 ?: number|number[], arg2 ?: number, arg3 ?: number, arg4 ?: number, arg5 ?: number, arg6 ?: number) {
|
|
157
|
+
if (typeof arg1 === 'undefined') {
|
|
158
|
+
this.metrixElements = [];
|
|
159
|
+
} else if (typeof arg1 === 'number') {
|
|
160
|
+
this.metrixElements = [];
|
|
161
|
+
this.metrixElements.push(arg1);
|
|
162
|
+
this.metrixElements.push(arg2);
|
|
163
|
+
this.metrixElements.push(arg3);
|
|
164
|
+
this.metrixElements.push(arg4);
|
|
165
|
+
this.metrixElements.push(arg5);
|
|
166
|
+
this.metrixElements.push(arg6);
|
|
167
|
+
} else {
|
|
168
|
+
this.metrixElements = arg1;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// Properties
|
|
172
|
+
/**
|
|
173
|
+
* Gets the `elements`.
|
|
174
|
+
* @private
|
|
175
|
+
*/
|
|
176
|
+
public get elements() : number[] {
|
|
177
|
+
return this.metrixElements;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Gets the off set `X`.
|
|
181
|
+
* @private
|
|
182
|
+
*/
|
|
183
|
+
public get offsetX() : number {
|
|
184
|
+
return this.metrixElements[4];
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Gets the off set `Y`.
|
|
188
|
+
* @private
|
|
189
|
+
*/
|
|
190
|
+
public get offsetY() : number {
|
|
191
|
+
return this.metrixElements[5];
|
|
192
|
+
}
|
|
193
|
+
// Implementation
|
|
194
|
+
/**
|
|
195
|
+
* `Translates` coordinates by specified coordinates.
|
|
196
|
+
* @private
|
|
197
|
+
*/
|
|
198
|
+
public translate(offsetX : number, offsetY : number) : void {
|
|
199
|
+
this.metrixElements[4] = offsetX;
|
|
200
|
+
this.metrixElements[5] = offsetY;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* `Translates` the specified offset X.
|
|
204
|
+
* @private
|
|
205
|
+
*/
|
|
206
|
+
public transform(point : PointF) : PointF {
|
|
207
|
+
let x : number = point.x;
|
|
208
|
+
let y : number = point.y;
|
|
209
|
+
let x2 : number = x * this.elements[0] + y * this.elements[2] + this.offsetX;
|
|
210
|
+
let y2 : number = x * this.elements[1] + y * this.elements[3] + this.offsetY;
|
|
211
|
+
return new PointF(x2, y2);
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* `Multiplies matrices` (changes coordinate system.)
|
|
215
|
+
* @private
|
|
216
|
+
*/
|
|
217
|
+
public multiply(matrix : Matrix) : void {
|
|
218
|
+
let tempMatrix : number[] = [];
|
|
219
|
+
tempMatrix.push(this.elements[0] * matrix.elements[0] + this.elements[1] * matrix.elements[2]);
|
|
220
|
+
tempMatrix[1] = (this.elements[0] * matrix.elements[1] + this.elements[1] * matrix.elements[3]);
|
|
221
|
+
tempMatrix[2] = (this.elements[2] * matrix.elements[0] + this.elements[3] * matrix.elements[2]);
|
|
222
|
+
tempMatrix[3] = (this.elements[2] * matrix.elements[1] + this.elements[3] * matrix.elements[3]);
|
|
223
|
+
tempMatrix[4] = (this.offsetX * matrix.elements[0] + this.offsetY * matrix.elements[2] + matrix.offsetX);
|
|
224
|
+
tempMatrix[5] = (this.offsetX * matrix.elements[1] + this.offsetY * matrix.elements[3] + matrix.offsetY);
|
|
225
|
+
for (let i : number = 0; i < tempMatrix.length; i++) {
|
|
226
|
+
this.elements[i] = tempMatrix[i];
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// IDisposable Members
|
|
230
|
+
/**
|
|
231
|
+
* `Dispose` this instance of PdfTransformationMatrix class.
|
|
232
|
+
* @private
|
|
233
|
+
*/
|
|
234
|
+
public dispose() : void {
|
|
235
|
+
this.metrixElements = null;
|
|
236
|
+
}
|
|
237
|
+
// ICloneable Members
|
|
238
|
+
/**
|
|
239
|
+
* `Clones` this instance of PdfTransformationMatrix class.
|
|
240
|
+
* @private
|
|
241
|
+
*/
|
|
242
|
+
public clone() : Matrix {
|
|
243
|
+
let m : Matrix = new Matrix(this.metrixElements);
|
|
244
|
+
return m;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PdfTransparency.ts class for EJ2-PDF
|
|
3
|
+
*/
|
|
4
|
+
import { IPdfWrapper } from './../../interfaces/i-pdf-wrapper';
|
|
5
|
+
import { IPdfPrimitive } from './../../interfaces/i-pdf-primitives';
|
|
6
|
+
import { PdfDictionary } from './../primitives/pdf-dictionary';
|
|
7
|
+
import { PdfBlendMode } from './../graphics/enum';
|
|
8
|
+
import { PdfNumber } from './../primitives/pdf-number';
|
|
9
|
+
import { PdfName } from './../primitives/pdf-name';
|
|
10
|
+
import { DictionaryProperties } from './../input-output/pdf-dictionary-properties';
|
|
11
|
+
/**
|
|
12
|
+
* Represents a simple `transparency`.
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
15
|
+
export class PdfTransparency implements IPdfWrapper {
|
|
16
|
+
// Fields
|
|
17
|
+
/**
|
|
18
|
+
* Internal variable to store `dictionary`.
|
|
19
|
+
* @default new PdfDictionary()
|
|
20
|
+
* @private
|
|
21
|
+
*/
|
|
22
|
+
private dictionary : PdfDictionary = new PdfDictionary();
|
|
23
|
+
/**
|
|
24
|
+
* Internal variable for accessing fields from `DictionryProperties` class.
|
|
25
|
+
* @default new DictionaryProperties()
|
|
26
|
+
* @private
|
|
27
|
+
*/
|
|
28
|
+
private dictionaryProperties : DictionaryProperties = new DictionaryProperties();
|
|
29
|
+
// Properties
|
|
30
|
+
// /**
|
|
31
|
+
// * Gets the `stroke` operation alpha value.
|
|
32
|
+
// * @private
|
|
33
|
+
// */
|
|
34
|
+
// public get stroke() : number {
|
|
35
|
+
// let result : number = this.getNumber(this.dictionaryProperties.CA);
|
|
36
|
+
// return result;
|
|
37
|
+
// }
|
|
38
|
+
// /**
|
|
39
|
+
// * Gets the `fill` operation alpha value.
|
|
40
|
+
// * @private
|
|
41
|
+
// */
|
|
42
|
+
// public get fill() : number {
|
|
43
|
+
// let result : number = this.getNumber(this.dictionaryProperties.ca);
|
|
44
|
+
// return result;
|
|
45
|
+
// }
|
|
46
|
+
// /**
|
|
47
|
+
// * Gets the `blend mode`.
|
|
48
|
+
// * @private
|
|
49
|
+
// */
|
|
50
|
+
// public get mode() : PdfBlendMode {
|
|
51
|
+
// let result : string = this.getName(this.dictionaryProperties.ca);
|
|
52
|
+
// return PdfBlendMode.Normal;
|
|
53
|
+
// }
|
|
54
|
+
// Constructors
|
|
55
|
+
/**
|
|
56
|
+
* Initializes a new instance of the `Transparency` class.
|
|
57
|
+
* @private
|
|
58
|
+
*/
|
|
59
|
+
public constructor(stroke : number, fill : number, mode : PdfBlendMode) {
|
|
60
|
+
this.dictionary.items.setValue(this.dictionaryProperties.CA, new PdfNumber(stroke));
|
|
61
|
+
this.dictionary.items.setValue(this.dictionaryProperties.ca, new PdfNumber(fill));
|
|
62
|
+
this.dictionary.items.setValue(this.dictionaryProperties.BM, new PdfName(mode.toString()));
|
|
63
|
+
}
|
|
64
|
+
// // Implementation
|
|
65
|
+
// /**
|
|
66
|
+
// * Gets the `number value`.
|
|
67
|
+
// * @private
|
|
68
|
+
// */
|
|
69
|
+
// private getNumber(keyName : string) : number {
|
|
70
|
+
// let result : number = 0.0;
|
|
71
|
+
// let numb : PdfNumber = this.dictionary.items.getValue(keyName) as PdfNumber;
|
|
72
|
+
// result = numb.intValue;
|
|
73
|
+
// return result;
|
|
74
|
+
// }
|
|
75
|
+
// /**
|
|
76
|
+
// * Gets the `name value`.
|
|
77
|
+
// * @private
|
|
78
|
+
// */
|
|
79
|
+
// private getName(keyName : string) : string {
|
|
80
|
+
// let result : string = null;
|
|
81
|
+
// let name : PdfName = this.dictionary.items.getValue(keyName) as PdfName;
|
|
82
|
+
// result = name.value;
|
|
83
|
+
// return result;
|
|
84
|
+
// }
|
|
85
|
+
// IPdfWrapper Members
|
|
86
|
+
/**
|
|
87
|
+
* Gets the `element`.
|
|
88
|
+
* @private
|
|
89
|
+
*/
|
|
90
|
+
public get element() : IPdfPrimitive {
|
|
91
|
+
return this.dictionary;
|
|
92
|
+
}
|
|
93
|
+
}
|