pdf-lite 1.6.4 → 1.7.0
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/acroform/appearance/pdf-button-appearance-stream.js +1 -1
- package/dist/acroform/appearance/pdf-text-appearance-stream.js +42 -25
- package/dist/acroform/fields/pdf-button-form-field.d.ts +11 -2
- package/dist/acroform/fields/pdf-button-form-field.js +76 -37
- package/dist/acroform/fields/pdf-choice-form-field.js +2 -2
- package/dist/acroform/fields/pdf-form-field.d.ts +15 -9
- package/dist/acroform/fields/pdf-form-field.js +123 -46
- package/dist/acroform/fields/pdf-text-form-field.js +2 -2
- package/dist/acroform/pdf-acro-form.d.ts +1 -0
- package/dist/acroform/pdf-acro-form.js +15 -4
- package/dist/acroform/xfa/pdf-xfa-data.d.ts +2 -1
- package/dist/acroform/xfa/pdf-xfa-data.js +36 -28
- package/dist/annotations/pdf-annotation.d.ts +1 -1
- package/dist/annotations/pdf-annotation.js +16 -2
- package/dist/core/objects/pdf-array.d.ts +6 -1
- package/dist/core/objects/pdf-array.js +3 -0
- package/dist/core/objects/pdf-boolean.d.ts +6 -2
- package/dist/core/objects/pdf-boolean.js +3 -0
- package/dist/core/objects/pdf-comment.d.ts +6 -2
- package/dist/core/objects/pdf-comment.js +3 -0
- package/dist/core/objects/pdf-date.d.ts +4 -0
- package/dist/core/objects/pdf-date.js +3 -0
- package/dist/core/objects/pdf-dictionary.d.ts +5 -0
- package/dist/core/objects/pdf-dictionary.js +16 -0
- package/dist/core/objects/pdf-hexadecimal.d.ts +6 -2
- package/dist/core/objects/pdf-hexadecimal.js +3 -0
- package/dist/core/objects/pdf-indirect-object.d.ts +8 -1
- package/dist/core/objects/pdf-indirect-object.js +14 -0
- package/dist/core/objects/pdf-name.d.ts +6 -2
- package/dist/core/objects/pdf-name.js +3 -0
- package/dist/core/objects/pdf-null.d.ts +5 -2
- package/dist/core/objects/pdf-null.js +3 -0
- package/dist/core/objects/pdf-number.d.ts +6 -1
- package/dist/core/objects/pdf-number.js +3 -0
- package/dist/core/objects/pdf-object-reference.d.ts +5 -0
- package/dist/core/objects/pdf-object-reference.js +7 -0
- package/dist/core/objects/pdf-object.d.ts +1 -0
- package/dist/core/objects/pdf-start-xref.d.ts +6 -1
- package/dist/core/objects/pdf-start-xref.js +3 -0
- package/dist/core/objects/pdf-stream.d.ts +8 -0
- package/dist/core/objects/pdf-stream.js +7 -0
- package/dist/core/objects/pdf-string.d.ts +8 -2
- package/dist/core/objects/pdf-string.js +9 -0
- package/dist/core/objects/pdf-trailer.d.ts +7 -0
- package/dist/core/objects/pdf-trailer.js +3 -0
- package/dist/core/objects/pdf-xref-table.d.ts +31 -5
- package/dist/core/objects/pdf-xref-table.js +23 -0
- package/dist/pdf/pdf-document.d.ts +7 -0
- package/dist/pdf/pdf-document.js +6 -0
- package/dist/pdf/pdf-revision.d.ts +4 -0
- package/dist/pdf/pdf-revision.js +6 -0
- package/dist/utils/iterable-readable-stream.d.ts +2 -0
- package/dist/utils/iterable-readable-stream.js +8 -1
- package/dist/utils/xml.d.ts +9 -0
- package/dist/utils/xml.js +59 -0
- package/package.json +2 -2
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { Ref } from '../ref.js';
|
|
2
|
-
import {
|
|
3
|
-
import { PdfXRefTableSectionStartToken } from '../tokens/xref-table-section-start-token.js';
|
|
2
|
+
import { PdfToken } from '../tokens/token.js';
|
|
4
3
|
import { PdfIndirectObject } from './pdf-indirect-object.js';
|
|
5
4
|
import { PdfNumber } from './pdf-number.js';
|
|
6
5
|
import { PdfObject } from './pdf-object.js';
|
|
@@ -15,8 +14,15 @@ export declare class PdfXRefTableEntry extends PdfObject {
|
|
|
15
14
|
generationNumber: number | PdfNumber;
|
|
16
15
|
inUse: boolean;
|
|
17
16
|
});
|
|
18
|
-
protected tokenize():
|
|
17
|
+
protected tokenize(): PdfToken[];
|
|
19
18
|
cloneImpl(): this;
|
|
19
|
+
toJSON(): {
|
|
20
|
+
type: string;
|
|
21
|
+
objectNumber: number;
|
|
22
|
+
generationNumber: number;
|
|
23
|
+
byteOffset: number;
|
|
24
|
+
inUse: boolean;
|
|
25
|
+
};
|
|
20
26
|
isModified(): boolean;
|
|
21
27
|
}
|
|
22
28
|
export declare class PdfXRefTableSectionHeader extends PdfObject {
|
|
@@ -26,8 +32,13 @@ export declare class PdfXRefTableSectionHeader extends PdfObject {
|
|
|
26
32
|
startObjectNumber: number | PdfNumber;
|
|
27
33
|
entryCount: number | PdfNumber;
|
|
28
34
|
});
|
|
29
|
-
protected tokenize():
|
|
35
|
+
protected tokenize(): PdfToken[];
|
|
30
36
|
cloneImpl(): this;
|
|
37
|
+
toJSON(): {
|
|
38
|
+
type: string;
|
|
39
|
+
startObjectNumber: number;
|
|
40
|
+
entryCount: number;
|
|
41
|
+
};
|
|
31
42
|
}
|
|
32
43
|
export declare class PdfXRefTable extends PdfObject {
|
|
33
44
|
sections: PdfXRefTableSectionHeader[];
|
|
@@ -42,7 +53,22 @@ export declare class PdfXRefTable extends PdfObject {
|
|
|
42
53
|
addEntryForObject(obj: PdfIndirectObject): void;
|
|
43
54
|
getEntry(objectNumber: number): PdfXRefTableEntry | undefined;
|
|
44
55
|
get lastSection(): PdfXRefTableSectionHeader | null;
|
|
45
|
-
protected tokenize():
|
|
56
|
+
protected tokenize(): PdfToken[];
|
|
46
57
|
private sortEntriesIntoSections;
|
|
47
58
|
cloneImpl(): this;
|
|
59
|
+
toJSON(): {
|
|
60
|
+
type: string;
|
|
61
|
+
sections: {
|
|
62
|
+
type: string;
|
|
63
|
+
startObjectNumber: number;
|
|
64
|
+
entryCount: number;
|
|
65
|
+
}[];
|
|
66
|
+
entries: {
|
|
67
|
+
type: string;
|
|
68
|
+
objectNumber: number;
|
|
69
|
+
generationNumber: number;
|
|
70
|
+
byteOffset: number;
|
|
71
|
+
inUse: boolean;
|
|
72
|
+
}[];
|
|
73
|
+
};
|
|
48
74
|
}
|
|
@@ -44,6 +44,15 @@ export class PdfXRefTableEntry extends PdfObject {
|
|
|
44
44
|
inUse: this.inUse,
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
|
+
toJSON() {
|
|
48
|
+
return {
|
|
49
|
+
type: 'xref-entry',
|
|
50
|
+
objectNumber: this.objectNumber.value,
|
|
51
|
+
generationNumber: this.generationNumber.value,
|
|
52
|
+
byteOffset: this.byteOffset.value,
|
|
53
|
+
inUse: this.inUse,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
47
56
|
isModified() {
|
|
48
57
|
return (super.isModified() ||
|
|
49
58
|
this.byteOffset.isModified() ||
|
|
@@ -70,6 +79,13 @@ export class PdfXRefTableSectionHeader extends PdfObject {
|
|
|
70
79
|
entryCount: this.entryCount.clone(),
|
|
71
80
|
});
|
|
72
81
|
}
|
|
82
|
+
toJSON() {
|
|
83
|
+
return {
|
|
84
|
+
type: 'xref-section-header',
|
|
85
|
+
startObjectNumber: this.startObjectNumber.value,
|
|
86
|
+
entryCount: this.entryCount.value,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
73
89
|
}
|
|
74
90
|
export class PdfXRefTable extends PdfObject {
|
|
75
91
|
sections;
|
|
@@ -180,4 +196,11 @@ export class PdfXRefTable extends PdfObject {
|
|
|
180
196
|
offset: new Ref(this.offset.resolve()),
|
|
181
197
|
});
|
|
182
198
|
}
|
|
199
|
+
toJSON() {
|
|
200
|
+
return {
|
|
201
|
+
type: 'xref-table',
|
|
202
|
+
sections: this.sections.map((s) => s.toJSON()),
|
|
203
|
+
entries: this.entries.map((e) => e.toJSON()),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
183
206
|
}
|
|
@@ -311,6 +311,13 @@ export declare class PdfDocument extends PdfObject implements IPdfObjectResolver
|
|
|
311
311
|
* @returns A cloned PdfDocument instance
|
|
312
312
|
*/
|
|
313
313
|
cloneImpl(): this;
|
|
314
|
+
toJSON(): {
|
|
315
|
+
type: string;
|
|
316
|
+
revisions: {
|
|
317
|
+
type: string;
|
|
318
|
+
objects: object[];
|
|
319
|
+
}[];
|
|
320
|
+
};
|
|
314
321
|
/**
|
|
315
322
|
* Creates a PdfDocument from a byte stream.
|
|
316
323
|
*
|
package/dist/pdf/pdf-document.js
CHANGED
|
@@ -967,6 +967,12 @@ export class PdfDocument extends PdfObject {
|
|
|
967
967
|
securityHandler: this.securityHandler,
|
|
968
968
|
});
|
|
969
969
|
}
|
|
970
|
+
toJSON() {
|
|
971
|
+
return {
|
|
972
|
+
type: 'document',
|
|
973
|
+
revisions: this.revisions.map((rev) => rev.toJSON()),
|
|
974
|
+
};
|
|
975
|
+
}
|
|
970
976
|
/**
|
|
971
977
|
* Creates a PdfDocument from a byte stream.
|
|
972
978
|
*
|
|
@@ -124,6 +124,10 @@ export declare class PdfRevision extends PdfObject {
|
|
|
124
124
|
*
|
|
125
125
|
* @returns A cloned PdfRevision instance
|
|
126
126
|
*/
|
|
127
|
+
toJSON(): {
|
|
128
|
+
type: string;
|
|
129
|
+
objects: object[];
|
|
130
|
+
};
|
|
127
131
|
cloneImpl(): this;
|
|
128
132
|
protected tokenize(): PdfToken[];
|
|
129
133
|
isEmpty(): boolean;
|
package/dist/pdf/pdf-revision.js
CHANGED
|
@@ -251,6 +251,12 @@ export class PdfRevision extends PdfObject {
|
|
|
251
251
|
*
|
|
252
252
|
* @returns A cloned PdfRevision instance
|
|
253
253
|
*/
|
|
254
|
+
toJSON() {
|
|
255
|
+
return {
|
|
256
|
+
type: 'revision',
|
|
257
|
+
objects: this._objects.map((obj) => obj.toJSON()),
|
|
258
|
+
};
|
|
259
|
+
}
|
|
254
260
|
cloneImpl() {
|
|
255
261
|
const clonedObjects = this.objects.map((obj) => obj.clone());
|
|
256
262
|
return new PdfRevision({ objects: clonedObjects });
|
|
@@ -20,11 +20,18 @@ export class IterableReadableStream extends ReadableStream {
|
|
|
20
20
|
*/
|
|
21
21
|
[Symbol.asyncIterator]() {
|
|
22
22
|
const reader = this.getReader();
|
|
23
|
-
|
|
23
|
+
const iterator = {
|
|
24
24
|
async next() {
|
|
25
25
|
const result = await reader.read();
|
|
26
26
|
return result;
|
|
27
27
|
},
|
|
28
|
+
[Symbol.asyncIterator]() {
|
|
29
|
+
return iterator;
|
|
30
|
+
},
|
|
31
|
+
async [Symbol.asyncDispose]() {
|
|
32
|
+
reader.releaseLock();
|
|
33
|
+
},
|
|
28
34
|
};
|
|
35
|
+
return iterator;
|
|
29
36
|
}
|
|
30
37
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare class Xml {
|
|
2
|
+
static escapeValue(value: string): string;
|
|
3
|
+
static getElementContent(xml: string, tagName: string): string | null;
|
|
4
|
+
static setElementContent(xml: string, tagName: string, content: string): string;
|
|
5
|
+
static hasElement(xml: string, tagName: string): boolean;
|
|
6
|
+
static insertChild(xml: string, parentTagName: string, childXml: string): string;
|
|
7
|
+
static wrapInElements(content: string, tagNames: string[]): string;
|
|
8
|
+
static escapeRegex(str: string): string;
|
|
9
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export class Xml {
|
|
2
|
+
static escapeValue(value) {
|
|
3
|
+
return value
|
|
4
|
+
.replace(/&/g, '&')
|
|
5
|
+
.replace(/</g, '<')
|
|
6
|
+
.replace(/>/g, '>')
|
|
7
|
+
.replace(/"/g, '"')
|
|
8
|
+
.replace(/'/g, ''');
|
|
9
|
+
}
|
|
10
|
+
static getElementContent(xml, tagName) {
|
|
11
|
+
const escaped = Xml.escapeRegex(tagName);
|
|
12
|
+
const regex = new RegExp(`<${escaped}(?:\\s[^>]*)?>([\\s\\S]*?)</${escaped}\\s*>`);
|
|
13
|
+
const match = xml.match(regex);
|
|
14
|
+
return match ? match[1] : null;
|
|
15
|
+
}
|
|
16
|
+
static setElementContent(xml, tagName, content) {
|
|
17
|
+
const escaped = Xml.escapeRegex(tagName);
|
|
18
|
+
// Try expanding a self-closing tag
|
|
19
|
+
const selfClosing = new RegExp(`<${escaped}\\s*/>`);
|
|
20
|
+
if (selfClosing.test(xml)) {
|
|
21
|
+
return xml.replace(selfClosing, `<${tagName}>${content}</${tagName}>`);
|
|
22
|
+
}
|
|
23
|
+
// Try replacing content of an existing tag
|
|
24
|
+
const contentRegex = new RegExp(`(<${escaped}(?:\\s[^>]*)?>)[\\s\\S]*?(</${escaped}\\s*>)`);
|
|
25
|
+
if (contentRegex.test(xml)) {
|
|
26
|
+
return xml.replace(contentRegex, `$1${content}$2`);
|
|
27
|
+
}
|
|
28
|
+
return xml;
|
|
29
|
+
}
|
|
30
|
+
static hasElement(xml, tagName) {
|
|
31
|
+
const escaped = Xml.escapeRegex(tagName);
|
|
32
|
+
return (new RegExp(`</${escaped}\\s*>`).test(xml) ||
|
|
33
|
+
new RegExp(`<${escaped}\\s*/>`).test(xml));
|
|
34
|
+
}
|
|
35
|
+
static insertChild(xml, parentTagName, childXml) {
|
|
36
|
+
const escaped = Xml.escapeRegex(parentTagName);
|
|
37
|
+
// Insert before closing tag
|
|
38
|
+
const closingRegex = new RegExp(`(</${escaped}\\s*>)`);
|
|
39
|
+
if (closingRegex.test(xml)) {
|
|
40
|
+
return xml.replace(closingRegex, `${childXml}$1`);
|
|
41
|
+
}
|
|
42
|
+
// Expand self-closing tag
|
|
43
|
+
const selfClosing = new RegExp(`<${escaped}\\s*/>`);
|
|
44
|
+
if (selfClosing.test(xml)) {
|
|
45
|
+
return xml.replace(selfClosing, `<${parentTagName}>${childXml}</${parentTagName}>`);
|
|
46
|
+
}
|
|
47
|
+
return xml;
|
|
48
|
+
}
|
|
49
|
+
static wrapInElements(content, tagNames) {
|
|
50
|
+
let result = content;
|
|
51
|
+
for (let i = tagNames.length - 1; i >= 0; i--) {
|
|
52
|
+
result = `<${tagNames[i]}>${result}</${tagNames[i]}>`;
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
static escapeRegex(str) {
|
|
57
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
58
|
+
}
|
|
59
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pdf-lite",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@vitest/browser-playwright": "^4.0.14",
|
|
36
36
|
"@vitest/coverage-v8": "^4.0.14",
|
|
37
37
|
"playwright": "^1.56.1",
|
|
38
|
-
"typescript": "
|
|
38
|
+
"typescript": "6.0.2",
|
|
39
39
|
"vitest": "^4.0.14"
|
|
40
40
|
},
|
|
41
41
|
"repository": {
|