@syncfusion/ej2-pdf-export 20.2.45 → 20.3.47
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ej2-pdf-export.min.js +10 -0
- package/dist/ej2-pdf-export.umd.min.js +1 -1
- package/dist/global/ej2-pdf-export.min.js +1 -1
- package/dist/global/index.d.ts +1 -1
- package/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 +52 -0
- package/dist/ts/implementation/document/pdf-document-base.ts +166 -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/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 +62 -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 +437 -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 +2424 -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 +515 -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 +659 -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 +336 -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 +1189 -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 +8 -7
|
@@ -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
|
+
}
|