@syncfusion/ej2-pdf-export 20.2.45 → 20.3.56

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 (154) hide show
  1. package/dist/ej2-pdf-export.min.js +10 -0
  2. package/dist/ej2-pdf-export.umd.min.js +1 -1
  3. package/dist/global/ej2-pdf-export.min.js +1 -1
  4. package/dist/global/index.d.ts +1 -1
  5. package/dist/ts/implementation/actions/action.ts +76 -0
  6. package/dist/ts/implementation/actions/uri-action.ts +52 -0
  7. package/dist/ts/implementation/annotations/action-link-annotation.ts +43 -0
  8. package/dist/ts/implementation/annotations/annotation-collection.ts +159 -0
  9. package/dist/ts/implementation/annotations/annotation.ts +241 -0
  10. package/dist/ts/implementation/annotations/document-link-annotation.ts +118 -0
  11. package/dist/ts/implementation/annotations/link-annotation.ts +32 -0
  12. package/dist/ts/implementation/annotations/pdf-text-web-link.ts +265 -0
  13. package/dist/ts/implementation/annotations/uri-annotation.ts +86 -0
  14. package/dist/ts/implementation/collections/dictionary.ts +150 -0
  15. package/dist/ts/implementation/collections/object-object-pair/dictionary.ts +125 -0
  16. package/dist/ts/implementation/collections/utils.ts +38 -0
  17. package/dist/ts/implementation/document/automatic-fields/automatic-field-info-collection.ts +39 -0
  18. package/dist/ts/implementation/document/automatic-fields/automatic-field-info.ts +108 -0
  19. package/dist/ts/implementation/document/automatic-fields/automatic-field.ts +127 -0
  20. package/dist/ts/implementation/document/automatic-fields/composite-field.ts +76 -0
  21. package/dist/ts/implementation/document/automatic-fields/multiple-value-field.ts +37 -0
  22. package/dist/ts/implementation/document/automatic-fields/page-count-field.ts +75 -0
  23. package/dist/ts/implementation/document/automatic-fields/pdf-numbers-convertor.ts +157 -0
  24. package/dist/ts/implementation/document/automatic-fields/pdf-page-number-field.ts +82 -0
  25. package/dist/ts/implementation/document/automatic-fields/pdf-template-value-pair.ts +60 -0
  26. package/dist/ts/implementation/document/automatic-fields/single-value-field.ts +48 -0
  27. package/dist/ts/implementation/document/pdf-catalog.ts +52 -0
  28. package/dist/ts/implementation/document/pdf-document-base.ts +166 -0
  29. package/dist/ts/implementation/document/pdf-document-template.ts +310 -0
  30. package/dist/ts/implementation/document/pdf-document.ts +342 -0
  31. package/dist/ts/implementation/drawing/pdf-drawing.ts +218 -0
  32. package/dist/ts/implementation/general/enum.ts +21 -0
  33. package/dist/ts/implementation/general/functions/pdf-function.ts +66 -0
  34. package/dist/ts/implementation/general/functions/pdf-sampled-function.ts +62 -0
  35. package/dist/ts/implementation/general/pdf-cache-collection.ts +97 -0
  36. package/dist/ts/implementation/general/pdf-collection.ts +41 -0
  37. package/dist/ts/implementation/general/pdf-destination.ts +170 -0
  38. package/dist/ts/implementation/graphics/brushes/enum.ts +237 -0
  39. package/dist/ts/implementation/graphics/brushes/pdf-blend.ts +294 -0
  40. package/dist/ts/implementation/graphics/brushes/pdf-brush.ts +68 -0
  41. package/dist/ts/implementation/graphics/brushes/pdf-brushes.ts +2438 -0
  42. package/dist/ts/implementation/graphics/brushes/pdf-color-blend.ts +295 -0
  43. package/dist/ts/implementation/graphics/brushes/pdf-gradient-brush.ts +311 -0
  44. package/dist/ts/implementation/graphics/brushes/pdf-linear-gradient-brush.ts +406 -0
  45. package/dist/ts/implementation/graphics/brushes/pdf-radial-gradient-brush.ts +290 -0
  46. package/dist/ts/implementation/graphics/brushes/pdf-solid-brush.ts +107 -0
  47. package/dist/ts/implementation/graphics/brushes/pdf-tiling-brush.ts +304 -0
  48. package/dist/ts/implementation/graphics/constants.ts +31 -0
  49. package/dist/ts/implementation/graphics/enum.ts +413 -0
  50. package/dist/ts/implementation/graphics/figures/arc.ts +133 -0
  51. package/dist/ts/implementation/graphics/figures/base/draw-element.ts +59 -0
  52. package/dist/ts/implementation/graphics/figures/base/element-layouter.ts +260 -0
  53. package/dist/ts/implementation/graphics/figures/base/fill-element.ts +72 -0
  54. package/dist/ts/implementation/graphics/figures/base/graphics-element.ts +34 -0
  55. package/dist/ts/implementation/graphics/figures/base/pdf-shape-element.ts +69 -0
  56. package/dist/ts/implementation/graphics/figures/base/shape-layouter.ts +276 -0
  57. package/dist/ts/implementation/graphics/figures/base/text-layouter.ts +205 -0
  58. package/dist/ts/implementation/graphics/figures/ellipse-part.ts +76 -0
  59. package/dist/ts/implementation/graphics/figures/enum.ts +80 -0
  60. package/dist/ts/implementation/graphics/figures/layout-element.ts +132 -0
  61. package/dist/ts/implementation/graphics/figures/path.ts +646 -0
  62. package/dist/ts/implementation/graphics/figures/pdf-template.ts +205 -0
  63. package/dist/ts/implementation/graphics/figures/rectangle-area.ts +108 -0
  64. package/dist/ts/implementation/graphics/figures/text-element.ts +445 -0
  65. package/dist/ts/implementation/graphics/fonts/enum.ts +385 -0
  66. package/dist/ts/implementation/graphics/fonts/pdf-font-metrics.ts +248 -0
  67. package/dist/ts/implementation/graphics/fonts/pdf-font.ts +316 -0
  68. package/dist/ts/implementation/graphics/fonts/pdf-standard-font-metrics-factory.ts +606 -0
  69. package/dist/ts/implementation/graphics/fonts/pdf-standard-font.ts +243 -0
  70. package/dist/ts/implementation/graphics/fonts/pdf-string-format.ts +474 -0
  71. package/dist/ts/implementation/graphics/fonts/pdf-true-type-font.ts +165 -0
  72. package/dist/ts/implementation/graphics/fonts/rtl/rtl-bidirectional.ts +958 -0
  73. package/dist/ts/implementation/graphics/fonts/rtl/rtl-text-shape.ts +374 -0
  74. package/dist/ts/implementation/graphics/fonts/rtl-renderer.ts +255 -0
  75. package/dist/ts/implementation/graphics/fonts/string-layouter.ts +617 -0
  76. package/dist/ts/implementation/graphics/fonts/string-tokenizer.ts +275 -0
  77. package/dist/ts/implementation/graphics/fonts/ttf-OS2-Table.ts +206 -0
  78. package/dist/ts/implementation/graphics/fonts/ttf-apple-cmap-sub-table.ts +18 -0
  79. package/dist/ts/implementation/graphics/fonts/ttf-cmap-sub-table.ts +18 -0
  80. package/dist/ts/implementation/graphics/fonts/ttf-cmap-table.ts +14 -0
  81. package/dist/ts/implementation/graphics/fonts/ttf-glyph-header.ts +26 -0
  82. package/dist/ts/implementation/graphics/fonts/ttf-glyph-info.ts +35 -0
  83. package/dist/ts/implementation/graphics/fonts/ttf-head-table.ts +94 -0
  84. package/dist/ts/implementation/graphics/fonts/ttf-horizontal-header-table.ts +56 -0
  85. package/dist/ts/implementation/graphics/fonts/ttf-loca-table.ts +10 -0
  86. package/dist/ts/implementation/graphics/fonts/ttf-long-hor-metric.ts +14 -0
  87. package/dist/ts/implementation/graphics/fonts/ttf-metrics.ts +106 -0
  88. package/dist/ts/implementation/graphics/fonts/ttf-microsoft-cmap-sub-table.ts +58 -0
  89. package/dist/ts/implementation/graphics/fonts/ttf-name-record.ts +33 -0
  90. package/dist/ts/implementation/graphics/fonts/ttf-name-table.ts +22 -0
  91. package/dist/ts/implementation/graphics/fonts/ttf-post-table.ts +42 -0
  92. package/dist/ts/implementation/graphics/fonts/ttf-reader.ts +1254 -0
  93. package/dist/ts/implementation/graphics/fonts/ttf-table-info.ts +26 -0
  94. package/dist/ts/implementation/graphics/fonts/ttf-trimmed-cmap-sub-table.ts +26 -0
  95. package/dist/ts/implementation/graphics/fonts/unicode-true-type-font.ts +577 -0
  96. package/dist/ts/implementation/graphics/images/byte-array.ts +137 -0
  97. package/dist/ts/implementation/graphics/images/image-decoder.ts +437 -0
  98. package/dist/ts/implementation/graphics/images/pdf-bitmap.ts +110 -0
  99. package/dist/ts/implementation/graphics/images/pdf-image.ts +132 -0
  100. package/dist/ts/implementation/graphics/pdf-color.ts +478 -0
  101. package/dist/ts/implementation/graphics/pdf-graphics.ts +2424 -0
  102. package/dist/ts/implementation/graphics/pdf-margins.ts +124 -0
  103. package/dist/ts/implementation/graphics/pdf-pen.ts +370 -0
  104. package/dist/ts/implementation/graphics/pdf-resources.ts +300 -0
  105. package/dist/ts/implementation/graphics/pdf-transformation-matrix.ts +246 -0
  106. package/dist/ts/implementation/graphics/pdf-transparency.ts +93 -0
  107. package/dist/ts/implementation/graphics/unit-convertor.ts +96 -0
  108. package/dist/ts/implementation/input-output/big-endian-writer.ts +121 -0
  109. package/dist/ts/implementation/input-output/cross-table.ts +21 -0
  110. package/dist/ts/implementation/input-output/enum.ts +16 -0
  111. package/dist/ts/implementation/input-output/pdf-cross-table.ts +524 -0
  112. package/dist/ts/implementation/input-output/pdf-dictionary-properties.ts +515 -0
  113. package/dist/ts/implementation/input-output/pdf-main-object-collection.ts +194 -0
  114. package/dist/ts/implementation/input-output/pdf-operators.ts +363 -0
  115. package/dist/ts/implementation/input-output/pdf-stream-writer.ts +681 -0
  116. package/dist/ts/implementation/input-output/pdf-writer.ts +88 -0
  117. package/dist/ts/implementation/pages/enum.ts +201 -0
  118. package/dist/ts/implementation/pages/page-added-event-arguments.ts +39 -0
  119. package/dist/ts/implementation/pages/pdf-document-page-collection.ts +180 -0
  120. package/dist/ts/implementation/pages/pdf-page-base.ts +181 -0
  121. package/dist/ts/implementation/pages/pdf-page-layer-collection.ts +348 -0
  122. package/dist/ts/implementation/pages/pdf-page-layer.ts +271 -0
  123. package/dist/ts/implementation/pages/pdf-page-settings.ts +192 -0
  124. package/dist/ts/implementation/pages/pdf-page-size.ts +162 -0
  125. package/dist/ts/implementation/pages/pdf-page-template-element.ts +659 -0
  126. package/dist/ts/implementation/pages/pdf-page.ts +235 -0
  127. package/dist/ts/implementation/pages/pdf-section-collection.ts +187 -0
  128. package/dist/ts/implementation/pages/pdf-section-page-collection.ts +61 -0
  129. package/dist/ts/implementation/pages/pdf-section-templates.ts +96 -0
  130. package/dist/ts/implementation/pages/pdf-section.ts +644 -0
  131. package/dist/ts/implementation/primitives/pdf-array.ts +386 -0
  132. package/dist/ts/implementation/primitives/pdf-boolean.ts +119 -0
  133. package/dist/ts/implementation/primitives/pdf-dictionary.ts +513 -0
  134. package/dist/ts/implementation/primitives/pdf-name.ts +218 -0
  135. package/dist/ts/implementation/primitives/pdf-number.ts +165 -0
  136. package/dist/ts/implementation/primitives/pdf-reference.ts +430 -0
  137. package/dist/ts/implementation/primitives/pdf-stream.ts +336 -0
  138. package/dist/ts/implementation/primitives/pdf-string.ts +397 -0
  139. package/dist/ts/implementation/structured-elements/grid/layout/grid-layouter.ts +2027 -0
  140. package/dist/ts/implementation/structured-elements/grid/pdf-grid-cell.ts +1189 -0
  141. package/dist/ts/implementation/structured-elements/grid/pdf-grid-column.ts +206 -0
  142. package/dist/ts/implementation/structured-elements/grid/pdf-grid-row.ts +470 -0
  143. package/dist/ts/implementation/structured-elements/grid/pdf-grid.ts +853 -0
  144. package/dist/ts/implementation/structured-elements/grid/styles/pdf-borders.ts +240 -0
  145. package/dist/ts/implementation/structured-elements/grid/styles/style.ts +424 -0
  146. package/dist/ts/implementation/structured-elements/tables/light-tables/enum.ts +16 -0
  147. package/dist/ts/interfaces/i-pdf-cache.ts +23 -0
  148. package/dist/ts/interfaces/i-pdf-changable.ts +17 -0
  149. package/dist/ts/interfaces/i-pdf-clonable.ts +12 -0
  150. package/dist/ts/interfaces/i-pdf-primitives.ts +45 -0
  151. package/dist/ts/interfaces/i-pdf-true-type-font.ts +48 -0
  152. package/dist/ts/interfaces/i-pdf-wrapper.ts +13 -0
  153. package/dist/ts/interfaces/i-pdf-writer.ts +29 -0
  154. package/package.json +9 -8
