@adnsistemas/pdf-lib 2.7.1 → 2.7.2
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/core/writers/PDFWriter.d.ts +15 -0
- package/cjs/core/writers/PDFWriter.d.ts.map +1 -1
- package/cjs/core/writers/PDFWriter.js +41 -3
- package/cjs/core/writers/PDFWriter.js.map +1 -1
- package/dist/pdf-lib.esm.js +39 -3
- package/dist/pdf-lib.esm.js.map +1 -1
- package/dist/pdf-lib.esm.min.js +1 -1
- package/dist/pdf-lib.esm.min.js.map +1 -1
- package/dist/pdf-lib.js +39 -3
- package/dist/pdf-lib.js.map +1 -1
- package/dist/pdf-lib.min.js +3 -3
- package/dist/pdf-lib.min.js.map +1 -1
- package/es/core/writers/PDFWriter.d.ts +15 -0
- package/es/core/writers/PDFWriter.d.ts.map +1 -1
- package/es/core/writers/PDFWriter.js +41 -3
- package/es/core/writers/PDFWriter.js.map +1 -1
- package/package.json +1 -1
- package/src/core/writers/PDFWriter.ts +49 -3
- package/ts3.4/cjs/core/writers/PDFWriter.d.ts +15 -0
- package/ts3.4/es/core/writers/PDFWriter.d.ts +15 -0
|
@@ -24,6 +24,21 @@ declare class PDFWriter {
|
|
|
24
24
|
protected readonly snapshot: DocumentSnapshot;
|
|
25
25
|
private parsedObjects;
|
|
26
26
|
protected constructor(context: PDFContext, objectsPerTick: number, snapshot: DocumentSnapshot);
|
|
27
|
+
/**
|
|
28
|
+
* If PDF has an XRef Stream, then the last object will be probably be skipped on saving.
|
|
29
|
+
* If that's the case, this property will have that object number, and the PDF /Size can
|
|
30
|
+
* be corrected, to be accurate.
|
|
31
|
+
*/
|
|
32
|
+
protected _largestSkippedObjectNum: number;
|
|
33
|
+
/**
|
|
34
|
+
* For incremental saves, defers the decision to the snapshot.
|
|
35
|
+
* For full saves, checks that the object is not an XRef stream object.
|
|
36
|
+
* @param {boolean} incremental If making an incremental save, or a full save of the PDF
|
|
37
|
+
* @param {number} objNum Object number
|
|
38
|
+
* @param {PDFObject} object PDFObject used to check if it is an XRef stream, when not 'incremental' saving
|
|
39
|
+
* @returns {boolean} whether the object should be saved or not
|
|
40
|
+
*/
|
|
41
|
+
protected shouldSave(incremental: boolean, objNum: number, object: PDFObject): boolean;
|
|
27
42
|
serializeToBuffer(): Promise<Uint8Array>;
|
|
28
43
|
protected computeIndirectObjectSize([ref, object]: [
|
|
29
44
|
PDFRef,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PDFWriter.d.ts","sourceRoot":"","sources":["../../../src/core/writers/PDFWriter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,kBAAkB,MAAM,gCAAgC,CAAC;AAChE,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAC7C,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,UAAU,MAAM,eAAe,CAAC;AAKvC,OAAO,WAAW,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"PDFWriter.d.ts","sourceRoot":"","sources":["../../../src/core/writers/PDFWriter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,kBAAkB,MAAM,gCAAgC,CAAC;AAChE,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,UAAU,MAAM,wBAAwB,CAAC;AAChD,OAAO,cAAc,MAAM,4BAA4B,CAAC;AACxD,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,SAAS,MAAM,sBAAsB,CAAC;AAC7C,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,UAAU,MAAM,eAAe,CAAC;AAKvC,OAAO,WAAW,MAAM,yBAAyB,CAAC;AAKlD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;IACvC,IAAI,CAAC,EAAE,kBAAkB,CAAC;IAC1B,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,OAAO,EAAE,UAAU,CAAC;CACrB;AAED,cAAM,SAAS;IACb,MAAM,CAAC,UAAU,YAAa,UAAU,kBAAkB,MAAM,eACE;IAElE,MAAM,CAAC,sBAAsB,YAClB,UAAU,kBACH,MAAM,YACZ,gBAAgB,eAC0B;IAEtD,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU,CAAC;IAEvC,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAC1C,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IAC9C,OAAO,CAAC,aAAa,CAAK;IAE1B,SAAS,aACP,OAAO,EAAE,UAAU,EACnB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,gBAAgB;IAO5B;;;;OAIG;IACH,SAAS,CAAC,wBAAwB,EAAE,MAAM,CAAK;IAE/C;;;;;;;OAOG;IACH,SAAS,CAAC,UAAU,CAClB,WAAW,EAAE,OAAO,EACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,GAChB,OAAO;IAeJ,iBAAiB,IAAI,OAAO,CAAC,UAAU,CAAC;IAmE9C,SAAS,CAAC,yBAAyB,CAAC,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE;QACjD,MAAM;QACN,SAAS;KACV,GAAG,MAAM;IAMV,SAAS,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO;cAoB5C,iBAAiB,CAC/B,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,iBAAiB,CAAC;IAoD7B,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW;IAYvE,SAAS,CAAC,iBAAiB,MAAO,MAAM,aAGtC;CACH;AAED,eAAe,SAAS,CAAC"}
|
|
@@ -12,9 +12,17 @@ const CharCodes_1 = tslib_1.__importDefault(require("../syntax/CharCodes"));
|
|
|
12
12
|
const utils_1 = require("../../utils");
|
|
13
13
|
const PDFNumber_1 = tslib_1.__importDefault(require("../objects/PDFNumber"));
|
|
14
14
|
const PDFStream_1 = tslib_1.__importDefault(require("../objects/PDFStream"));
|
|
15
|
+
const PDFName_1 = tslib_1.__importDefault(require("../objects/PDFName"));
|
|
16
|
+
const PDFRawStream_1 = tslib_1.__importDefault(require("../objects/PDFRawStream"));
|
|
15
17
|
class PDFWriter {
|
|
16
18
|
constructor(context, objectsPerTick, snapshot) {
|
|
17
19
|
this.parsedObjects = 0;
|
|
20
|
+
/**
|
|
21
|
+
* If PDF has an XRef Stream, then the last object will be probably be skipped on saving.
|
|
22
|
+
* If that's the case, this property will have that object number, and the PDF /Size can
|
|
23
|
+
* be corrected, to be accurate.
|
|
24
|
+
*/
|
|
25
|
+
this._largestSkippedObjectNum = 0;
|
|
18
26
|
this.shouldWaitForTick = (n) => {
|
|
19
27
|
this.parsedObjects += n;
|
|
20
28
|
return this.parsedObjects % this.objectsPerTick === 0;
|
|
@@ -23,6 +31,27 @@ class PDFWriter {
|
|
|
23
31
|
this.objectsPerTick = objectsPerTick;
|
|
24
32
|
this.snapshot = snapshot;
|
|
25
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* For incremental saves, defers the decision to the snapshot.
|
|
36
|
+
* For full saves, checks that the object is not an XRef stream object.
|
|
37
|
+
* @param {boolean} incremental If making an incremental save, or a full save of the PDF
|
|
38
|
+
* @param {number} objNum Object number
|
|
39
|
+
* @param {PDFObject} object PDFObject used to check if it is an XRef stream, when not 'incremental' saving
|
|
40
|
+
* @returns {boolean} whether the object should be saved or not
|
|
41
|
+
*/
|
|
42
|
+
shouldSave(incremental, objNum, object) {
|
|
43
|
+
let should = true;
|
|
44
|
+
if (incremental) {
|
|
45
|
+
should = this.snapshot.shouldSave(objNum);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
should = !(object instanceof PDFRawStream_1.default &&
|
|
49
|
+
object.dict.lookup(PDFName_1.default.of('Type')) === PDFName_1.default.of('XRef'));
|
|
50
|
+
}
|
|
51
|
+
if (!should && this._largestSkippedObjectNum < objNum)
|
|
52
|
+
this._largestSkippedObjectNum = objNum;
|
|
53
|
+
return should;
|
|
54
|
+
}
|
|
26
55
|
serializeToBuffer() {
|
|
27
56
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
28
57
|
const incremental = !(this.snapshot instanceof snapshot_1.DefaultDocumentSnapshot);
|
|
@@ -36,7 +65,7 @@ class PDFWriter {
|
|
|
36
65
|
buffer[offset++] = CharCodes_1.default.Newline;
|
|
37
66
|
for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {
|
|
38
67
|
const [ref, object] = indirectObjects[idx];
|
|
39
|
-
if (!this.
|
|
68
|
+
if (!this.shouldSave(incremental, ref.objectNumber, object)) {
|
|
40
69
|
continue;
|
|
41
70
|
}
|
|
42
71
|
const objectNumber = String(ref.objectNumber);
|
|
@@ -82,8 +111,16 @@ class PDFWriter {
|
|
|
82
111
|
return refSize + objectSize;
|
|
83
112
|
}
|
|
84
113
|
createTrailerDict(prevStartXRef) {
|
|
114
|
+
/**
|
|
115
|
+
* if last object (XRef Stream) is not in the output, then size is one less.
|
|
116
|
+
* An XRef Stream object should always be the largest object number in PDF
|
|
117
|
+
*/
|
|
118
|
+
const size = this.context.largestObjectNumber +
|
|
119
|
+
(this._largestSkippedObjectNum === this.context.largestObjectNumber
|
|
120
|
+
? 0
|
|
121
|
+
: 1);
|
|
85
122
|
return this.context.obj({
|
|
86
|
-
Size:
|
|
123
|
+
Size: size,
|
|
87
124
|
Root: this.context.trailerInfo.Root,
|
|
88
125
|
Encrypt: this.context.trailerInfo.Encrypt,
|
|
89
126
|
Info: this.context.trailerInfo.Info,
|
|
@@ -93,6 +130,7 @@ class PDFWriter {
|
|
|
93
130
|
}
|
|
94
131
|
computeBufferSize(incremental) {
|
|
95
132
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
133
|
+
this._largestSkippedObjectNum = 0;
|
|
96
134
|
const header = PDFHeader_1.default.forVersion(1, 7);
|
|
97
135
|
let size = this.snapshot.pdfSize;
|
|
98
136
|
if (!incremental) {
|
|
@@ -105,7 +143,7 @@ class PDFWriter {
|
|
|
105
143
|
for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {
|
|
106
144
|
const indirectObject = indirectObjects[idx];
|
|
107
145
|
const [ref, object] = indirectObject;
|
|
108
|
-
if (!this.
|
|
146
|
+
if (!this.shouldSave(incremental, ref.objectNumber, object))
|
|
109
147
|
continue;
|
|
110
148
|
if (security)
|
|
111
149
|
this.encrypt(ref, object, security);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PDFWriter.js","sourceRoot":"","sources":["../../../src/core/writers/PDFWriter.ts"],"names":[],"mappings":";;;AAAA,iDAG4B;AAE5B,gGAAgE;AAChE,8EAA8C;AAC9C,gFAAgD;AAChD,wFAAwD;AAGxD,uEAAuC;AAEvC,4FAA4D;AAC5D,4EAA4C;AAC5C,uCAAgE;AAChE,6EAA6C;AAE7C,6EAA6C;
|
|
1
|
+
{"version":3,"file":"PDFWriter.js","sourceRoot":"","sources":["../../../src/core/writers/PDFWriter.ts"],"names":[],"mappings":"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"}
|
package/dist/pdf-lib.esm.js
CHANGED
|
@@ -10325,6 +10325,12 @@ PDFObjectStream.withContextAndObjects = (context, objects, encode = true) => new
|
|
|
10325
10325
|
class PDFWriter {
|
|
10326
10326
|
constructor(context, objectsPerTick, snapshot) {
|
|
10327
10327
|
this.parsedObjects = 0;
|
|
10328
|
+
/**
|
|
10329
|
+
* If PDF has an XRef Stream, then the last object will be probably be skipped on saving.
|
|
10330
|
+
* If that's the case, this property will have that object number, and the PDF /Size can
|
|
10331
|
+
* be corrected, to be accurate.
|
|
10332
|
+
*/
|
|
10333
|
+
this._largestSkippedObjectNum = 0;
|
|
10328
10334
|
this.shouldWaitForTick = (n) => {
|
|
10329
10335
|
this.parsedObjects += n;
|
|
10330
10336
|
return this.parsedObjects % this.objectsPerTick === 0;
|
|
@@ -10333,6 +10339,27 @@ class PDFWriter {
|
|
|
10333
10339
|
this.objectsPerTick = objectsPerTick;
|
|
10334
10340
|
this.snapshot = snapshot;
|
|
10335
10341
|
}
|
|
10342
|
+
/**
|
|
10343
|
+
* For incremental saves, defers the decision to the snapshot.
|
|
10344
|
+
* For full saves, checks that the object is not an XRef stream object.
|
|
10345
|
+
* @param {boolean} incremental If making an incremental save, or a full save of the PDF
|
|
10346
|
+
* @param {number} objNum Object number
|
|
10347
|
+
* @param {PDFObject} object PDFObject used to check if it is an XRef stream, when not 'incremental' saving
|
|
10348
|
+
* @returns {boolean} whether the object should be saved or not
|
|
10349
|
+
*/
|
|
10350
|
+
shouldSave(incremental, objNum, object) {
|
|
10351
|
+
let should = true;
|
|
10352
|
+
if (incremental) {
|
|
10353
|
+
should = this.snapshot.shouldSave(objNum);
|
|
10354
|
+
}
|
|
10355
|
+
else {
|
|
10356
|
+
should = !(object instanceof PDFRawStream &&
|
|
10357
|
+
object.dict.lookup(PDFName.of('Type')) === PDFName.of('XRef'));
|
|
10358
|
+
}
|
|
10359
|
+
if (!should && this._largestSkippedObjectNum < objNum)
|
|
10360
|
+
this._largestSkippedObjectNum = objNum;
|
|
10361
|
+
return should;
|
|
10362
|
+
}
|
|
10336
10363
|
serializeToBuffer() {
|
|
10337
10364
|
return __awaiter(this, void 0, void 0, function* () {
|
|
10338
10365
|
const incremental = !(this.snapshot instanceof DefaultDocumentSnapshot);
|
|
@@ -10346,7 +10373,7 @@ class PDFWriter {
|
|
|
10346
10373
|
buffer[offset++] = CharCodes$1.Newline;
|
|
10347
10374
|
for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {
|
|
10348
10375
|
const [ref, object] = indirectObjects[idx];
|
|
10349
|
-
if (!this.
|
|
10376
|
+
if (!this.shouldSave(incremental, ref.objectNumber, object)) {
|
|
10350
10377
|
continue;
|
|
10351
10378
|
}
|
|
10352
10379
|
const objectNumber = String(ref.objectNumber);
|
|
@@ -10392,8 +10419,16 @@ class PDFWriter {
|
|
|
10392
10419
|
return refSize + objectSize;
|
|
10393
10420
|
}
|
|
10394
10421
|
createTrailerDict(prevStartXRef) {
|
|
10422
|
+
/**
|
|
10423
|
+
* if last object (XRef Stream) is not in the output, then size is one less.
|
|
10424
|
+
* An XRef Stream object should always be the largest object number in PDF
|
|
10425
|
+
*/
|
|
10426
|
+
const size = this.context.largestObjectNumber +
|
|
10427
|
+
(this._largestSkippedObjectNum === this.context.largestObjectNumber
|
|
10428
|
+
? 0
|
|
10429
|
+
: 1);
|
|
10395
10430
|
return this.context.obj({
|
|
10396
|
-
Size:
|
|
10431
|
+
Size: size,
|
|
10397
10432
|
Root: this.context.trailerInfo.Root,
|
|
10398
10433
|
Encrypt: this.context.trailerInfo.Encrypt,
|
|
10399
10434
|
Info: this.context.trailerInfo.Info,
|
|
@@ -10403,6 +10438,7 @@ class PDFWriter {
|
|
|
10403
10438
|
}
|
|
10404
10439
|
computeBufferSize(incremental) {
|
|
10405
10440
|
return __awaiter(this, void 0, void 0, function* () {
|
|
10441
|
+
this._largestSkippedObjectNum = 0;
|
|
10406
10442
|
const header = PDFHeader.forVersion(1, 7);
|
|
10407
10443
|
let size = this.snapshot.pdfSize;
|
|
10408
10444
|
if (!incremental) {
|
|
@@ -10415,7 +10451,7 @@ class PDFWriter {
|
|
|
10415
10451
|
for (let idx = 0, len = indirectObjects.length; idx < len; idx++) {
|
|
10416
10452
|
const indirectObject = indirectObjects[idx];
|
|
10417
10453
|
const [ref, object] = indirectObject;
|
|
10418
|
-
if (!this.
|
|
10454
|
+
if (!this.shouldSave(incremental, ref.objectNumber, object))
|
|
10419
10455
|
continue;
|
|
10420
10456
|
if (security)
|
|
10421
10457
|
this.encrypt(ref, object, security);
|