@adnsistemas/pdf-lib 2.6.1 → 2.6.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.
Files changed (36) hide show
  1. package/cjs/core/parser/PDFXRefStreamParser.js +1 -1
  2. package/cjs/core/parser/PDFXRefStreamParser.js.map +1 -1
  3. package/cjs/core/structures/PDFCrossRefStream.d.ts +1 -1
  4. package/cjs/core/structures/PDFCrossRefStream.d.ts.map +1 -1
  5. package/cjs/core/structures/PDFCrossRefStream.js +10 -4
  6. package/cjs/core/structures/PDFCrossRefStream.js.map +1 -1
  7. package/cjs/core/writers/PDFStreamWriter.d.ts +2 -0
  8. package/cjs/core/writers/PDFStreamWriter.d.ts.map +1 -1
  9. package/cjs/core/writers/PDFStreamWriter.js +22 -4
  10. package/cjs/core/writers/PDFStreamWriter.js.map +1 -1
  11. package/dist/pdf-lib.esm.js +33 -9
  12. package/dist/pdf-lib.esm.js.map +1 -1
  13. package/dist/pdf-lib.esm.min.js +3 -3
  14. package/dist/pdf-lib.esm.min.js.map +1 -1
  15. package/dist/pdf-lib.js +33 -9
  16. package/dist/pdf-lib.js.map +1 -1
  17. package/dist/pdf-lib.min.js +3 -3
  18. package/dist/pdf-lib.min.js.map +1 -1
  19. package/es/core/parser/PDFXRefStreamParser.js +1 -1
  20. package/es/core/parser/PDFXRefStreamParser.js.map +1 -1
  21. package/es/core/structures/PDFCrossRefStream.d.ts +1 -1
  22. package/es/core/structures/PDFCrossRefStream.d.ts.map +1 -1
  23. package/es/core/structures/PDFCrossRefStream.js +10 -4
  24. package/es/core/structures/PDFCrossRefStream.js.map +1 -1
  25. package/es/core/writers/PDFStreamWriter.d.ts +2 -0
  26. package/es/core/writers/PDFStreamWriter.d.ts.map +1 -1
  27. package/es/core/writers/PDFStreamWriter.js +22 -4
  28. package/es/core/writers/PDFStreamWriter.js.map +1 -1
  29. package/package.json +1 -1
  30. package/src/core/parser/PDFXRefStreamParser.ts +1 -1
  31. package/src/core/structures/PDFCrossRefStream.ts +11 -5
  32. package/src/core/writers/PDFStreamWriter.ts +21 -5
  33. package/ts3.4/cjs/core/structures/PDFCrossRefStream.d.ts +1 -1
  34. package/ts3.4/cjs/core/writers/PDFStreamWriter.d.ts +2 -0
  35. package/ts3.4/es/core/structures/PDFCrossRefStream.d.ts +1 -1
  36. package/ts3.4/es/core/writers/PDFStreamWriter.d.ts +2 -0
package/dist/pdf-lib.js CHANGED
@@ -10445,7 +10445,6 @@
10445
10445
  /**
10446
10446
  * Entries should be added using the [[addDeletedEntry]],
10447
10447
  * [[addUncompressedEntry]], and [[addCompressedEntry]] methods
10448
- * **in order of ascending object number**.
10449
10448
  */