@@ -0,0 +1,295 @@
1
+ /**
2
+ * PdfColorBlend.ts class for EJ2-PDF
3
+ */
4
+ import { PdfColorSpace } from './../enum';
5
+ import { PdfColor } from './../pdf-color';
6
+ import { PdfBrush } from './pdf-brush';
7
+ import { PdfFunction } from './../../general/functions/pdf-function';
8
+ import { PdfSampledFunction} from './../../general/functions/pdf-sampled-function';
9
+ import { PdfBlend } from './pdf-blend';
10
+ /**
11
+ * `PdfColorBlend` Represents the arrays of colors and positions used for
12
+ * interpolating color blending in a multicolor gradient.
13
+ * @private
14
+ */
15
+ export class PdfColorBlend extends PdfBlend {
16
+ //Fields
17
+ /**
18
+ * Array of colors.
19
+ * @private
20
+ */
21
+ private mcolors: PdfColor[];
22
+ /**
23
+ * Local variable to store the brush.
24
+ */
25
+ private mbrush: PdfBrush;
26
+ //Constructor
27
+ /**
28
+ * Initializes a new instance of the `PdfColorBlend` class.
29
+ * @public
30
+ */
31
+ public constructor()
32
+ /**
33
+ * Initializes a new instance of the `PdfColorBlend` class.
34
+ * @public
35
+ */
36
+ public constructor(count: number)
37
+ public constructor(count?: number) {
38
+ super();
39
+ if (typeof count === 'number') {
40
+ super(count);
41
+ }
42
+ }
43
+ //Properties
44
+ /**
45
+ * Gets or sets the array of colors.
46
+ * @public
47
+ */
48
+ public get colors(): PdfColor[] {
49
+ return this.mcolors;
50
+ }
51
+ public set colors(value: PdfColor[]) {
52
+ if ((value == null)) {
53
+ throw new Error('ArgumentNullException : Colors');
54
+ }
55
+ this.mcolors = value;
56
+ }
57
+ //Implementation
58
+ /**
59
+ * Gets the function.
60
+ * @param colorSpace The color space.
61
+ * @public
62
+ */
63
+ public getFunction(colorSpace: PdfColorSpace): PdfFunction {
64
+ let domain: number[] = [ 0, 1];
65
+ let colourComponents: number = this.getColorComponentsCount(colorSpace);
66
+ let maxComponentValue: number = this.getMaxComponentValue(colorSpace);
67
+ let range: number[] = this.setRange(colourComponents, maxComponentValue);
68
+ let func: PdfSampledFunction = null;
69
+ if ((this.mbrush == null && typeof this.mbrush === 'undefined')) {
70
+ let sizes: number[] = [1];
71
+ let samplesCount: number;
72
+ let step: number = 1;
73
+ if (this.positions.length === 2) {
74
+ samplesCount = 2;
75
+ } else {
76
+ let positions: number[] = this.positions;
77
+ let intervals: number[] = this.getIntervals(positions);
78
+ let gcd: number = this.gcd(intervals);
79
+ step = gcd;
80
+ samplesCount = ((<number>((1 / gcd))) + 1);
81
+ }
82
+ sizes[0] = samplesCount;
83
+ let samples: number[] = this.getSamplesValues(colorSpace, samplesCount, maxComponentValue, step);
84
+ func = new PdfSampledFunction(domain, range, sizes, samples);
85
+ return func;
86
+ }
87
+ return func;
88
+ }
89
+ /**
90
+ * 'cloneColorBlend' Clones this instance.
91
+ * @public
92
+ */
93
+ public cloneColorBlend(): PdfColorBlend {
94
+ let cBlend: PdfColorBlend = this;
95
+ if ((this.mcolors != null && typeof this.mcolors !== 'undefined')) {
96
+ cBlend.colors = (<PdfColor[]>(this.mcolors));
97
+ }
98
+ if ((this.positions != null && typeof this.positions !== 'undefined')) {
99
+ cBlend.positions = (<number[]>(this.positions));
100
+ }
101
+ return cBlend;
102
+ }
103
+ /**
104
+ * Sets the range.
105
+ * @param colourComponents The colour components.
106
+ * @param maxValue The max value.
107
+ */
108
+ private setRange(colourComponents: number, maxValue: number): number[] {
109
+ let range: number[] = [(colourComponents * 2)];
110
+ for (let i: number = 0; (i < colourComponents); ++i) {
111
+ range[(i * 2)] = 0;
112
+ range[((i * 2) + 1)] = 1;
113
+ }
114
+ return range;
115
+ }
116
+ /**
117
+ * Calculates the color components count according to colour space.
118
+ * @param colorSpace The color space.
119
+ */
120
+ private getColorComponentsCount(colorSpace: PdfColorSpace): number {
121
+ let count: number = 0;
122
+ switch (colorSpace) {
123
+ case PdfColorSpace.Rgb:
124
+ count = 3;
125
+ break;
126
+ case PdfColorSpace.Cmyk:
127
+ count = 4;
128
+ break;
129
+ case PdfColorSpace.GrayScale:
130
+ count = 1;
131
+ break;
132
+ default:
133
+ throw new Error('ArgumentException - Unsupported color space: ' + colorSpace + ' colorSpace');
134
+ }
135
+ return count;
136
+ }
137
+ /**
138
+ * Gets samples values for specified colour space.
139
+ * @param colorSpace The color space.
140
+ * @param sampleCount The sample count.
141
+ * @param maxComponentValue The max component value.
142
+ * @param step The step.
143
+ */
144
+ private getSamplesValues(colorSpace: PdfColorSpace, sampleCount: number, maxComponentValue: number, step: number): number[] {
145
+ let values: number[];
146
+ switch (colorSpace) {
147
+ case PdfColorSpace.GrayScale:
148
+ values = this.getGrayscaleSamples(sampleCount, maxComponentValue, step);
149
+ break;
150
+ case PdfColorSpace.Cmyk:
151
+ values = this.getCmykSamples(sampleCount, maxComponentValue, step);
152
+ break;
153
+ case PdfColorSpace.Rgb:
154
+ values = this.getRgbSamples(sampleCount, maxComponentValue, step);
155
+ break;
156
+ default:
157
+ throw new Error('ArgumentException - Unsupported color space: ' + colorSpace + ' colorSpace');
158
+ }
159
+ return values;
160
+ }
161
+ /**
162
+ * Gets the grayscale samples.
163
+ * @param sampleCount The sample count.
164
+ * @param maxComponentValue The max component value.
165
+ * @param step The step.
166
+ */
167
+ private getGrayscaleSamples(sampleCount: number, maxComponentValue: number, step: number): number[] {
168
+ let values: number[] = [(sampleCount * 2)];
169
+ for (let i: number = 0; (i < sampleCount); ++i) {
170
+ let color: PdfColor = this.getNextColor(i, step, PdfColorSpace.GrayScale);
171
+ let index: number = (i * 2);
172
+ }
173
+ return values;
174
+ }
175
+ /**
176
+ * Gets the RGB samples.
177
+ * @param sampleCount The sample count.
178
+ * @param maxComponentValue The max component value.
179
+ * @param step The step.
180
+ */
181
+ private getRgbSamples(sampleCount: number, maxComponentValue: number, step: number): number[] {
182
+ let values: number[] = [(sampleCount * 3)];
183
+ for (let i: number = 0; (i < sampleCount); ++i) {
184
+ let color: PdfColor = this.getNextColor(i, step, PdfColorSpace.Rgb);
185
+ let index: number = (i * 3);
186
+ values[index] = color.r;
187
+ values[(index + 1)] = color.g;
188
+ values[(index + 2)] = color.b;
189
+ }
190
+ return values;
191
+ }
192
+ /**
193
+ * Gets the CMYK samples.
194
+ * @param sampleCount The sample count.
195
+ * @param maxComponentValue The max component value.
196
+ * @param step The step.
197
+ */
198
+ private getCmykSamples(sampleCount: number, maxComponentValue: number, step: number): number[] {
199
+ let values: number[] = [(sampleCount * 4)];
200
+ for (let i: number = 0; (i < sampleCount); i++) {
201
+ let color: PdfColor = this.getNextColor(i, step, PdfColorSpace.Cmyk);
202
+ let index: number = (i * 4);
203
+ values[index] = (<number>((color.c * maxComponentValue)));
204
+ values[(index + 1)] = (<number>((color.m * maxComponentValue)));
205
+ values[(index + 2)] = (<number>((color.y * maxComponentValue)));
206
+ values[(index + 3)] = (<number>((color.k * maxComponentValue)));
207
+ }
208
+ return values;
209
+ }
210
+ /**
211
+ * Calculates the color that should be at the specified index.
212
+ * @param index The index.
213
+ * @param step The step.
214
+ * @param colorSpace The color space.
215
+ */
216
+ private getNextColor(index: number, step: number, colorSpace: PdfColorSpace): PdfColor {
217
+ let position: number = (step * index);
218
+ let indexHi: number;
219
+ let indexLow: number;
220
+ let result : { indexLow : number, indexHi : number} = this.getIndices(position, indexLow, indexHi);
221
+ indexLow = result.indexLow;
222
+ indexHi = result.indexHi;
223
+ let color: PdfColor;
224
+ if (indexLow === indexHi) {
225
+ color = this.mcolors[indexLow];
226
+ } else {
227
+ let positionLow: number = this.positions[indexLow];
228
+ let positionHi: number = this.positions[indexHi];
229
+ let colorLow: PdfColor = this.mcolors[indexLow];
230
+ let colorHi: PdfColor = this.mcolors[indexHi];
231
+ let t: number = ((position - positionLow) / (positionHi - positionLow));
232
+ color = this.interpolate(t, colorLow, colorHi, colorSpace);
233
+ }
234
+ return color;
235
+ }
236
+ /**
237
+ * Gets the indices.
238
+ * @param position The position.
239
+ * @param indexLow The index low.
240
+ * @param indexHi The index hi.
241
+ */
242
+ private getIndices(position: number, indexLow: number, indexHi: number) : { indexLow : number, indexHi : number} {
243
+ let positions: number[] = this.positions;
244
+ indexLow = 0;
245
+ indexHi = 0;
246
+ for (let i: number = 0; (i < this.mcolors.length); ++i) {
247
+ let currPos: number = positions[i];
248
+ if ((currPos === position)) {
249
+ indexHi = i;
250
+ indexLow = i;
251
+ break;
252
+ } else if ((currPos > position)) {
253
+ indexHi = i;
254
+ break;
255
+ }
256
+ indexLow = i;
257
+ indexHi = i;
258
+ }
259
+ return { indexLow : indexLow, indexHi : indexHi };
260
+ }
261
+ /**
262
+ * Calculates the max component value.
263
+ * @param colorSpace The color space.
264
+ */
265
+ private getMaxComponentValue(colorSpace: PdfColorSpace) : number {
266
+ let result: number = 0;
267
+ switch (colorSpace) {
268
+ case PdfColorSpace.Cmyk:
269
+ case PdfColorSpace.Rgb:
270
+ result = 255;
271
+ break;
272
+ case PdfColorSpace.GrayScale:
273
+ result = 65535;
274
+ break;
275
+ default:
276
+ throw new Error('ArgumentException - Unsupported color space: ' + colorSpace + 'colorSpace');
277
+ }
278
+ return result;
279
+ }
280
+ /**
281
+ * Gets an intervals array from the positions array.
282
+ * @param positions The positions array.
283
+ */
284
+ private getIntervals(positions: number[]): number[] {
285
+ let count: number = positions.length;
286
+ let intervals: number[] = [(count - 1)];
287
+ let prev: number = positions[0];
288
+ for (let i: number = 1; (i < count); ++i) {
289
+ let v: number = positions[i];
290
+ intervals[(i - 1)] = (v - prev);
291
+ prev = v;
292
+ }
293
+ return intervals;
294
+ }
295
+ }
@@ -0,0 +1,311 @@
1
+ /**
2
+ * PdfGradientBrush.ts class for EJ2-PDF
3
+ */
4
+ import { PdfStreamWriter } from './../../input-output/pdf-stream-writer';
5
+ import { GetResourceEventHandler } from './../pdf-graphics';
6
+ import { PdfColorSpace } from './../enum';
7
+ import { PdfColor } from './../pdf-color';
8
+ import { PdfBrush } from './pdf-brush';
9
+ import { IPdfWrapper } from '../../../interfaces/i-pdf-wrapper';
10
+ import { PdfDictionary} from '../../primitives/pdf-dictionary';
11
+ import { PdfTransformationMatrix } from './../pdf-transformation-matrix';
12
+ import { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';
13
+ import { PdfBoolean } from './../../primitives/pdf-boolean';
14
+ import { PdfArray } from './../../primitives/pdf-array';
15
+ import { PdfName } from '../../primitives/pdf-name';
16
+ import { PdfNumber} from '../../primitives/pdf-number';
17
+ import { PdfReferenceHolder } from '../../primitives/pdf-reference';
18
+ import { IPdfPrimitive } from './../../../interfaces/i-pdf-primitives';
19
+ import { PdfFunction } from './../../general/functions/pdf-function';
20
+ import { PdfResources } from './../pdf-resources';
21
+ /**
22
+ * `PdfGradientBrush` class provides objects used to fill the interiors of graphical shapes such as rectangles,
23
+ * ellipses, pies, polygons, and paths.
24
+ * @private
25
+ */
26
+ export abstract class PdfGradientBrush extends PdfBrush implements IPdfWrapper {
27
+ // Fields
28
+ /**
29
+ * Local variable to store the background color.
30
+ * @private
31
+ */
32
+ private mbackground : PdfColor = new PdfColor(255, 255, 255);
33
+ /**
34
+ * Local variable to store the stroking color.
35
+ * @private
36
+ */
37
+ private mbStroking : boolean = false;
38
+ /**
39
+ * Local variable to store the dictionary.
40
+ * @private
41
+ */
42
+ private mpatternDictionary : PdfDictionary;
43
+ /**
44
+ * Local variable to store the shading.
45
+ * @private
46
+ */
47
+ private mshading : PdfDictionary;
48
+ /**
49
+ * Local variable to store the Transformation Matrix.
50
+ * @private
51
+ */
52
+ private mmatrix: PdfTransformationMatrix;
53
+ /**
54
+ * Local variable to store the colorSpace.
55
+ * @private
56
+ */
57
+ private mcolorSpace: PdfColorSpace;
58
+ /**
59
+ * Local variable to store the function.
60
+ * @private
61
+ */
62
+ private mfunction: PdfFunction = null;
63
+ /**
64
+ * Local variable to store the DictionaryProperties.
65
+ * @private
66
+ */
67
+ private dictionaryProperties : DictionaryProperties = new DictionaryProperties();
68
+ //Constructor
69
+ /**
70
+ * Initializes a new instance of the `PdfGradientBrush` class.
71
+ * @public
72
+ */
73
+ /* tslint:disable-next-line:max-line-length */
74
+ public constructor(shading: PdfDictionary) {
75
+ super();
76
+ this.mpatternDictionary = new PdfDictionary();
77
+ this.mpatternDictionary.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.pattern));
78
+ this.mpatternDictionary.items.setValue(this.dictionaryProperties.patternType, new PdfNumber(2));
79
+ this.shading = shading;
80
+ this.colorSpace = PdfColorSpace.Rgb;
81
+ }
82
+ //Properties
83
+ /**
84
+ * Gets or sets the background color of the brush.
85
+ * @public
86
+ */
87
+ public get background(): PdfColor {
88
+ return this.mbackground;
89
+ }
90
+ public set background(value: PdfColor) {
91
+ this.mbackground = value;
92
+ let sh: PdfDictionary = this.shading;
93
+ if (value.isEmpty) {
94
+ sh.remove(this.dictionaryProperties.background);
95
+ } else {
96
+ sh.items.setValue(this.dictionaryProperties.background, value.toArray(this.colorSpace));
97
+ }
98
+ }
99
+ /**
100
+ * Gets or sets a value indicating whether use anti aliasing algorithm.
101
+ * @public
102
+ */
103
+ public get antiAlias(): boolean {
104
+ let sh: PdfDictionary = this.shading;
105
+ let aa: PdfBoolean = (<PdfBoolean>(sh.items.getValue(this.dictionaryProperties.antiAlias)));
106
+ return aa.value;
107
+ }
108
+ public set antiAlias(value: boolean) {
109
+ let sh: PdfDictionary = this.shading;
110
+ let aa: PdfBoolean = (<PdfBoolean>(sh.items.getValue(this.dictionaryProperties.antiAlias)));
111
+ if ((aa == null && typeof aa === 'undefined')) {
112
+ aa = new PdfBoolean(value);
113
+ sh.items.setValue(this.dictionaryProperties.antiAlias, aa);
114
+ } else {
115
+ aa.value = value;
116
+ }
117
+ }
118
+ /**
119
+ * Gets or sets the function of the brush.
120
+ * @protected
121
+ */
122
+ protected get function(): PdfFunction {
123
+ return this.mfunction;
124
+ }
125
+ protected set function(value: PdfFunction) {
126
+ this.mfunction = value;
127
+ if (value != null && typeof value !== 'undefined') {
128
+ this.shading.items.setValue(this.dictionaryProperties.function, new PdfReferenceHolder(this.mfunction));
129
+ } else {
130
+ this.shading.remove(this.dictionaryProperties.function);
131
+ }
132
+ }
133
+ /**
134
+ * Gets or sets the boundary box of the brush.
135
+ * @protected
136
+ */
137
+ protected get bBox(): PdfArray {
138
+ let sh: PdfDictionary = this.shading;
139
+ let box: PdfArray = (<PdfArray>(sh.items.getValue(this.dictionaryProperties.bBox)));
140
+ return box;
141
+ }
142
+ protected set bBox(value: PdfArray) {
143
+ let sh: PdfDictionary = this.shading;
144
+ if (value == null && typeof value === 'undefined') {
145
+ sh.remove(this.dictionaryProperties.bBox);
146
+ } else {
147
+ sh.items.setValue(this.dictionaryProperties.bBox, value);
148
+ }
149
+ }
150
+ /**
151
+ * Gets or sets the color space of the brush.
152
+ * @public
153
+ */
154
+ public get colorSpace(): PdfColorSpace {
155
+ return this.mcolorSpace;
156
+ }
157
+ public set colorSpace(value: PdfColorSpace) {
158
+ let colorSpace: IPdfPrimitive = this.shading.items.getValue(this.dictionaryProperties.colorSpace);
159
+ if ((value !== this.mcolorSpace) || (colorSpace == null)) {
160
+ this.mcolorSpace = value;
161
+ let csValue: string = this.colorSpaceToDeviceName(value);
162
+ this.shading.items.setValue(this.dictionaryProperties.colorSpace, new PdfName(csValue));
163
+ }
164
+ }
165
+ /**
166
+ * Gets or sets a value indicating whether this PdfGradientBrush is stroking.
167
+ * @public
168
+ */
169
+ public get stroking(): boolean {
170
+ return this.mbStroking;
171
+ }
172
+ public set stroking(value: boolean) {
173
+ this.mbStroking = value;
174
+ }
175
+ /**
176
+ * Gets the pattern dictionary.
177
+ * @protected
178
+ */
179
+ protected get patternDictionary(): PdfDictionary {
180
+ if (this.mpatternDictionary == null) {
181
+ this.mpatternDictionary = new PdfDictionary();
182
+ }
183
+ return this.mpatternDictionary;
184
+ }
185
+ /**
186
+ * Gets or sets the shading dictionary.
187
+ * @protected
188
+ */
189
+ protected get shading(): PdfDictionary {
190
+ return this.mshading;
191
+ }
192
+ protected set shading(value: PdfDictionary) {
193
+ if (value == null) {
194
+ throw new Error('ArgumentNullException : Shading');
195
+ }
196
+ if (value !== this.mshading) {
197
+ this.mshading = value;
198
+ this.patternDictionary.items.setValue(this.dictionaryProperties.shading, new PdfReferenceHolder(this.mshading));
199
+ }
200
+ }
201
+ /**
202
+ * Gets or sets the transformation matrix.
203
+ * @public
204
+ */
205
+ public get matrix(): PdfTransformationMatrix {
206
+ return this.mmatrix;
207
+ }
208
+ public set matrix(value: PdfTransformationMatrix) {
209
+ if (value == null) {
210
+ throw new Error('ArgumentNullException : Matrix');
211
+ }
212
+ if (value !== this.mmatrix) {
213
+ this.mmatrix = value.clone();
214
+ let m: PdfArray = new PdfArray(this.mmatrix.matrix.elements);
215
+ this.mpatternDictionary.items.setValue(this.dictionaryProperties.matrix, m);
216
+ }
217
+ }
218
+ //Overrides
219
+ /**
220
+ * Monitors the changes of the brush and modify PDF state respectfully.
221
+ * @param brush The brush.
222
+ * @param streamWriter The stream writer.
223
+ * @param getResources The get resources delegate.
224
+ * @param saveChanges if set to true the changes should be saved anyway.
225
+ * @param currentColorSpace The current color space.
226
+ */
227
+ /* tslint:disable-next-line:max-line-length */
228
+ public monitorChanges(brush: PdfBrush, streamWriter: PdfStreamWriter, getResources: GetResourceEventHandler, saveChanges: boolean, currentColorSpace: PdfColorSpace): boolean {
229
+ let diff: boolean = false;
230
+ if (brush instanceof PdfGradientBrush) {
231
+ if ((this.colorSpace !== currentColorSpace)) {
232
+ this.colorSpace = currentColorSpace;
233
+ this.resetFunction();
234
+ }
235
+ // Set the /Pattern colour space.
236
+ streamWriter.setColorSpace('Pattern', this.mbStroking);
237
+ // Set the pattern for non-stroking operations.
238
+ let resources : PdfResources = getResources.getResources();
239
+ let name: PdfName = resources.getName(this);
240
+ streamWriter.setColourWithPattern(null, name, this.mbStroking);
241
+ diff = true;
242
+ }
243
+ return diff;
244
+ }
245
+ /**
246
+ * Resets the changes, which were made by the brush.
247
+ * In other words resets the state to the initial one.
248
+ * @param streamWriter The stream writer.
249
+ */
250
+ public resetChanges(streamWriter: PdfStreamWriter): void {
251
+ // Unable reset.
252
+ }
253
+ //Implementation
254
+ /**
255
+ * Converts colorspace enum to a PDF name.
256
+ * @param colorSpace The color space enum value.
257
+ */
258
+ private colorSpaceToDeviceName(colorSpace: PdfColorSpace): string {
259
+ let result: string;
260
+ switch (colorSpace) {
261
+ case PdfColorSpace.Rgb:
262
+ result = 'DeviceRGB';
263
+ break;
264
+ }
265
+ return result;
266
+ }
267
+ /**
268
+ * Resets the pattern dictionary.
269
+ * @param dictionary A new pattern dictionary.
270
+ */
271
+ protected resetPatternDictionary(dictionary: PdfDictionary) : void {
272
+ this.mpatternDictionary = dictionary;
273
+ }
274
+ /**
275
+ * Resets the function.
276
+ */
277
+ public abstract resetFunction() : void;
278
+ /**
279
+ * Clones the anti aliasing value.
280
+ * @param brush The brush.
281
+ */
282
+ protected cloneAntiAliasingValue(brush: PdfGradientBrush) : void {
283
+ if ((brush == null)) {
284
+ throw new Error('ArgumentNullException : brush');
285
+ }
286
+ let sh: PdfDictionary = this.shading;
287
+ let aa: PdfBoolean = (<PdfBoolean>(sh.items.getValue(this.dictionaryProperties.antiAlias)));
288
+ if ((aa != null)) {
289
+ brush.shading.items.setValue(this.dictionaryProperties.antiAlias, new PdfBoolean(aa.value));
290
+ }
291
+ }
292
+ /**
293
+ * Clones the background value.
294
+ * @param brush The brush.
295
+ */
296
+ protected cloneBackgroundValue(brush: PdfGradientBrush) : void {
297
+ let background: PdfColor = this.background;
298
+ if (!background.isEmpty) {
299
+ brush.background = background;
300
+ }
301
+ }
302
+ /* tslint:enable */
303
+ // IPdfWrapper Members
304
+ /**
305
+ * Gets the `element`.
306
+ * @private
307
+ */
308
+ public get element() : IPdfPrimitive {
309
+ return this.patternDictionary;
310
+ }
311
+ }