@syncfusion/ej2-pdf-export 24.1.41 → 24.2.3
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 +10 -0
- 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 +157 -28
- package/dist/es6/ej2-pdf-export.es2015.js.map +1 -1
- package/dist/es6/ej2-pdf-export.es5.js +157 -28
- 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/package.json +6 -6
- package/src/implementation/graphics/pdf-graphics.d.ts +35 -0
- package/src/implementation/graphics/pdf-graphics.js +157 -29
- package/dist/ts/implementation/actions/action.ts +0 -76
- package/dist/ts/implementation/actions/uri-action.ts +0 -52
- package/dist/ts/implementation/annotations/action-link-annotation.ts +0 -43
- package/dist/ts/implementation/annotations/annotation-collection.ts +0 -159
- package/dist/ts/implementation/annotations/annotation.ts +0 -241
- package/dist/ts/implementation/annotations/document-link-annotation.ts +0 -118
- package/dist/ts/implementation/annotations/link-annotation.ts +0 -32
- package/dist/ts/implementation/annotations/pdf-text-web-link.ts +0 -265
- package/dist/ts/implementation/annotations/uri-annotation.ts +0 -86
- package/dist/ts/implementation/collections/dictionary.ts +0 -150
- package/dist/ts/implementation/collections/object-object-pair/dictionary.ts +0 -125
- package/dist/ts/implementation/collections/utils.ts +0 -38
- package/dist/ts/implementation/document/automatic-fields/automatic-field-info-collection.ts +0 -39
- package/dist/ts/implementation/document/automatic-fields/automatic-field-info.ts +0 -108
- package/dist/ts/implementation/document/automatic-fields/automatic-field.ts +0 -127
- package/dist/ts/implementation/document/automatic-fields/composite-field.ts +0 -76
- package/dist/ts/implementation/document/automatic-fields/multiple-value-field.ts +0 -37
- package/dist/ts/implementation/document/automatic-fields/page-count-field.ts +0 -75
- package/dist/ts/implementation/document/automatic-fields/pdf-numbers-convertor.ts +0 -157
- package/dist/ts/implementation/document/automatic-fields/pdf-page-number-field.ts +0 -82
- package/dist/ts/implementation/document/automatic-fields/pdf-template-value-pair.ts +0 -60
- package/dist/ts/implementation/document/automatic-fields/single-value-field.ts +0 -48
- package/dist/ts/implementation/document/pdf-catalog.ts +0 -65
- package/dist/ts/implementation/document/pdf-document-base.ts +0 -180
- package/dist/ts/implementation/document/pdf-document-template.ts +0 -310
- package/dist/ts/implementation/document/pdf-document.ts +0 -342
- package/dist/ts/implementation/document/pdf-viewer-preferences.ts +0 -578
- package/dist/ts/implementation/drawing/pdf-drawing.ts +0 -218
- package/dist/ts/implementation/general/enum.ts +0 -21
- package/dist/ts/implementation/general/functions/pdf-function.ts +0 -66
- package/dist/ts/implementation/general/functions/pdf-sampled-function.ts +0 -63
- package/dist/ts/implementation/general/pdf-cache-collection.ts +0 -97
- package/dist/ts/implementation/general/pdf-collection.ts +0 -41
- package/dist/ts/implementation/general/pdf-destination.ts +0 -170
- package/dist/ts/implementation/graphics/brushes/enum.ts +0 -237
- package/dist/ts/implementation/graphics/brushes/pdf-blend.ts +0 -294
- package/dist/ts/implementation/graphics/brushes/pdf-brush.ts +0 -68
- package/dist/ts/implementation/graphics/brushes/pdf-brushes.ts +0 -2438
- package/dist/ts/implementation/graphics/brushes/pdf-color-blend.ts +0 -295
- package/dist/ts/implementation/graphics/brushes/pdf-gradient-brush.ts +0 -311
- package/dist/ts/implementation/graphics/brushes/pdf-linear-gradient-brush.ts +0 -406
- package/dist/ts/implementation/graphics/brushes/pdf-radial-gradient-brush.ts +0 -290
- package/dist/ts/implementation/graphics/brushes/pdf-solid-brush.ts +0 -107
- package/dist/ts/implementation/graphics/brushes/pdf-tiling-brush.ts +0 -304
- package/dist/ts/implementation/graphics/constants.ts +0 -31
- package/dist/ts/implementation/graphics/enum.ts +0 -413
- package/dist/ts/implementation/graphics/figures/arc.ts +0 -133
- package/dist/ts/implementation/graphics/figures/base/draw-element.ts +0 -59
- package/dist/ts/implementation/graphics/figures/base/element-layouter.ts +0 -260
- package/dist/ts/implementation/graphics/figures/base/fill-element.ts +0 -72
- package/dist/ts/implementation/graphics/figures/base/graphics-element.ts +0 -34
- package/dist/ts/implementation/graphics/figures/base/pdf-shape-element.ts +0 -69
- package/dist/ts/implementation/graphics/figures/base/shape-layouter.ts +0 -276
- package/dist/ts/implementation/graphics/figures/base/text-layouter.ts +0 -205
- package/dist/ts/implementation/graphics/figures/ellipse-part.ts +0 -76
- package/dist/ts/implementation/graphics/figures/enum.ts +0 -80
- package/dist/ts/implementation/graphics/figures/layout-element.ts +0 -132
- package/dist/ts/implementation/graphics/figures/path.ts +0 -646
- package/dist/ts/implementation/graphics/figures/pdf-template.ts +0 -205
- package/dist/ts/implementation/graphics/figures/rectangle-area.ts +0 -108
- package/dist/ts/implementation/graphics/figures/text-element.ts +0 -445
- package/dist/ts/implementation/graphics/fonts/enum.ts +0 -385
- package/dist/ts/implementation/graphics/fonts/pdf-font-metrics.ts +0 -248
- package/dist/ts/implementation/graphics/fonts/pdf-font.ts +0 -316
- package/dist/ts/implementation/graphics/fonts/pdf-standard-font-metrics-factory.ts +0 -606
- package/dist/ts/implementation/graphics/fonts/pdf-standard-font.ts +0 -243
- package/dist/ts/implementation/graphics/fonts/pdf-string-format.ts +0 -474
- package/dist/ts/implementation/graphics/fonts/pdf-true-type-font.ts +0 -165
- package/dist/ts/implementation/graphics/fonts/rtl/rtl-bidirectional.ts +0 -958
- package/dist/ts/implementation/graphics/fonts/rtl/rtl-text-shape.ts +0 -374
- package/dist/ts/implementation/graphics/fonts/rtl-renderer.ts +0 -255
- package/dist/ts/implementation/graphics/fonts/string-layouter.ts +0 -617
- package/dist/ts/implementation/graphics/fonts/string-tokenizer.ts +0 -275
- package/dist/ts/implementation/graphics/fonts/ttf-OS2-Table.ts +0 -206
- package/dist/ts/implementation/graphics/fonts/ttf-apple-cmap-sub-table.ts +0 -18
- package/dist/ts/implementation/graphics/fonts/ttf-cmap-sub-table.ts +0 -18
- package/dist/ts/implementation/graphics/fonts/ttf-cmap-table.ts +0 -14
- package/dist/ts/implementation/graphics/fonts/ttf-glyph-header.ts +0 -26
- package/dist/ts/implementation/graphics/fonts/ttf-glyph-info.ts +0 -35
- package/dist/ts/implementation/graphics/fonts/ttf-head-table.ts +0 -94
- package/dist/ts/implementation/graphics/fonts/ttf-horizontal-header-table.ts +0 -56
- package/dist/ts/implementation/graphics/fonts/ttf-loca-table.ts +0 -10
- package/dist/ts/implementation/graphics/fonts/ttf-long-hor-metric.ts +0 -14
- package/dist/ts/implementation/graphics/fonts/ttf-metrics.ts +0 -106
- package/dist/ts/implementation/graphics/fonts/ttf-microsoft-cmap-sub-table.ts +0 -58
- package/dist/ts/implementation/graphics/fonts/ttf-name-record.ts +0 -33
- package/dist/ts/implementation/graphics/fonts/ttf-name-table.ts +0 -22
- package/dist/ts/implementation/graphics/fonts/ttf-post-table.ts +0 -42
- package/dist/ts/implementation/graphics/fonts/ttf-reader.ts +0 -1254
- package/dist/ts/implementation/graphics/fonts/ttf-table-info.ts +0 -26
- package/dist/ts/implementation/graphics/fonts/ttf-trimmed-cmap-sub-table.ts +0 -26
- package/dist/ts/implementation/graphics/fonts/unicode-true-type-font.ts +0 -577
- package/dist/ts/implementation/graphics/images/byte-array.ts +0 -137
- package/dist/ts/implementation/graphics/images/image-decoder.ts +0 -439
- package/dist/ts/implementation/graphics/images/pdf-bitmap.ts +0 -110
- package/dist/ts/implementation/graphics/images/pdf-image.ts +0 -132
- package/dist/ts/implementation/graphics/pdf-color.ts +0 -478
- package/dist/ts/implementation/graphics/pdf-graphics.ts +0 -2429
- package/dist/ts/implementation/graphics/pdf-margins.ts +0 -124
- package/dist/ts/implementation/graphics/pdf-pen.ts +0 -370
- package/dist/ts/implementation/graphics/pdf-resources.ts +0 -300
- package/dist/ts/implementation/graphics/pdf-transformation-matrix.ts +0 -246
- package/dist/ts/implementation/graphics/pdf-transparency.ts +0 -93
- package/dist/ts/implementation/graphics/unit-convertor.ts +0 -96
- package/dist/ts/implementation/input-output/big-endian-writer.ts +0 -121
- package/dist/ts/implementation/input-output/cross-table.ts +0 -21
- package/dist/ts/implementation/input-output/enum.ts +0 -16
- package/dist/ts/implementation/input-output/pdf-cross-table.ts +0 -524
- package/dist/ts/implementation/input-output/pdf-dictionary-properties.ts +0 -571
- package/dist/ts/implementation/input-output/pdf-main-object-collection.ts +0 -194
- package/dist/ts/implementation/input-output/pdf-operators.ts +0 -363
- package/dist/ts/implementation/input-output/pdf-stream-writer.ts +0 -681
- package/dist/ts/implementation/input-output/pdf-writer.ts +0 -88
- package/dist/ts/implementation/pages/enum.ts +0 -201
- package/dist/ts/implementation/pages/page-added-event-arguments.ts +0 -39
- package/dist/ts/implementation/pages/pdf-document-page-collection.ts +0 -180
- package/dist/ts/implementation/pages/pdf-page-base.ts +0 -181
- package/dist/ts/implementation/pages/pdf-page-layer-collection.ts +0 -348
- package/dist/ts/implementation/pages/pdf-page-layer.ts +0 -271
- package/dist/ts/implementation/pages/pdf-page-settings.ts +0 -192
- package/dist/ts/implementation/pages/pdf-page-size.ts +0 -162
- package/dist/ts/implementation/pages/pdf-page-template-element.ts +0 -663
- package/dist/ts/implementation/pages/pdf-page.ts +0 -235
- package/dist/ts/implementation/pages/pdf-section-collection.ts +0 -187
- package/dist/ts/implementation/pages/pdf-section-page-collection.ts +0 -61
- package/dist/ts/implementation/pages/pdf-section-templates.ts +0 -96
- package/dist/ts/implementation/pages/pdf-section.ts +0 -644
- package/dist/ts/implementation/primitives/pdf-array.ts +0 -386
- package/dist/ts/implementation/primitives/pdf-boolean.ts +0 -119
- package/dist/ts/implementation/primitives/pdf-dictionary.ts +0 -513
- package/dist/ts/implementation/primitives/pdf-name.ts +0 -218
- package/dist/ts/implementation/primitives/pdf-number.ts +0 -165
- package/dist/ts/implementation/primitives/pdf-reference.ts +0 -430
- package/dist/ts/implementation/primitives/pdf-stream.ts +0 -306
- package/dist/ts/implementation/primitives/pdf-string.ts +0 -397
- package/dist/ts/implementation/structured-elements/grid/layout/grid-layouter.ts +0 -2027
- package/dist/ts/implementation/structured-elements/grid/pdf-grid-cell.ts +0 -1193
- package/dist/ts/implementation/structured-elements/grid/pdf-grid-column.ts +0 -206
- package/dist/ts/implementation/structured-elements/grid/pdf-grid-row.ts +0 -470
- package/dist/ts/implementation/structured-elements/grid/pdf-grid.ts +0 -853
- package/dist/ts/implementation/structured-elements/grid/styles/pdf-borders.ts +0 -240
- package/dist/ts/implementation/structured-elements/grid/styles/style.ts +0 -424
- package/dist/ts/implementation/structured-elements/tables/light-tables/enum.ts +0 -16
- package/dist/ts/interfaces/i-pdf-cache.ts +0 -23
- package/dist/ts/interfaces/i-pdf-changable.ts +0 -17
- package/dist/ts/interfaces/i-pdf-clonable.ts +0 -12
- package/dist/ts/interfaces/i-pdf-primitives.ts +0 -45
- package/dist/ts/interfaces/i-pdf-true-type-font.ts +0 -48
- package/dist/ts/interfaces/i-pdf-wrapper.ts +0 -13
- package/dist/ts/interfaces/i-pdf-writer.ts +0 -29
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ByteArray class
|
|
3
|
-
* Used to keep information about image stream as byte array.
|
|
4
|
-
* @private
|
|
5
|
-
*/
|
|
6
|
-
export class ByteArray {
|
|
7
|
-
/**
|
|
8
|
-
* Current stream `position`.
|
|
9
|
-
* @default 0
|
|
10
|
-
* @private
|
|
11
|
-
*/
|
|
12
|
-
private mPosition: number = 0;
|
|
13
|
-
/**
|
|
14
|
-
* Uint8Array for returing `buffer`.
|
|
15
|
-
* @hidden
|
|
16
|
-
* @private
|
|
17
|
-
*/
|
|
18
|
-
private buffer: Uint8Array;
|
|
19
|
-
/**
|
|
20
|
-
* Specifies the `data view`.
|
|
21
|
-
* @hidden
|
|
22
|
-
* @private
|
|
23
|
-
*/
|
|
24
|
-
private dataView: DataView;
|
|
25
|
-
/**
|
|
26
|
-
* Initialize the new instance for `byte-array` class
|
|
27
|
-
* @hidden
|
|
28
|
-
* @private
|
|
29
|
-
*/
|
|
30
|
-
constructor(length: number) {
|
|
31
|
-
this.buffer = new Uint8Array(length);
|
|
32
|
-
this.dataView = new DataView(this.buffer.buffer);
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Gets and Sets a current `position` of byte array.
|
|
36
|
-
* @hidden
|
|
37
|
-
* @private
|
|
38
|
-
*/
|
|
39
|
-
public get position(): number {
|
|
40
|
-
return this.mPosition;
|
|
41
|
-
}
|
|
42
|
-
public set position(value: number) {
|
|
43
|
-
this.mPosition = value;
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* `Read` from current stream position.
|
|
47
|
-
* @default 0
|
|
48
|
-
* @hidden
|
|
49
|
-
* @private
|
|
50
|
-
*/
|
|
51
|
-
public read(buffer: ByteArray, offset: number, count: number): void {
|
|
52
|
-
for (let index: number = offset; index < count; index++) {
|
|
53
|
-
let position: number = this.position;
|
|
54
|
-
buffer.buffer[index] = this.readByte(position);
|
|
55
|
-
this.position++;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* @hidden
|
|
60
|
-
*/
|
|
61
|
-
public getBuffer(index: number): number {
|
|
62
|
-
return this.buffer[index];
|
|
63
|
-
}
|
|
64
|
-
/**
|
|
65
|
-
* @hidden
|
|
66
|
-
*/
|
|
67
|
-
public writeFromBase64String(base64: string): void {
|
|
68
|
-
let arr: Uint8Array = this.encodedString(base64);
|
|
69
|
-
this.buffer = arr;
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* @hidden
|
|
73
|
-
*/
|
|
74
|
-
public encodedString(input: string): Uint8Array {
|
|
75
|
-
let keyStr: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
|
|
76
|
-
let chr1: number;
|
|
77
|
-
let chr2: number;
|
|
78
|
-
let chr3: number;
|
|
79
|
-
let enc1: number;
|
|
80
|
-
let enc2: number;
|
|
81
|
-
let enc3: number;
|
|
82
|
-
let enc4: number;
|
|
83
|
-
let i: number = 0;
|
|
84
|
-
let resultIndex: number = 0;
|
|
85
|
-
let dataUrlPrefix: string = 'data:';
|
|
86
|
-
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');
|
|
87
|
-
let totalLength: number = input.length * 3 / 4;
|
|
88
|
-
if (input.charAt(input.length - 1) === keyStr.charAt(64)) {
|
|
89
|
-
totalLength--;
|
|
90
|
-
}
|
|
91
|
-
let output: Uint8Array = new Uint8Array(totalLength | 0);
|
|
92
|
-
while (i < input.length) {
|
|
93
|
-
enc1 = keyStr.indexOf(input.charAt(i++));
|
|
94
|
-
enc2 = keyStr.indexOf(input.charAt(i++));
|
|
95
|
-
enc3 = keyStr.indexOf(input.charAt(i++));
|
|
96
|
-
enc4 = keyStr.indexOf(input.charAt(i++));
|
|
97
|
-
chr1 = (enc1 << 2) | (enc2 >> 4);
|
|
98
|
-
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
|
99
|
-
chr3 = ((enc3 & 3) << 6) | enc4;
|
|
100
|
-
output[resultIndex++] = chr1;
|
|
101
|
-
output[resultIndex++] = chr2;
|
|
102
|
-
output[resultIndex++] = chr3;
|
|
103
|
-
}
|
|
104
|
-
return output;
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* @hidden
|
|
108
|
-
*/
|
|
109
|
-
public readByte(offset: number): number {
|
|
110
|
-
return (this.buffer[offset]);
|
|
111
|
-
}
|
|
112
|
-
/**
|
|
113
|
-
* @hidden
|
|
114
|
-
*/
|
|
115
|
-
public get internalBuffer(): Uint8Array {
|
|
116
|
-
return this.buffer;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* @hidden
|
|
120
|
-
*/
|
|
121
|
-
public get count(): number {
|
|
122
|
-
return this.buffer.byteLength;
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* 'readNextTwoBytes' stream
|
|
126
|
-
* @hidden
|
|
127
|
-
* @private
|
|
128
|
-
*/
|
|
129
|
-
public readNextTwoBytes(stream: ByteArray): number {
|
|
130
|
-
let data : number = stream.readByte(this.position);
|
|
131
|
-
this.position++;
|
|
132
|
-
data <<= 8;
|
|
133
|
-
data |= stream.readByte(this.position);
|
|
134
|
-
this.position++;
|
|
135
|
-
return data;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
@@ -1,439 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ImageDecoder class
|
|
3
|
-
*/
|
|
4
|
-
import { ByteArray } from './byte-array';
|
|
5
|
-
import { PdfStream } from './../../primitives/pdf-stream';
|
|
6
|
-
import { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';
|
|
7
|
-
import { PdfName } from './../../primitives/pdf-name';
|
|
8
|
-
import { PdfNumber } from './../../primitives/pdf-number';
|
|
9
|
-
import { PdfBoolean } from './../../primitives/pdf-boolean';
|
|
10
|
-
import { PdfDictionary } from './../../primitives/pdf-dictionary';
|
|
11
|
-
/**
|
|
12
|
-
* Specifies the image `format`.
|
|
13
|
-
* @private
|
|
14
|
-
*/
|
|
15
|
-
export enum ImageFormat {
|
|
16
|
-
/**
|
|
17
|
-
* Specifies the type of `Unknown`.
|
|
18
|
-
* @hidden
|
|
19
|
-
* @private
|
|
20
|
-
*/
|
|
21
|
-
Unknown,
|
|
22
|
-
/**
|
|
23
|
-
* Specifies the type of `Bmp`.
|
|
24
|
-
* @hidden
|
|
25
|
-
* @private
|
|
26
|
-
*/
|
|
27
|
-
Bmp,
|
|
28
|
-
/**
|
|
29
|
-
* Specifies the type of `Emf`.
|
|
30
|
-
* @hidden
|
|
31
|
-
* @private
|
|
32
|
-
*/
|
|
33
|
-
Emf,
|
|
34
|
-
/**
|
|
35
|
-
* Specifies the type of `Gif`.
|
|
36
|
-
* @hidden
|
|
37
|
-
* @private
|
|
38
|
-
*/
|
|
39
|
-
Gif,
|
|
40
|
-
/**
|
|
41
|
-
* Specifies the type of `Jpeg`.
|
|
42
|
-
* @hidden
|
|
43
|
-
* @private
|
|
44
|
-
*/
|
|
45
|
-
Jpeg,
|
|
46
|
-
/**
|
|
47
|
-
* Specifies the type of `Png`.
|
|
48
|
-
* @hidden
|
|
49
|
-
* @private
|
|
50
|
-
*/
|
|
51
|
-
Png,
|
|
52
|
-
/**
|
|
53
|
-
* Specifies the type of `Wmf`.
|
|
54
|
-
* @hidden
|
|
55
|
-
* @private
|
|
56
|
-
*/
|
|
57
|
-
Wmf,
|
|
58
|
-
/**
|
|
59
|
-
* Specifies the type of `Icon`.
|
|
60
|
-
* @hidden
|
|
61
|
-
* @private
|
|
62
|
-
*/
|
|
63
|
-
Icon
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* `Decode the image stream`.
|
|
67
|
-
* @private
|
|
68
|
-
*/
|
|
69
|
-
export class ImageDecoder {
|
|
70
|
-
/**
|
|
71
|
-
* Start of file markers.
|
|
72
|
-
* @hidden
|
|
73
|
-
* @private
|
|
74
|
-
*/
|
|
75
|
-
private sof1Marker : number = 0x00C1;
|
|
76
|
-
private sof2Marker : number = 0x00C2;
|
|
77
|
-
private sof3Marker : number = 0x00C3;
|
|
78
|
-
private sof5Marker : number = 0x00C5;
|
|
79
|
-
private sof6Marker : number = 0x00C6;
|
|
80
|
-
private sof7Marker : number = 0x00C7;
|
|
81
|
-
private sof9Marker : number = 0x00C9;
|
|
82
|
-
private sof10Marker : number = 0x00CA;
|
|
83
|
-
private sof11Marker : number = 0x00CB;
|
|
84
|
-
private sof13Marker : number = 0x00CD;
|
|
85
|
-
private sof14Marker : number = 0x00CE;
|
|
86
|
-
private sof15Marker : number = 0x00CF;
|
|
87
|
-
/**
|
|
88
|
-
* Number array for `png header`.
|
|
89
|
-
* @hidden
|
|
90
|
-
* @private
|
|
91
|
-
*/
|
|
92
|
-
private static mPngHeader: number[] = [137, 80, 78, 71, 13, 10, 26, 10];
|
|
93
|
-
/**
|
|
94
|
-
* Number Array for `jpeg header`.
|
|
95
|
-
* @hidden
|
|
96
|
-
* @private
|
|
97
|
-
*/
|
|
98
|
-
private static mJpegHeader: number[] = [255, 216];
|
|
99
|
-
/**
|
|
100
|
-
* Number array for `gif header`.
|
|
101
|
-
* @hidden
|
|
102
|
-
* @private
|
|
103
|
-
*/
|
|
104
|
-
private static GIF_HEADER: string = 'G,I,F,8';
|
|
105
|
-
/**
|
|
106
|
-
* Number array for `bmp header.`
|
|
107
|
-
* @hidden
|
|
108
|
-
* @private
|
|
109
|
-
*/
|
|
110
|
-
private static BMP_HEADER: string = 'B,M';
|
|
111
|
-
/**
|
|
112
|
-
* `memory stream` to store image data.
|
|
113
|
-
* @hidden
|
|
114
|
-
* @private
|
|
115
|
-
*/
|
|
116
|
-
private mStream: ByteArray;
|
|
117
|
-
/**
|
|
118
|
-
* Specifies `format` of image.
|
|
119
|
-
* @hidden
|
|
120
|
-
* @private
|
|
121
|
-
*/
|
|
122
|
-
private mFormat: ImageFormat = ImageFormat.Unknown;
|
|
123
|
-
/**
|
|
124
|
-
* `height` of image.
|
|
125
|
-
* @hidden
|
|
126
|
-
* @private
|
|
127
|
-
*/
|
|
128
|
-
private mHeight: number;
|
|
129
|
-
/**
|
|
130
|
-
* `width` of image.
|
|
131
|
-
* @hidden
|
|
132
|
-
* @private
|
|
133
|
-
*/
|
|
134
|
-
private mWidth: number;
|
|
135
|
-
/**
|
|
136
|
-
* `Bits per component`.
|
|
137
|
-
* @default 8
|
|
138
|
-
* @hidden
|
|
139
|
-
* @private
|
|
140
|
-
*/
|
|
141
|
-
private mbitsPerComponent : number = 8;
|
|
142
|
-
/**
|
|
143
|
-
* ByteArray to store `image data`.
|
|
144
|
-
* @hidden
|
|
145
|
-
* @private
|
|
146
|
-
*/
|
|
147
|
-
private mImageData: ByteArray;
|
|
148
|
-
/**
|
|
149
|
-
* Store an instance of `PdfStream` for an image.
|
|
150
|
-
* @hidden
|
|
151
|
-
* @private
|
|
152
|
-
*/
|
|
153
|
-
private imageStream : PdfStream;
|
|
154
|
-
/**
|
|
155
|
-
* 'offset' of image.
|
|
156
|
-
* @hidden
|
|
157
|
-
* @private
|
|
158
|
-
*/
|
|
159
|
-
private offset : number;
|
|
160
|
-
/**
|
|
161
|
-
* Internal variable for accessing fields from `DictionryProperties` class.
|
|
162
|
-
* @hidden
|
|
163
|
-
* @private
|
|
164
|
-
*/
|
|
165
|
-
private dictionaryProperties : DictionaryProperties = new DictionaryProperties();
|
|
166
|
-
/**
|
|
167
|
-
* Initialize the new instance for `image-decoder` class.
|
|
168
|
-
* @private
|
|
169
|
-
*/
|
|
170
|
-
public constructor(stream: ByteArray) {
|
|
171
|
-
this.mStream = stream;
|
|
172
|
-
this.initialize();
|
|
173
|
-
}
|
|
174
|
-
/**
|
|
175
|
-
* Gets the `height` of image.
|
|
176
|
-
* @hidden
|
|
177
|
-
* @private
|
|
178
|
-
*/
|
|
179
|
-
public get height(): number {
|
|
180
|
-
return this.mHeight;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Gets the `width` of image.
|
|
184
|
-
* @hidden
|
|
185
|
-
* @private
|
|
186
|
-
*/
|
|
187
|
-
public get width(): number {
|
|
188
|
-
return this.mWidth;
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Gets `bits per component`.
|
|
192
|
-
* @hidden
|
|
193
|
-
* @private
|
|
194
|
-
*/
|
|
195
|
-
public get bitsPerComponent() : number {
|
|
196
|
-
return this.mbitsPerComponent;
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Gets the `size` of an image data.
|
|
200
|
-
* @hidden
|
|
201
|
-
* @private
|
|
202
|
-
*/
|
|
203
|
-
public get size(): number {
|
|
204
|
-
return this.mImageData.count;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Gets the value of an `image data`.
|
|
208
|
-
* @hidden
|
|
209
|
-
* @private
|
|
210
|
-
*/
|
|
211
|
-
public get imageData(): ByteArray {
|
|
212
|
-
return this.mImageData;
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Gets the value of an `image data as number array`.
|
|
216
|
-
* @hidden
|
|
217
|
-
* @private
|
|
218
|
-
*/
|
|
219
|
-
public get imageDataAsNumberArray() : ArrayBuffer {
|
|
220
|
-
return this.mImageData.internalBuffer.buffer;
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* `Initialize` image data and image stream.
|
|
224
|
-
* @hidden
|
|
225
|
-
* @private
|
|
226
|
-
*/
|
|
227
|
-
private initialize(): void {
|
|
228
|
-
if (this.mFormat === ImageFormat.Unknown && this.checkIfJpeg()) {
|
|
229
|
-
this.mFormat = ImageFormat.Jpeg;
|
|
230
|
-
this.parseJpegImage();
|
|
231
|
-
} else {
|
|
232
|
-
throw new TypeError('Only the JPEG format is supported');
|
|
233
|
-
}
|
|
234
|
-
this.reset();
|
|
235
|
-
this.mImageData = new ByteArray(this.mStream.count);
|
|
236
|
-
this.mStream.read(this.mImageData, 0, this.mImageData.count);
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* `Reset` stream position into 0.
|
|
240
|
-
* @hidden
|
|
241
|
-
* @private
|
|
242
|
-
*/
|
|
243
|
-
private reset(): void {
|
|
244
|
-
this.mStream.position = 0;
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* `Parse` Jpeg image.
|
|
248
|
-
* @hidden
|
|
249
|
-
* @private
|
|
250
|
-
*/
|
|
251
|
-
private parseJpegImage(): void {
|
|
252
|
-
this.reset();
|
|
253
|
-
let imgData: ByteArray = new ByteArray(this.mStream.count);
|
|
254
|
-
this.mStream.read(imgData, 0, imgData.count);
|
|
255
|
-
let i: number = 4;
|
|
256
|
-
let isLengthExceed : boolean = false;
|
|
257
|
-
/* tslint:disable */
|
|
258
|
-
let length: number = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);
|
|
259
|
-
while (i < imgData.count) {
|
|
260
|
-
i += length;
|
|
261
|
-
if (i < imgData.count) {
|
|
262
|
-
if (imgData.getBuffer(i + 1) === 192) {
|
|
263
|
-
this.mHeight = imgData.getBuffer(i + 5) * 256 + imgData.getBuffer(i + 6);
|
|
264
|
-
this.mWidth = imgData.getBuffer(i + 7) * 256 + imgData.getBuffer(i + 8);
|
|
265
|
-
return;
|
|
266
|
-
} else {
|
|
267
|
-
i += 2;
|
|
268
|
-
length = imgData.getBuffer(i) * 256 + imgData.getBuffer(i + 1);
|
|
269
|
-
}
|
|
270
|
-
} else {
|
|
271
|
-
isLengthExceed = true;
|
|
272
|
-
break;
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
if (isLengthExceed) {
|
|
276
|
-
this.mStream.position = 0;
|
|
277
|
-
this.skip(this.mStream, 2);
|
|
278
|
-
this.readExceededJPGImage(this.mStream);
|
|
279
|
-
}
|
|
280
|
-
/* tslint:enable */
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Gets the image `format`.
|
|
284
|
-
* @private
|
|
285
|
-
* @hidden
|
|
286
|
-
*/
|
|
287
|
-
public get format(): ImageFormat {
|
|
288
|
-
return this.mFormat;
|
|
289
|
-
}
|
|
290
|
-
/**
|
|
291
|
-
* `Checks if JPG`.
|
|
292
|
-
* @private
|
|
293
|
-
* @hidden
|
|
294
|
-
*/
|
|
295
|
-
private checkIfJpeg(): boolean {
|
|
296
|
-
this.reset();
|
|
297
|
-
for (let i: number = 0; i < ImageDecoder.mJpegHeader.length; i++) {
|
|
298
|
-
if (ImageDecoder.mJpegHeader[i] !== this.mStream.readByte(i)) {
|
|
299
|
-
return false;
|
|
300
|
-
}
|
|
301
|
-
this.mStream.position++;
|
|
302
|
-
}
|
|
303
|
-
return true;
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Return image `dictionary`.
|
|
307
|
-
* @hidden
|
|
308
|
-
* @private
|
|
309
|
-
*/
|
|
310
|
-
public getImageDictionary() : PdfStream {
|
|
311
|
-
if (this.mFormat === ImageFormat.Jpeg) {
|
|
312
|
-
let tempArrayBuffer : number = this.imageData.internalBuffer.length;
|
|
313
|
-
this.imageStream = new PdfStream();
|
|
314
|
-
this.imageStream.isResource = true;
|
|
315
|
-
let tempString : string = '';
|
|
316
|
-
let decodedString : string = '';
|
|
317
|
-
for (let i : number = 0; i < this.imageDataAsNumberArray.byteLength; i++ ) {
|
|
318
|
-
tempString += String.fromCharCode(null, this.mStream.readByte(i));
|
|
319
|
-
}
|
|
320
|
-
for (let i : number = 0; i < tempString.length; i++) {
|
|
321
|
-
if (i % 2 !== 0) {
|
|
322
|
-
decodedString += tempString[i];
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
this.imageStream.data = [decodedString];
|
|
326
|
-
this.imageStream.compress = false;
|
|
327
|
-
this.imageStream.items.setValue(this.dictionaryProperties.type, new PdfName(this.dictionaryProperties.xObject));
|
|
328
|
-
this.imageStream.items.setValue(this.dictionaryProperties.subtype, new PdfName(this.dictionaryProperties.image));
|
|
329
|
-
this.imageStream.items.setValue(this.dictionaryProperties.width, new PdfNumber(this.width));
|
|
330
|
-
this.imageStream.items.setValue(this.dictionaryProperties.height, new PdfNumber(this.height));
|
|
331
|
-
this.imageStream.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));
|
|
332
|
-
this.imageStream.items.setValue(this.dictionaryProperties.filter, new PdfName(this.dictionaryProperties.dctdecode));
|
|
333
|
-
this.imageStream.items.setValue(this.dictionaryProperties.colorSpace, new PdfName(this.getColorSpace() as string));
|
|
334
|
-
this.imageStream.items.setValue(this.dictionaryProperties.decodeParms, this.getDecodeParams());
|
|
335
|
-
return this.imageStream;
|
|
336
|
-
} else {
|
|
337
|
-
return this.imageStream;
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
/**
|
|
341
|
-
* Return `colorSpace` of an image.
|
|
342
|
-
* @hidden
|
|
343
|
-
* @private
|
|
344
|
-
*/
|
|
345
|
-
private getColorSpace() : string {
|
|
346
|
-
return this.dictionaryProperties.deviceRgb;
|
|
347
|
-
}
|
|
348
|
-
/**
|
|
349
|
-
* Return `decode parameters` of an image.
|
|
350
|
-
* @hidden
|
|
351
|
-
* @private
|
|
352
|
-
*/
|
|
353
|
-
private getDecodeParams() : PdfDictionary {
|
|
354
|
-
let decodeParams : PdfDictionary = new PdfDictionary();
|
|
355
|
-
decodeParams.items.setValue(this.dictionaryProperties.columns, new PdfNumber(this.width));
|
|
356
|
-
decodeParams.items.setValue(this.dictionaryProperties.blackIs1, new PdfBoolean(true));
|
|
357
|
-
decodeParams.items.setValue(this.dictionaryProperties.k, new PdfNumber(-1));
|
|
358
|
-
decodeParams.items.setValue(this.dictionaryProperties.predictor, new PdfNumber(15));
|
|
359
|
-
decodeParams.items.setValue(this.dictionaryProperties.bitsPerComponent, new PdfNumber(this.bitsPerComponent));
|
|
360
|
-
return decodeParams;
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
/**
|
|
364
|
-
* 'readExceededJPGImage' stream
|
|
365
|
-
* @hidden
|
|
366
|
-
* @private
|
|
367
|
-
*/
|
|
368
|
-
private readExceededJPGImage(stream: ByteArray): void {
|
|
369
|
-
this.mStream = stream;
|
|
370
|
-
let isContinueReading : boolean = true;
|
|
371
|
-
while (isContinueReading) {
|
|
372
|
-
let marker : number = this.getMarker(stream);
|
|
373
|
-
switch (marker) {
|
|
374
|
-
case this.sof1Marker:
|
|
375
|
-
case this.sof2Marker:
|
|
376
|
-
case this.sof3Marker:
|
|
377
|
-
case this.sof5Marker:
|
|
378
|
-
case this.sof6Marker:
|
|
379
|
-
case this.sof7Marker:
|
|
380
|
-
case this.sof9Marker:
|
|
381
|
-
case this.sof10Marker:
|
|
382
|
-
case this.sof11Marker:
|
|
383
|
-
case this.sof13Marker:
|
|
384
|
-
case this.sof14Marker:
|
|
385
|
-
case this.sof15Marker:
|
|
386
|
-
stream.position += 3;
|
|
387
|
-
this.mHeight = this.mStream.readNextTwoBytes(stream);
|
|
388
|
-
this.mWidth = this.mStream.readNextTwoBytes(stream);
|
|
389
|
-
isContinueReading = false;
|
|
390
|
-
break;
|
|
391
|
-
default:
|
|
392
|
-
this.skipStream(stream);
|
|
393
|
-
break;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
/**
|
|
398
|
-
* 'skip' stream
|
|
399
|
-
* @hidden
|
|
400
|
-
* @private
|
|
401
|
-
*/
|
|
402
|
-
private skip(stream: ByteArray, noOfBytes: number): void {
|
|
403
|
-
this.mStream = stream;
|
|
404
|
-
let temp : ByteArray = new ByteArray(noOfBytes);
|
|
405
|
-
this.mStream.read(temp, 0, temp.count);
|
|
406
|
-
}
|
|
407
|
-
/**
|
|
408
|
-
* 'getMarker' stream
|
|
409
|
-
* @hidden
|
|
410
|
-
* @private
|
|
411
|
-
*/
|
|
412
|
-
private getMarker(stream: ByteArray): number {
|
|
413
|
-
let skippedByte : number = 0;
|
|
414
|
-
let marker : number = 32;
|
|
415
|
-
marker = stream.readByte(this.mStream.position);
|
|
416
|
-
stream.position++;
|
|
417
|
-
while (marker !== 255) {
|
|
418
|
-
skippedByte++;
|
|
419
|
-
marker = stream.readByte(this.mStream.position); stream.position++;
|
|
420
|
-
}
|
|
421
|
-
do {
|
|
422
|
-
marker = stream.readByte(this.mStream.position);
|
|
423
|
-
stream.position++;
|
|
424
|
-
}
|
|
425
|
-
while (marker === 255);
|
|
426
|
-
return marker;
|
|
427
|
-
}
|
|
428
|
-
/**
|
|
429
|
-
* 'skipStream' stream
|
|
430
|
-
* @hidden
|
|
431
|
-
* @private
|
|
432
|
-
*/
|
|
433
|
-
private skipStream(stream: ByteArray): void {
|
|
434
|
-
let markerLength : number = this.mStream.readNextTwoBytes(stream) - 2;
|
|
435
|
-
if (markerLength > 0) {
|
|
436
|
-
stream.position += markerLength;
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
}
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* PdfBitmap.ts class for EJ2-PDF
|
|
3
|
-
*/
|
|
4
|
-
import { ImageDecoder } from './../../graphics/images/image-decoder';
|
|
5
|
-
import { ByteArray } from './../../graphics/images/byte-array';
|
|
6
|
-
import { DictionaryProperties } from './../../input-output/pdf-dictionary-properties';
|
|
7
|
-
import { PdfImage } from './pdf-image';
|
|
8
|
-
/**
|
|
9
|
-
* The 'PdfBitmap' contains methods and properties to handle the Bitmap images.
|
|
10
|
-
* ```typescript
|
|
11
|
-
* // create a new PDF document.
|
|
12
|
-
* let document : PdfDocument = new PdfDocument();
|
|
13
|
-
* // add a page to the document.
|
|
14
|
-
* let page1 : PdfPage = document.pages.add();
|
|
15
|
-
* // base64 string of an image
|
|
16
|
-
* let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';
|
|
17
|
-
* // load the image from the base64 string of original image.
|
|
18
|
-
* let image : PdfBitmap = new PdfBitmap(imageString);
|
|
19
|
-
* // draw the image
|
|
20
|
-
* page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));
|
|
21
|
-
* // save the document.
|
|
22
|
-
* document.save('output.pdf');
|
|
23
|
-
* // destroy the document
|
|
24
|
-
* document.destroy();
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
|
-
export class PdfBitmap extends PdfImage {
|
|
28
|
-
//Fields
|
|
29
|
-
/**
|
|
30
|
-
* Specifies the `status` of an image.
|
|
31
|
-
* @default true.
|
|
32
|
-
* @hidden
|
|
33
|
-
* @private
|
|
34
|
-
*/
|
|
35
|
-
private imageStatus : boolean = true;
|
|
36
|
-
/**
|
|
37
|
-
* Internal variable for accessing fields from `DictionryProperties` class.
|
|
38
|
-
* @hidden
|
|
39
|
-
* @private
|
|
40
|
-
*/
|
|
41
|
-
private dictionaryProperties : DictionaryProperties = new DictionaryProperties();
|
|
42
|
-
/**
|
|
43
|
-
* `Type` of an image.
|
|
44
|
-
* @hidden
|
|
45
|
-
* @private
|
|
46
|
-
*/
|
|
47
|
-
public checkImageType : number;
|
|
48
|
-
//Properties
|
|
49
|
-
/**
|
|
50
|
-
* Object to store `decoder` of an image.
|
|
51
|
-
* @hidden
|
|
52
|
-
* @private
|
|
53
|
-
*/
|
|
54
|
-
public decoder : ImageDecoder;
|
|
55
|
-
/**
|
|
56
|
-
* `Load image`.
|
|
57
|
-
* @hidden
|
|
58
|
-
* @private
|
|
59
|
-
*/
|
|
60
|
-
private loadImage(encodedString : string) : void {
|
|
61
|
-
let task : void = this.initializeAsync(encodedString);
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Create an instance for `PdfBitmap` class.
|
|
65
|
-
* @param encodedString Base64 string of an image.
|
|
66
|
-
* ```typescript
|
|
67
|
-
* // create a new PDF document.
|
|
68
|
-
* let document : PdfDocument = new PdfDocument();
|
|
69
|
-
* // add a page to the document.
|
|
70
|
-
* let page1 : PdfPage = document.pages.add();
|
|
71
|
-
* // base64 string of an image
|
|
72
|
-
* let imageString : string = '/9j/3+2w7em7HzY/KiijFw … 1OEYRUYrQ45yc5OUtz/9k=';
|
|
73
|
-
* //
|
|
74
|
-
* // load the image from the base64 string of original image.
|
|
75
|
-
* let image : PdfBitmap = new PdfBitmap(imageString);
|
|
76
|
-
* //
|
|
77
|
-
* // draw the image
|
|
78
|
-
* page1.graphics.drawImage(image, new RectangleF({x : 10, y : 10}, {width : 200, height : 200}));
|
|
79
|
-
* // save the document.
|
|
80
|
-
* document.save('output.pdf');
|
|
81
|
-
* // destroy the document
|
|
82
|
-
* document.destroy();
|
|
83
|
-
* ```
|
|
84
|
-
*/
|
|
85
|
-
public constructor(encodedString : string) {
|
|
86
|
-
super();
|
|
87
|
-
this.loadImage(encodedString);
|
|
88
|
-
}
|
|
89
|
-
/**
|
|
90
|
-
* `Initialize` image parameters.
|
|
91
|
-
* @private
|
|
92
|
-
*/
|
|
93
|
-
public initializeAsync(encodedString : string) : void {
|
|
94
|
-
let byteArray : ByteArray = new ByteArray(encodedString.length);
|
|
95
|
-
byteArray.writeFromBase64String(encodedString);
|
|
96
|
-
this.decoder = new ImageDecoder(byteArray);
|
|
97
|
-
this.height = this.decoder.height;
|
|
98
|
-
this.width = this.decoder.width;
|
|
99
|
-
// FrameCount = BitmapImageDecoder.FrameCount;
|
|
100
|
-
this.bitsPerComponent = this.decoder.bitsPerComponent;
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* `Saves` the image into stream.
|
|
104
|
-
* @private
|
|
105
|
-
*/
|
|
106
|
-
public save() : void {
|
|
107
|
-
this.imageStatus = true;
|
|
108
|
-
this.imageStream = this.decoder.getImageDictionary();
|
|
109
|
-
}
|
|
110
|
-
}
|