@pdfme/pdf-lib 1.18.1 → 1.18.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/cjs/api/PDFDocument.js +195 -225
- package/cjs/api/PDFDocument.js.map +1 -1
- package/cjs/api/PDFEmbeddedFile.js +30 -33
- package/cjs/api/PDFEmbeddedFile.js.map +1 -1
- package/cjs/api/PDFEmbeddedPage.js +5 -7
- package/cjs/api/PDFEmbeddedPage.js.map +1 -1
- package/cjs/api/PDFFont.js +6 -8
- package/cjs/api/PDFFont.js.map +1 -1
- package/cjs/api/PDFImage.js +14 -16
- package/cjs/api/PDFImage.js.map +1 -1
- package/cjs/api/PDFJavaScript.js +19 -22
- package/cjs/api/PDFJavaScript.js.map +1 -1
- package/cjs/api/PDFPage.d.ts.map +1 -1
- package/cjs/api/PDFPage.js +26 -16
- package/cjs/api/PDFPage.js.map +1 -1
- package/cjs/api/PDFPageOptions.d.ts +14 -8
- package/cjs/api/PDFPageOptions.d.ts.map +1 -1
- package/cjs/api/PDFPageOptions.js.map +1 -1
- package/cjs/api/form/PDFField.js +1 -1
- package/cjs/api/form/PDFField.js.map +1 -1
- package/cjs/api/form/PDFForm.js +1 -1
- package/cjs/api/form/PDFForm.js.map +1 -1
- package/cjs/api/form/appearances.js +56 -16
- package/cjs/api/form/appearances.js.map +1 -1
- package/cjs/api/operations.d.ts +15 -0
- package/cjs/api/operations.d.ts.map +1 -1
- package/cjs/api/operations.js +22 -0
- package/cjs/api/operations.js.map +1 -1
- package/cjs/api/svg.d.ts +7 -1
- package/cjs/api/svg.d.ts.map +1 -1
- package/cjs/api/svg.js +332 -1016
- package/cjs/api/svg.js.map +1 -1
- package/cjs/core/PDFContext.js +11 -2
- package/cjs/core/PDFContext.js.map +1 -1
- package/cjs/core/embedders/CustomFontEmbedder.js +62 -74
- package/cjs/core/embedders/CustomFontEmbedder.js.map +1 -1
- package/cjs/core/embedders/CustomFontSubsetEmbedder.js +3 -5
- package/cjs/core/embedders/CustomFontSubsetEmbedder.js.map +1 -1
- package/cjs/core/embedders/FileEmbedder.js +30 -32
- package/cjs/core/embedders/FileEmbedder.js.map +1 -1
- package/cjs/core/embedders/JavaScriptEmbedder.js +12 -14
- package/cjs/core/embedders/JavaScriptEmbedder.js.map +1 -1
- package/cjs/core/embedders/JpegEmbedder.js +54 -59
- package/cjs/core/embedders/JpegEmbedder.js.map +1 -1
- package/cjs/core/embedders/PDFPageEmbedder.js +22 -26
- package/cjs/core/embedders/PDFPageEmbedder.js.map +1 -1
- package/cjs/core/embedders/PngEmbedder.js +20 -25
- package/cjs/core/embedders/PngEmbedder.js.map +1 -1
- package/cjs/core/parser/PDFObjectStreamParser.js +15 -17
- package/cjs/core/parser/PDFObjectStreamParser.js.map +1 -1
- package/cjs/core/parser/PDFParser.js +66 -74
- package/cjs/core/parser/PDFParser.js.map +1 -1
- package/cjs/core/writers/PDFStreamWriter.js +53 -55
- package/cjs/core/writers/PDFStreamWriter.js.map +1 -1
- package/cjs/core/writers/PDFWriter.js +62 -66
- package/cjs/core/writers/PDFWriter.js.map +1 -1
- package/cjs/types/index.d.ts +4 -4
- package/cjs/types/index.d.ts.map +1 -1
- package/dist/pdf-lib.esm.js +1123 -2589
- package/dist/pdf-lib.esm.js.map +1 -1
- package/dist/pdf-lib.esm.min.js +1 -15
- package/dist/pdf-lib.esm.min.js.map +1 -1
- package/dist/pdf-lib.js +1123 -2589
- package/dist/pdf-lib.js.map +1 -1
- package/dist/pdf-lib.min.js +1 -15
- package/dist/pdf-lib.min.js.map +1 -1
- package/es/api/PDFDocument.js +195 -226
- package/es/api/PDFDocument.js.map +1 -1
- package/es/api/PDFEmbeddedFile.js +30 -33
- package/es/api/PDFEmbeddedFile.js.map +1 -1
- package/es/api/PDFEmbeddedPage.js +5 -8
- package/es/api/PDFEmbeddedPage.js.map +1 -1
- package/es/api/PDFFont.js +6 -9
- package/es/api/PDFFont.js.map +1 -1
- package/es/api/PDFImage.js +14 -17
- package/es/api/PDFImage.js.map +1 -1
- package/es/api/PDFJavaScript.js +19 -22
- package/es/api/PDFJavaScript.js.map +1 -1
- package/es/api/PDFPage.d.ts.map +1 -1
- package/es/api/PDFPage.js +26 -17
- package/es/api/PDFPage.js.map +1 -1
- package/es/api/PDFPageOptions.d.ts +14 -8
- package/es/api/PDFPageOptions.d.ts.map +1 -1
- package/es/api/PDFPageOptions.js.map +1 -1
- package/es/api/form/PDFField.js +1 -1
- package/es/api/form/PDFField.js.map +1 -1
- package/es/api/form/PDFForm.js +1 -1
- package/es/api/form/PDFForm.js.map +1 -1
- package/es/api/form/appearances.js +56 -16
- package/es/api/form/appearances.js.map +1 -1
- package/es/api/operations.d.ts +15 -0
- package/es/api/operations.d.ts.map +1 -1
- package/es/api/operations.js +23 -1
- package/es/api/operations.js.map +1 -1
- package/es/api/svg.d.ts +7 -1
- package/es/api/svg.d.ts.map +1 -1
- package/es/api/svg.js +333 -1017
- package/es/api/svg.js.map +1 -1
- package/es/core/PDFContext.js +11 -2
- package/es/core/PDFContext.js.map +1 -1
- package/es/core/embedders/CustomFontEmbedder.js +62 -75
- package/es/core/embedders/CustomFontEmbedder.js.map +1 -1
- package/es/core/embedders/CustomFontSubsetEmbedder.js +3 -6
- package/es/core/embedders/CustomFontSubsetEmbedder.js.map +1 -1
- package/es/core/embedders/FileEmbedder.js +30 -33
- package/es/core/embedders/FileEmbedder.js.map +1 -1
- package/es/core/embedders/JavaScriptEmbedder.js +12 -15
- package/es/core/embedders/JavaScriptEmbedder.js.map +1 -1
- package/es/core/embedders/JpegEmbedder.js +54 -59
- package/es/core/embedders/JpegEmbedder.js.map +1 -1
- package/es/core/embedders/PDFPageEmbedder.js +22 -27
- package/es/core/embedders/PDFPageEmbedder.js.map +1 -1
- package/es/core/embedders/PngEmbedder.js +20 -25
- package/es/core/embedders/PngEmbedder.js.map +1 -1
- package/es/core/parser/PDFObjectStreamParser.js +15 -18
- package/es/core/parser/PDFObjectStreamParser.js.map +1 -1
- package/es/core/parser/PDFParser.js +66 -75
- package/es/core/parser/PDFParser.js.map +1 -1
- package/es/core/writers/PDFStreamWriter.js +53 -56
- package/es/core/writers/PDFStreamWriter.js.map +1 -1
- package/es/core/writers/PDFWriter.js +62 -67
- package/es/core/writers/PDFWriter.js.map +1 -1
- package/es/types/index.d.ts +4 -4
- package/es/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/api/PDFPage.ts +12 -0
- package/src/api/PDFPageOptions.ts +14 -8
- package/src/api/operations.ts +45 -3
- package/src/api/svg.ts +305 -1086
- package/src/types/index.ts +6 -1
- package/ts3.4/cjs/api/PDFPageOptions.d.ts +14 -8
- package/ts3.4/cjs/api/operations.d.ts +15 -0
- package/ts3.4/cjs/api/svg.d.ts +7 -1
- package/ts3.4/cjs/types/index.d.ts +4 -4
- package/ts3.4/es/api/PDFPageOptions.d.ts +14 -8
- package/ts3.4/es/api/operations.d.ts +15 -0
- package/ts3.4/es/api/svg.d.ts +7 -1
- package/ts3.4/es/types/index.d.ts +4 -4
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
import PDFHexString from '../objects/PDFHexString.js';
|
|
3
2
|
class JavaScriptEmbedder {
|
|
4
3
|
constructor(script, scriptName) {
|
|
@@ -8,21 +7,19 @@ class JavaScriptEmbedder {
|
|
|
8
7
|
static for(script, scriptName) {
|
|
9
8
|
return new JavaScriptEmbedder(script, scriptName);
|
|
10
9
|
}
|
|
11
|
-
embedIntoContext(context, ref) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
JS: PDFHexString.fromText(this.script),
|
|
17
|
-
});
|
|
18
|
-
if (ref) {
|
|
19
|
-
context.assign(ref, jsActionDict);
|
|
20
|
-
return ref;
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
return context.register(jsActionDict);
|
|
24
|
-
}
|
|
10
|
+
async embedIntoContext(context, ref) {
|
|
11
|
+
const jsActionDict = context.obj({
|
|
12
|
+
Type: 'Action',
|
|
13
|
+
S: 'JavaScript',
|
|
14
|
+
JS: PDFHexString.fromText(this.script),
|
|
25
15
|
});
|
|
16
|
+
if (ref) {
|
|
17
|
+
context.assign(ref, jsActionDict);
|
|
18
|
+
return ref;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
return context.register(jsActionDict);
|
|
22
|
+
}
|
|
26
23
|
}
|
|
27
24
|
}
|
|
28
25
|
export default JavaScriptEmbedder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JavaScriptEmbedder.js","sourceRoot":"","sources":["../../../src/core/embedders/JavaScriptEmbedder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"JavaScriptEmbedder.js","sourceRoot":"","sources":["../../../src/core/embedders/JavaScriptEmbedder.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,yBAAyB,CAAC;AAInD,MAAM,kBAAkB;IAQtB,YAAoB,MAAc,EAAE,UAAkB;QACpD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAVD,MAAM,CAAC,GAAG,CAAC,MAAc,EAAE,UAAkB;QAC3C,OAAO,IAAI,kBAAkB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACpD,CAAC;IAUD,KAAK,CAAC,gBAAgB,CAAC,OAAmB,EAAE,GAAY;QACtD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;YAC/B,IAAI,EAAE,QAAQ;YACd,CAAC,EAAE,YAAY;YACf,EAAE,EAAE,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;SACvC,CAAC,CAAC;QAEH,IAAI,GAAG,EAAE;YACP,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;YAClC,OAAO,GAAG,CAAC;SACZ;aAAM;YACL,OAAO,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;SACvC;IACH,CAAC;CACF;AAED,eAAe,kBAAkB,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
// prettier-ignore
|
|
3
2
|
const MARKERS = [
|
|
4
3
|
0xffc0, 0xffc1, 0xffc2,
|
|
@@ -31,67 +30,63 @@ class JpegEmbedder {
|
|
|
31
30
|
this.height = height;
|
|
32
31
|
this.colorSpace = colorSpace;
|
|
33
32
|
}
|
|
34
|
-
static for(imageData) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
marker = dataView.getUint16(pos);
|
|
44
|
-
pos += 2;
|
|
45
|
-
if (MARKERS.includes(marker))
|
|
46
|
-
break;
|
|
47
|
-
pos += dataView.getUint16(pos);
|
|
48
|
-
}
|
|
49
|
-
if (!MARKERS.includes(marker))
|
|
50
|
-
throw new Error('Invalid JPEG');
|
|
33
|
+
static async for(imageData) {
|
|
34
|
+
const dataView = new DataView(imageData.buffer);
|
|
35
|
+
const soi = dataView.getUint16(0);
|
|
36
|
+
if (soi !== 0xffd8)
|
|
37
|
+
throw new Error('SOI not found in JPEG');
|
|
38
|
+
let pos = 2;
|
|
39
|
+
let marker;
|
|
40
|
+
while (pos < dataView.byteLength) {
|
|
41
|
+
marker = dataView.getUint16(pos);
|
|
51
42
|
pos += 2;
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
pos +=
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
43
|
+
if (MARKERS.includes(marker))
|
|
44
|
+
break;
|
|
45
|
+
pos += dataView.getUint16(pos);
|
|
46
|
+
}
|
|
47
|
+
if (!MARKERS.includes(marker))
|
|
48
|
+
throw new Error('Invalid JPEG');
|
|
49
|
+
pos += 2;
|
|
50
|
+
const bitsPerComponent = dataView.getUint8(pos++);
|
|
51
|
+
const height = dataView.getUint16(pos);
|
|
52
|
+
pos += 2;
|
|
53
|
+
const width = dataView.getUint16(pos);
|
|
54
|
+
pos += 2;
|
|
55
|
+
const channelByte = dataView.getUint8(pos++);
|
|
56
|
+
const channelName = ChannelToColorSpace[channelByte];
|
|
57
|
+
if (!channelName)
|
|
58
|
+
throw new Error('Unknown JPEG channel.');
|
|
59
|
+
const colorSpace = channelName;
|
|
60
|
+
return new JpegEmbedder(imageData, bitsPerComponent, width, height, colorSpace);
|
|
64
61
|
}
|
|
65
|
-
embedIntoContext(context, ref) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
: undefined,
|
|
86
|
-
});
|
|
87
|
-
if (ref) {
|
|
88
|
-
context.assign(ref, xObject);
|
|
89
|
-
return ref;
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
return context.register(xObject);
|
|
93
|
-
}
|
|
62
|
+
async embedIntoContext(context, ref) {
|
|
63
|
+
const xObject = context.stream(this.imageData, {
|
|
64
|
+
Type: 'XObject',
|
|
65
|
+
Subtype: 'Image',
|
|
66
|
+
BitsPerComponent: this.bitsPerComponent,
|
|
67
|
+
Width: this.width,
|
|
68
|
+
Height: this.height,
|
|
69
|
+
ColorSpace: this.colorSpace,
|
|
70
|
+
Filter: 'DCTDecode',
|
|
71
|
+
// CMYK JPEG streams in PDF are typically stored complemented,
|
|
72
|
+
// with 1 as 'off' and 0 as 'on' (PDF 32000-1:2008, 8.6.4.4).
|
|
73
|
+
//
|
|
74
|
+
// Standalone CMYK JPEG (usually exported by Photoshop) are
|
|
75
|
+
// stored inverse, with 0 as 'off' and 1 as 'on', like RGB.
|
|
76
|
+
//
|
|
77
|
+
// Applying a swap here as a hedge that most bytes passing
|
|
78
|
+
// through this method will benefit from it.
|
|
79
|
+
Decode: this.colorSpace === ColorSpace.DeviceCMYK
|
|
80
|
+
? [1, 0, 1, 0, 1, 0, 1, 0]
|
|
81
|
+
: undefined,
|
|
94
82
|
});
|
|
83
|
+
if (ref) {
|
|
84
|
+
context.assign(ref, xObject);
|
|
85
|
+
return ref;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
return context.register(xObject);
|
|
89
|
+
}
|
|
95
90
|
}
|
|
96
91
|
}
|
|
97
92
|
export default JpegEmbedder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JpegEmbedder.js","sourceRoot":"","sources":["../../../src/core/embedders/JpegEmbedder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"JpegEmbedder.js","sourceRoot":"","sources":["../../../src/core/embedders/JpegEmbedder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
import { MissingPageContentsEmbeddingError, UnrecognizedStreamTypeError, } from '../errors.js';
|
|
3
2
|
import PDFNumber from '../objects/PDFNumber.js';
|
|
4
3
|
import PDFRawStream from '../objects/PDFRawStream.js';
|
|
@@ -28,34 +27,30 @@ class PDFPageEmbedder {
|
|
|
28
27
|
this.transformationMatrix =
|
|
29
28
|
transformationMatrix !== null && transformationMatrix !== void 0 ? transformationMatrix : boundingBoxAdjustedMatrix(bb);
|
|
30
29
|
}
|
|
31
|
-
static for(page, boundingBox, transformationMatrix) {
|
|
32
|
-
return
|
|
33
|
-
return new PDFPageEmbedder(page, boundingBox, transformationMatrix);
|
|
34
|
-
});
|
|
30
|
+
static async for(page, boundingBox, transformationMatrix) {
|
|
31
|
+
return new PDFPageEmbedder(page, boundingBox, transformationMatrix);
|
|
35
32
|
}
|
|
36
|
-
embedIntoContext(context, ref) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
Resources,
|
|
50
|
-
});
|
|
51
|
-
if (ref) {
|
|
52
|
-
context.assign(ref, xObject);
|
|
53
|
-
return ref;
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
return context.register(xObject);
|
|
57
|
-
}
|
|
33
|
+
async embedIntoContext(context, ref) {
|
|
34
|
+
const { Contents, Resources } = this.page.normalizedEntries();
|
|
35
|
+
if (!Contents)
|
|
36
|
+
throw new MissingPageContentsEmbeddingError();
|
|
37
|
+
const decodedContents = this.decodeContents(Contents);
|
|
38
|
+
const { left, bottom, right, top } = this.boundingBox;
|
|
39
|
+
const xObject = context.flateStream(decodedContents, {
|
|
40
|
+
Type: 'XObject',
|
|
41
|
+
Subtype: 'Form',
|
|
42
|
+
FormType: 1,
|
|
43
|
+
BBox: [left, bottom, right, top],
|
|
44
|
+
Matrix: this.transformationMatrix,
|
|
45
|
+
Resources,
|
|
58
46
|
});
|
|
47
|
+
if (ref) {
|
|
48
|
+
context.assign(ref, xObject);
|
|
49
|
+
return ref;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
return context.register(xObject);
|
|
53
|
+
}
|
|
59
54
|
}
|
|
60
55
|
// `contents` is an array of streams which are merged to include them in the XObject.
|
|
61
56
|
// This methods extracts each stream and joins them with a newline character.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PDFPageEmbedder.js","sourceRoot":"","sources":["../../../src/core/embedders/PDFPageEmbedder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PDFPageEmbedder.js","sourceRoot":"","sources":["../../../src/core/embedders/PDFPageEmbedder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
import { PNG } from '../../utils/png.js';
|
|
3
2
|
/**
|
|
4
3
|
* A note of thanks to the developers of https://github.com/foliojs/pdfkit, as
|
|
@@ -13,32 +12,28 @@ class PngEmbedder {
|
|
|
13
12
|
this.height = png.height;
|
|
14
13
|
this.colorSpace = 'DeviceRGB';
|
|
15
14
|
}
|
|
16
|
-
static for(imageData) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return new PngEmbedder(png);
|
|
20
|
-
});
|
|
15
|
+
static async for(imageData) {
|
|
16
|
+
const png = PNG.load(imageData);
|
|
17
|
+
return new PngEmbedder(png);
|
|
21
18
|
}
|
|
22
|
-
embedIntoContext(context, ref) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
SMask,
|
|
33
|
-
});
|
|
34
|
-
if (ref) {
|
|
35
|
-
context.assign(ref, xObject);
|
|
36
|
-
return ref;
|
|
37
|
-
}
|
|
38
|
-
else {
|
|
39
|
-
return context.register(xObject);
|
|
40
|
-
}
|
|
19
|
+
async embedIntoContext(context, ref) {
|
|
20
|
+
const SMask = this.embedAlphaChannel(context);
|
|
21
|
+
const xObject = context.flateStream(this.image.rgbChannel, {
|
|
22
|
+
Type: 'XObject',
|
|
23
|
+
Subtype: 'Image',
|
|
24
|
+
BitsPerComponent: this.image.bitsPerComponent,
|
|
25
|
+
Width: this.image.width,
|
|
26
|
+
Height: this.image.height,
|
|
27
|
+
ColorSpace: this.colorSpace,
|
|
28
|
+
SMask,
|
|
41
29
|
});
|
|
30
|
+
if (ref) {
|
|
31
|
+
context.assign(ref, xObject);
|
|
32
|
+
return ref;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
return context.register(xObject);
|
|
36
|
+
}
|
|
42
37
|
}
|
|
43
38
|
embedAlphaChannel(context) {
|
|
44
39
|
if (!this.image.alphaChannel)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PngEmbedder.js","sourceRoot":"","sources":["../../../src/core/embedders/PngEmbedder.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PngEmbedder.js","sourceRoot":"","sources":["../../../src/core/embedders/PngEmbedder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAEtC;;;;GAIG;AACH,MAAM,WAAW;IAaf,YAAoB,GAAQ;QAC1B,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC;QACjB,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,gBAAgB,CAAC;QAC7C,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC;IAChC,CAAC;IAlBD,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,SAAqB;QACpC,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAiBD,KAAK,CAAC,gBAAgB,CAAC,OAAmB,EAAE,GAAY;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAE9C,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE;YACzD,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,OAAO;YAChB,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB;YAC7C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;YACvB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK;SACN,CAAC,CAAC;QAEH,IAAI,GAAG,EAAE;YACP,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YAC7B,OAAO,GAAG,CAAC;SACZ;aAAM;YACL,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;SAClC;IACH,CAAC;IAEO,iBAAiB,CAAC,OAAmB;QAC3C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY;YAAE,OAAO,SAAS,CAAC;QAE/C,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;YAC3D,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;YACvB,gBAAgB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB;YAC7C,UAAU,EAAE,YAAY;YACxB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;SACf,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;CACF;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
import { ReparseError } from '../errors.js';
|
|
3
2
|
import PDFName from '../objects/PDFName.js';
|
|
4
3
|
import PDFNumber from '../objects/PDFNumber.js';
|
|
@@ -15,23 +14,21 @@ class PDFObjectStreamParser extends PDFObjectParser {
|
|
|
15
14
|
this.firstOffset = dict.lookup(PDFName.of('First'), PDFNumber).asNumber();
|
|
16
15
|
this.objectCount = dict.lookup(PDFName.of('N'), PDFNumber).asNumber();
|
|
17
16
|
}
|
|
18
|
-
parseIntoContext() {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
34
|
-
});
|
|
17
|
+
async parseIntoContext() {
|
|
18
|
+
if (this.alreadyParsed) {
|
|
19
|
+
throw new ReparseError('PDFObjectStreamParser', 'parseIntoContext');
|
|
20
|
+
}
|
|
21
|
+
this.alreadyParsed = true;
|
|
22
|
+
const offsetsAndObjectNumbers = this.parseOffsetsAndObjectNumbers();
|
|
23
|
+
for (let idx = 0, len = offsetsAndObjectNumbers.length; idx < len; idx++) {
|
|
24
|
+
const { objectNumber, offset } = offsetsAndObjectNumbers[idx];
|
|
25
|
+
this.bytes.moveTo(this.firstOffset + offset);
|
|
26
|
+
const ref = PDFRef.of(objectNumber, 0);
|
|
27
|
+
const object = this.parseObject(ref);
|
|
28
|
+
this.context.assign(ref, object);
|
|
29
|
+
if (this.shouldWaitForTick())
|
|
30
|
+
await waitForTick();
|
|
31
|
+
}
|
|
35
32
|
}
|
|
36
33
|
parseOffsetsAndObjectNumbers() {
|
|
37
34
|
const offsetsAndObjectNumbers = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PDFObjectStreamParser.js","sourceRoot":"","sources":["../../../src/core/parser/PDFObjectStreamParser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PDFObjectStreamParser.js","sourceRoot":"","sources":["../../../src/core/parser/PDFObjectStreamParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAE7C,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,qBAAsB,SAAQ,eAAe;IAWjD,YAAY,SAAuB,EAAE,iBAAiC;QACpE,KAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtE,MAAM,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;QAE3B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC1E,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,gBAAgB;QACpB,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,MAAM,IAAI,YAAY,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC;SACrE;QACD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAE1B,MAAM,uBAAuB,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACpE,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,uBAAuB,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE;YACxE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC;YAC9D,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACjC,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAAE,MAAM,WAAW,EAAE,CAAC;SACnD;IACH,CAAC;IAEO,4BAA4B;QAIlC,MAAM,uBAAuB,GAAG,EAAE,CAAC;QACnC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE;YAC1D,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAExC,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YAElC,uBAAuB,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;SACxD;QACD,OAAO,uBAAuB,CAAC;IACjC,CAAC;;AArDM,+BAAS,GAAG,CACjB,SAAuB,EACvB,iBAAiC,EACjC,EAAE,CAAC,IAAI,qBAAqB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAqD/D,eAAe,qBAAqB,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
import PDFCrossRefSection from '../document/PDFCrossRefSection.js';
|
|
3
2
|
import PDFHeader from '../document/PDFHeader.js';
|
|
4
3
|
import PDFTrailer from '../document/PDFTrailer.js';
|
|
@@ -30,29 +29,27 @@ class PDFParser extends PDFObjectParser {
|
|
|
30
29
|
this.throwOnInvalidObject = throwOnInvalidObject;
|
|
31
30
|
this.context.isDecrypted = !!(cryptoFactory === null || cryptoFactory === void 0 ? void 0 : cryptoFactory.encryptionKey);
|
|
32
31
|
}
|
|
33
|
-
parseDocument() {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
throw new StalledParserError(this.bytes.position());
|
|
46
|
-
}
|
|
47
|
-
prevOffset = offset;
|
|
48
|
-
}
|
|
49
|
-
this.maybeRecoverRoot();
|
|
50
|
-
if (this.context.lookup(PDFRef.of(0))) {
|
|
51
|
-
console.warn('Removing parsed object: 0 0 R');
|
|
52
|
-
this.context.delete(PDFRef.of(0));
|
|
32
|
+
async parseDocument() {
|
|
33
|
+
if (this.alreadyParsed) {
|
|
34
|
+
throw new ReparseError('PDFParser', 'parseDocument');
|
|
35
|
+
}
|
|
36
|
+
this.alreadyParsed = true;
|
|
37
|
+
this.context.header = this.parseHeader();
|
|
38
|
+
let prevOffset;
|
|
39
|
+
while (!this.bytes.done()) {
|
|
40
|
+
await this.parseDocumentSection();
|
|
41
|
+
const offset = this.bytes.offset();
|
|
42
|
+
if (offset === prevOffset) {
|
|
43
|
+
throw new StalledParserError(this.bytes.position());
|
|
53
44
|
}
|
|
54
|
-
|
|
55
|
-
}
|
|
45
|
+
prevOffset = offset;
|
|
46
|
+
}
|
|
47
|
+
this.maybeRecoverRoot();
|
|
48
|
+
if (this.context.lookup(PDFRef.of(0))) {
|
|
49
|
+
console.warn('Removing parsed object: 0 0 R');
|
|
50
|
+
this.context.delete(PDFRef.of(0));
|
|
51
|
+
}
|
|
52
|
+
return this.context;
|
|
56
53
|
}
|
|
57
54
|
maybeRecoverRoot() {
|
|
58
55
|
const isValidCatalog = (obj) => obj instanceof PDFDict &&
|
|
@@ -104,30 +101,28 @@ class PDFParser extends PDFObjectParser {
|
|
|
104
101
|
return false;
|
|
105
102
|
}
|
|
106
103
|
}
|
|
107
|
-
parseIndirectObject() {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
return ref;
|
|
130
|
-
});
|
|
104
|
+
async parseIndirectObject() {
|
|
105
|
+
const ref = this.parseIndirectObjectHeader();
|
|
106
|
+
this.skipWhitespaceAndComments();
|
|
107
|
+
const object = this.parseObject(ref);
|
|
108
|
+
this.skipWhitespaceAndComments();
|
|
109
|
+
// if (!this.matchKeyword(Keywords.endobj)) {
|
|
110
|
+
// throw new MissingKeywordError(this.bytes.position(), Keywords.endobj);
|
|
111
|
+
// }
|
|
112
|
+
// TODO: Log a warning if this fails...
|
|
113
|
+
this.matchKeyword(Keywords.endobj);
|
|
114
|
+
if (object instanceof PDFRawStream &&
|
|
115
|
+
object.dict.lookup(PDFName.of('Type')) === PDFName.of('ObjStm')) {
|
|
116
|
+
await PDFObjectStreamParser.forStream(object, this.shouldWaitForTick).parseIntoContext();
|
|
117
|
+
}
|
|
118
|
+
else if (object instanceof PDFRawStream &&
|
|
119
|
+
object.dict.lookup(PDFName.of('Type')) === PDFName.of('XRef')) {
|
|
120
|
+
PDFXRefStreamParser.forStream(object).parseIntoContext();
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
this.context.assign(ref, object);
|
|
124
|
+
}
|
|
125
|
+
return ref;
|
|
131
126
|
}
|
|
132
127
|
// TODO: Improve and clean this up
|
|
133
128
|
tryToParseInvalidIndirectObject() {
|
|
@@ -156,26 +151,24 @@ class PDFParser extends PDFObjectParser {
|
|
|
156
151
|
this.context.assign(ref, object);
|
|
157
152
|
return ref;
|
|
158
153
|
}
|
|
159
|
-
parseIndirectObjects() {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
this.tryToParseInvalidIndirectObject();
|
|
171
|
-
}
|
|
172
|
-
this.skipWhitespaceAndComments();
|
|
173
|
-
// TODO: Can this be done only when needed, to avoid harming performance?
|
|
174
|
-
this.skipJibberish();
|
|
175
|
-
if (this.shouldWaitForTick())
|
|
176
|
-
yield waitForTick();
|
|
154
|
+
async parseIndirectObjects() {
|
|
155
|
+
this.skipWhitespaceAndComments();
|
|
156
|
+
while (!this.bytes.done() && IsDigit[this.bytes.peek()]) {
|
|
157
|
+
const initialOffset = this.bytes.offset();
|
|
158
|
+
try {
|
|
159
|
+
await this.parseIndirectObject();
|
|
160
|
+
}
|
|
161
|
+
catch (e) {
|
|
162
|
+
// TODO: Add tracing/logging mechanism to track when this happens!
|
|
163
|
+
this.bytes.moveTo(initialOffset);
|
|
164
|
+
this.tryToParseInvalidIndirectObject();
|
|
177
165
|
}
|
|
178
|
-
|
|
166
|
+
this.skipWhitespaceAndComments();
|
|
167
|
+
// TODO: Can this be done only when needed, to avoid harming performance?
|
|
168
|
+
this.skipJibberish();
|
|
169
|
+
if (this.shouldWaitForTick())
|
|
170
|
+
await waitForTick();
|
|
171
|
+
}
|
|
179
172
|
}
|
|
180
173
|
maybeParseCrossRefSection() {
|
|
181
174
|
this.skipWhitespaceAndComments();
|
|
@@ -235,15 +228,13 @@ class PDFParser extends PDFObjectParser {
|
|
|
235
228
|
this.skipWhitespaceAndComments();
|
|
236
229
|
return PDFTrailer.forLastCrossRefSectionOffset(offset);
|
|
237
230
|
}
|
|
238
|
-
parseDocumentSection() {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
this.skipJibberish();
|
|
246
|
-
});
|
|
231
|
+
async parseDocumentSection() {
|
|
232
|
+
await this.parseIndirectObjects();
|
|
233
|
+
this.maybeParseCrossRefSection();
|
|
234
|
+
this.maybeParseTrailerDict();
|
|
235
|
+
this.maybeParseTrailer();
|
|
236
|
+
// TODO: Can this be done only when needed, to avoid harming performance?
|
|
237
|
+
this.skipJibberish();
|
|
247
238
|
}
|
|
248
239
|
/**
|
|
249
240
|
* This operation is not necessary for valid PDF files. But some invalid PDFs
|