10450
10449
  class PDFCrossRefStream extends PDFFlateStream {
10451
10450
  constructor(dict, entries, encode = true) {
@@ -10514,9 +10513,16 @@
10514
10513
  this.indexCache = Cache.populatedBy(this.computeIndex);
10515
10514
  dict.set(PDFName.of('Type'), PDFName.of('XRef'));
10516
10515
  }
10516
+ appendEntry(entry) {
10517
+ const eind = this.entries.findIndex((e) => e.ref.objectNumber > entry.ref.objectNumber);
10518
+ if (eind < 0 || eind > this.entries.length)
10519
+ this.entries.push(entry);
10520
+ else
10521
+ this.entries.splice(eind, 0, entry);
10522
+ }
10517
10523
  addDeletedEntry(ref, nextFreeObjectNumber) {
10518
10524
  const type = EntryType.Deleted;
10519
- this.entries.push({ type, ref, nextFreeObjectNumber });
10525
+ this.appendEntry({ type, ref, nextFreeObjectNumber });
10520
10526
  this.entryTuplesCache.invalidate();
10521
10527
  this.maxByteWidthsCache.invalidate();
10522
10528
  this.indexCache.invalidate();
@@ -10524,7 +10530,7 @@
10524
10530
  }
10525
10531
  addUncompressedEntry(ref, offset) {
10526
10532
  const type = EntryType.Uncompressed;
10527
- this.entries.push({ type, ref, offset });
10533
+ this.appendEntry({ type, ref, offset });
10528
10534
  this.entryTuplesCache.invalidate();
10529
10535
  this.maxByteWidthsCache.invalidate();
10530
10536
  this.indexCache.invalidate();
@@ -10532,7 +10538,7 @@
10532
10538
  }
10533
10539
  addCompressedEntry(ref, objectStreamRef, index) {
10534
10540
  const type = EntryType.Compressed;
10535
- this.entries.push({ type, ref, objectStreamRef, index });
10541
+ this.appendEntry({ type, ref, objectStreamRef, index });
10536
10542
  this.entryTuplesCache.invalidate();
10537
10543
  this.maxByteWidthsCache.invalidate();
10538
10544
  this.indexCache.invalidate();
@@ -12560,12 +12566,14 @@
12560
12566
  class PDFStreamWriter extends PDFWriter {
12561
12567
  constructor(context, objectsPerTick, snapshot, encodeStreams, objectsPerStream) {
12562
12568
  super(context, objectsPerTick, snapshot);
12569
+ // the process of saving uses references numbers, and creates a new indirect object, that has to be deleted after saving
12570
+ this._refToDeleteAfterSave = 0;
12563
12571
  this.encodeStreams = encodeStreams;
12564
12572
  this.objectsPerStream = objectsPerStream;
12565
12573
  }
12566
12574
  computeBufferSize(incremental) {
12567
12575
  return __awaiter(this, void 0, void 0, function* () {
12568
- let objectNumber = this.context.largestObjectNumber + 1;
12576
+ this._refToDeleteAfterSave = 0;
12569
12577
  const header = PDFHeader.forVersion(1, 7);
12570
12578
  let size = this.snapshot.pdfSize;
12571
12579
  if (!incremental) {
@@ -12608,7 +12616,8 @@
12608
12616
  if (!chunk || chunk.length % this.objectsPerStream === 0) {
12609
12617
  chunk = [];
12610
12618
  compressedObjects.push(chunk);
12611
- objectStreamRef = PDFRef.of(objectNumber++);
12619
+ objectStreamRef = this.context.nextRef();
12620
+ this._refToDeleteAfterSave += 1;
12612
12621
  objectStreamRefs.push(objectStreamRef);
12613
12622
  }
12614
12623
  xrefStream.addCompressedEntry(ref, objectStreamRef, chunk.length);
@@ -12619,6 +12628,7 @@
12619
12628
  const chunk = compressedObjects[idx];
12620
12629
  const ref = objectStreamRefs[idx];
12621
12630
  const objectStream = PDFObjectStream.withContextAndObjects(this.context, chunk, this.encodeStreams);
12631
+ this.context.assign(ref, objectStream);
12622
12632
  if (security)
12623
12633
  this.encrypt(ref, objectStream, security);
12624
12634
  xrefStream.addUncompressedEntry(ref, size);
@@ -12627,8 +12637,9 @@
12627
12637
  if (this.shouldWaitForTick(chunk.length))
12628
12638
  yield waitForTick();
12629
12639
  }
12630
- const xrefStreamRef = PDFRef.of(objectNumber++);
12631
- xrefStream.dict.set(PDFName.of('Size'), PDFNumber.of(objectNumber));
12640
+ const xrefStreamRef = this.context.nextRef();
12641
+ this._refToDeleteAfterSave += 1;
12642
+ xrefStream.dict.set(PDFName.of('Size'), PDFNumber.of(this.context.largestObjectNumber + 1));
12632
12643
  if (this.snapshot.prevStartXRef) {
12633
12644
  xrefStream.dict.set(PDFName.of('Prev'), PDFNumber.of(this.snapshot.prevStartXRef));
12634
12645
  }
@@ -12642,6 +12653,19 @@
12642
12653
  return { size, header, indirectObjects: uncompressedObjects, trailer };
12643
12654
  });
12644
12655
  }
12656
+ serializeToBuffer() {
12657
+ const _super = Object.create(null, {
12658
+ serializeToBuffer: { get: () => super.serializeToBuffer }
12659
+ });
12660
+ return __awaiter(this, void 0, void 0, function* () {
12661
+ const buffer = yield _super.serializeToBuffer.call(this);
12662
+ // delete xref stream created for saving
12663
+ this.context.delete(PDFRef.of(this.context.largestObjectNumber - 1));
12664
+ // fix largestObjectNumbering
12665
+ this.context.largestObjectNumber -= this._refToDeleteAfterSave;
12666
+ return buffer;
12667
+ });
12668
+ }
12645
12669
  }
12646
12670
  PDFStreamWriter.forContext = (context, objectsPerTick, encodeStreams = true, objectsPerStream = 50) => new PDFStreamWriter(context, objectsPerTick, defaultDocumentSnapshot, encodeStreams, objectsPerStream);
12647
12671
  PDFStreamWriter.forContextWithSnapshot = (context, objectsPerTick, snapshot, encodeStreams = true, objectsPerStream = 50) => new PDFStreamWriter(context, objectsPerTick, snapshot, encodeStreams, objectsPerStream);
@@ -15963,7 +15987,7 @@ end\
15963
15987
  type = 1;
15964
15988
  const objectNumber = firstObjectNumber + objIdx;
15965
15989
  const entry = {
15966
- ref: PDFRef.of(objectNumber, generationNumber),
15990
+ ref: PDFRef.of(objectNumber, type === 2 ? 0 : generationNumber),
15967
15991
  offset,
15968
15992
  deleted: type === 0,
15969
15993
  inObjectStream: type === 2,