@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.
@@ -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;AAGlD,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;IAOtB,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;cAW5C,iBAAiB,CAC/B,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,iBAAiB,CAAC;IAmD7B,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"}
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.snapshot.shouldSave(ref.objectNumber)) {
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: this.context.largestObjectNumber + 1,
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.snapshot.shouldSave(ref.objectNumber))
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":"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"}
1
+ {"version":3,"file":"PDFWriter.js","sourceRoot":"","sources":["../../../src/core/writers/PDFWriter.ts"],"names":[],"mappings":"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"}
@@ -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.snapshot.shouldSave(ref.objectNumber)) {
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: this.context.largestObjectNumber + 1,
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.snapshot.shouldSave(ref.objectNumber))
10454
+ if (!this.shouldSave(incremental, ref.objectNumber, object))
10419
10455
  continue;
10420
10456
  if (security)
10421
10457
  this.encrypt(ref, object, security);