@adnsistemas/pdf-lib 2.5.0 → 2.6.1

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 (61) hide show
  1. package/README.md +43 -0
  2. package/cjs/api/PDFDocument.d.ts +14 -0
  3. package/cjs/api/PDFDocument.d.ts.map +1 -1
  4. package/cjs/api/PDFDocument.js +49 -3
  5. package/cjs/api/PDFDocument.js.map +1 -1
  6. package/cjs/api/PDFDocumentOptions.d.ts +1 -0
  7. package/cjs/api/PDFDocumentOptions.d.ts.map +1 -1
  8. package/cjs/core/PDFContext.d.ts +9 -1
  9. package/cjs/core/PDFContext.d.ts.map +1 -1
  10. package/cjs/core/PDFContext.js +54 -3
  11. package/cjs/core/PDFContext.js.map +1 -1
  12. package/cjs/core/document/PDFCrossRefSection.d.ts +5 -0
  13. package/cjs/core/document/PDFCrossRefSection.d.ts.map +1 -1
  14. package/cjs/core/document/PDFCrossRefSection.js +16 -0
  15. package/cjs/core/document/PDFCrossRefSection.js.map +1 -1
  16. package/cjs/core/parser/PDFParser.d.ts +2 -2
  17. package/cjs/core/parser/PDFParser.d.ts.map +1 -1
  18. package/cjs/core/parser/PDFParser.js +17 -5
  19. package/cjs/core/parser/PDFParser.js.map +1 -1
  20. package/dist/pdf-lib.esm.js +136 -11
  21. package/dist/pdf-lib.esm.js.map +1 -1
  22. package/dist/pdf-lib.esm.min.js +3 -3
  23. package/dist/pdf-lib.esm.min.js.map +1 -1
  24. package/dist/pdf-lib.js +136 -11
  25. package/dist/pdf-lib.js.map +1 -1
  26. package/dist/pdf-lib.min.js +3 -3
  27. package/dist/pdf-lib.min.js.map +1 -1
  28. package/es/api/PDFDocument.d.ts +14 -0
  29. package/es/api/PDFDocument.d.ts.map +1 -1
  30. package/es/api/PDFDocument.js +49 -3
  31. package/es/api/PDFDocument.js.map +1 -1
  32. package/es/api/PDFDocumentOptions.d.ts +1 -0
  33. package/es/api/PDFDocumentOptions.d.ts.map +1 -1
  34. package/es/core/PDFContext.d.ts +9 -1
  35. package/es/core/PDFContext.d.ts.map +1 -1
  36. package/es/core/PDFContext.js +54 -3
  37. package/es/core/PDFContext.js.map +1 -1
  38. package/es/core/document/PDFCrossRefSection.d.ts +5 -0
  39. package/es/core/document/PDFCrossRefSection.d.ts.map +1 -1
  40. package/es/core/document/PDFCrossRefSection.js +16 -0
  41. package/es/core/document/PDFCrossRefSection.js.map +1 -1
  42. package/es/core/parser/PDFParser.d.ts +2 -2
  43. package/es/core/parser/PDFParser.d.ts.map +1 -1
  44. package/es/core/parser/PDFParser.js +17 -5
  45. package/es/core/parser/PDFParser.js.map +1 -1
  46. package/package.json +3 -3
  47. package/src/api/PDFDocument.ts +53 -0
  48. package/src/api/PDFDocumentOptions.ts +1 -0
  49. package/src/core/PDFContext.ts +54 -3
  50. package/src/core/document/PDFCrossRefSection.ts +24 -0
  51. package/src/core/parser/PDFParser.ts +15 -3
  52. package/ts3.4/cjs/api/PDFDocument.d.ts +14 -0
  53. package/ts3.4/cjs/api/PDFDocumentOptions.d.ts +1 -0
  54. package/ts3.4/cjs/core/PDFContext.d.ts +9 -1
  55. package/ts3.4/cjs/core/document/PDFCrossRefSection.d.ts +5 -0
  56. package/ts3.4/cjs/core/parser/PDFParser.d.ts +2 -2
  57. package/ts3.4/es/api/PDFDocument.d.ts +14 -0
  58. package/ts3.4/es/api/PDFDocumentOptions.d.ts +1 -0
  59. package/ts3.4/es/core/PDFContext.d.ts +9 -1
  60. package/ts3.4/es/core/document/PDFCrossRefSection.d.ts +5 -0
  61. package/ts3.4/es/core/parser/PDFParser.d.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"PDFParser.d.ts","sourceRoot":"","sources":["../../../src/core/parser/PDFParser.ts"],"names":[],"mappings":"AAiBA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAGhD,OAAO,UAAU,MAAM,eAAe,CAAC;AAKvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGnD,cAAM,SAAU,SAAQ,eAAe;IACrC,MAAM,CAAC,mBAAmB,aACd,UAAU,mBACH,MAAM,yBACA,OAAO,yBACP,OAAO,eACjB,OAAO,kBACJ,sBAAsB,yBACf,OAAO,eAU5B;IAEJ,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IAC/C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAK;gBAGxB,QAAQ,EAAE,UAAU,EACpB,cAAc,SAAW,EACzB,oBAAoB,UAAQ,EAC5B,oBAAoB,UAAQ,EAC5B,UAAU,UAAQ,EAClB,aAAa,CAAC,EAAE,sBAAsB,EACtC,oBAAoB,UAAQ;IAkBxB,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IA4B1C,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,iBAAiB,CAGvB;YAEY,mBAAmB;IAmCjC,OAAO,CAAC,+BAA+B;YAiCzB,oBAAoB;IAsBlC,OAAO,CAAC,yBAAyB;IAuCjC,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,iBAAiB;YAiBX,oBAAoB;IAUlC;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAqBrB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,uBAAuB;CAWhC;AAED,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"PDFParser.d.ts","sourceRoot":"","sources":["../../../src/core/parser/PDFParser.ts"],"names":[],"mappings":"AAiBA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAGhD,OAAO,UAAU,MAAM,eAAe,CAAC;AAKvC,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AAGnD,cAAM,SAAU,SAAQ,eAAe;IACrC,MAAM,CAAC,mBAAmB,aACd,UAAU,mBACH,MAAM,yBACA,OAAO,yBACP,OAAO,eACjB,OAAO,kBACJ,sBAAsB,yBACf,OAAO,4BACJ,OAAO,eAW/B;IAEJ,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAU;IAC/C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAK;gBAGxB,QAAQ,EAAE,UAAU,EACpB,cAAc,SAAW,EACzB,oBAAoB,UAAQ,EAC5B,oBAAoB,UAAQ,EAC5B,UAAU,UAAQ,EAClB,aAAa,CAAC,EAAE,sBAAsB,EACtC,oBAAoB,UAAQ,EAC5B,uBAAuB,UAAQ;IAkB3B,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IA4B1C,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,yBAAyB;IAWjC,OAAO,CAAC,iBAAiB,CAGvB;YAEY,mBAAmB;IA2CjC,OAAO,CAAC,+BAA+B;YAiCzB,oBAAoB;IAsBlC,OAAO,CAAC,yBAAyB;IAuCjC,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,iBAAiB;YAiBX,oBAAoB;IAWlC;;;;;OAKG;IACH,OAAO,CAAC,aAAa;IAqBrB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,uBAAuB;CAWhC;AAED,eAAe,SAAS,CAAC"}
@@ -19,8 +19,8 @@ import { IsDigit } from '../syntax/Numeric.js';
19
19
  import { waitForTick } from '../../utils/index.js';
20
20
  import PDFNumber from '../objects/PDFNumber.js';
21
21
  class PDFParser extends PDFObjectParser {
22
- constructor(pdfBytes, objectsPerTick = Infinity, throwOnInvalidObject = false, warnOnInvalidObjects = false, capNumbers = false, cryptoFactory, forIncrementalUpdate = false) {
23
- super(ByteStream.of(pdfBytes), PDFContext.create(), capNumbers, cryptoFactory);
22
+ constructor(pdfBytes, objectsPerTick = Infinity, throwOnInvalidObject = false, warnOnInvalidObjects = false, capNumbers = false, cryptoFactory, forIncrementalUpdate = false, preserveObjectsVersions = false) {
23
+ super(ByteStream.of(pdfBytes), PDFContext.create(preserveObjectsVersions), capNumbers, cryptoFactory);
24
24
  this.alreadyParsed = false;
25
25
  this.parsedObjects = 0;
26
26
  this.shouldWaitForTick = () => {
@@ -127,7 +127,17 @@ class PDFParser extends PDFObjectParser {
127
127
  }
128
128
  else if (object instanceof PDFRawStream &&
129
129
  object.dict.lookup(PDFName.of('Type')) === PDFName.of('XRef')) {
130
- PDFXRefStreamParser.forStream(object).parseIntoContext();
130
+ const entries = PDFXRefStreamParser.forStream(object).parseIntoContext();
131
+ if (entries.length) {
132
+ const xref = PDFCrossRefSection.createEmpty();
133
+ for (const entry of entries) {
134
+ if (entry.deleted)
135
+ xref.addDeletedEntry(entry.ref, entry.offset);
136
+ else
137
+ xref.addEntry(entry.ref, entry.offset);
138
+ }
139
+ this.context.xrefs.push(xref);
140
+ }
131
141
  }
132
142
  // always register the object and the ref, to properly handle object numeration
133
143
  this.context.assign(ref, object);
@@ -255,7 +265,9 @@ class PDFParser extends PDFObjectParser {
255
265
  parseDocumentSection() {
256
266
  return __awaiter(this, void 0, void 0, function* () {
257
267
  yield this.parseIndirectObjects();
258
- this.maybeParseCrossRefSection();
268
+ const xref = this.maybeParseCrossRefSection();
269
+ if (xref)
270
+ this.context.xrefs.push(xref);
259
271
  this.maybeParseTrailerDict();
260
272
  this.maybeParseTrailer();
261
273
  // TODO: Can this be done only when needed, to avoid harming performance?
@@ -312,6 +324,6 @@ class PDFParser extends PDFObjectParser {
312
324
  }
313
325
  }
314
326
  }
315
- PDFParser.forBytesWithOptions = (pdfBytes, objectsPerTick, throwOnInvalidObject, warnOnInvalidObjects, capNumbers, cryptoFactory, forIncrementalUpdate) => new PDFParser(pdfBytes, objectsPerTick, throwOnInvalidObject, warnOnInvalidObjects, capNumbers, cryptoFactory, forIncrementalUpdate);
327
+ PDFParser.forBytesWithOptions = (pdfBytes, objectsPerTick, throwOnInvalidObject, warnOnInvalidObjects, capNumbers, cryptoFactory, forIncrementalUpdate, preserveObjectsVersions) => new PDFParser(pdfBytes, objectsPerTick, throwOnInvalidObject, warnOnInvalidObjects, capNumbers, cryptoFactory, forIncrementalUpdate, preserveObjectsVersions);
316
328
  export default PDFParser;
317
329
  //# sourceMappingURL=PDFParser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PDFParser.js","sourceRoot":"","sources":["../../../src/core/parser/PDFParser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PDFParser.js","sourceRoot":"","sources":["../../../src/core/parser/PDFParser.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adnsistemas/pdf-lib",
3
- "version": "2.5.0",
3
+ "version": "2.6.1",
4
4
  "description": "Create and modify PDF files with JavaScript",
5
5
  "author": "Andrew Dillon <andrew.dillon.j@gmail.com>",
6
6
  "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e",
@@ -46,11 +46,11 @@
46
46
  ],
47
47
  "scripts": {
48
48
  "release": "yarn release:prep && release-it",
49
- "release:prep": "yarn clean && yarn lint && yarn typecheck && yarn test && yarn build",
49
+ "release:prep": "yarn clean && yarn lint && yarn typecheck && yarn test && yarn build && coveralls report",
50
50
  "get:version": "node --eval 'console.log(require(`./package.json`).version)'",
51
51
  "clean": "rimraf ts3.4 build cjs dist es scratchpad/build coverage tsBuildInfo.json apps/node-build apps/node/tsBuildInfo.json isolate*.log flamegraph.html out.pdf",
52
52
  "typecheck": "tsc --noEmit --incremental false --tsBuildInfoFile null",
53
- "test": "jest --config jest.config.js --runInBand",
53
+ "test": "jest --config jest.config.js --runInBand --coverage",
54
54
  "testw": "jest --config jest.config.js --watch",
55
55
  "testc": "jest --config jest.config.js --coverage && open coverage/index.html",
56
56
  "lint-staged": "lint-staged",
@@ -92,6 +92,12 @@ export type PDFAttachment = {
92
92
  modificationDate: Date | undefined;
93
93
  };
94
94
 
95
+ export type PDFObjectVersions = {
96
+ ref: PDFRef;
97
+ actual: PDFObject | undefined;
98
+ previous: PDFObject[];
99
+ };
100
+
95
101
  /**
96
102
  * Represents a PDF document.
97
103
  */
@@ -161,6 +167,7 @@ export default class PDFDocument {
161
167
  capNumbers = false,
162
168
  password,
163
169
  forIncrementalUpdate = false,
170
+ preserveObjectsVersions = false,
164
171
  } = options;
165
172
 
166
173
  assertIs(pdf, 'pdf', ['string', Uint8Array, ArrayBuffer]);
@@ -170,6 +177,7 @@ export default class PDFDocument {
170
177
  assertIs(warnOnInvalidObjects, 'warnOnInvalidObjects', ['boolean']);
171
178
  assertIs(password, 'password', ['string', 'undefined']);
172
179
  assertIs(forIncrementalUpdate, 'forIncrementalUpdate', ['boolean']);
180
+ assertIs(preserveObjectsVersions, 'preserveObjectsVersions', ['boolean']);
173
181
 
174
182
  const bytes = toUint8Array(pdf);
175
183
  const context = await PDFParser.forBytesWithOptions(
@@ -180,6 +188,7 @@ export default class PDFDocument {
180
188
  capNumbers,
181
189
  undefined,
182
190
  forIncrementalUpdate,
191
+ preserveObjectsVersions,
183
192
  ).parseDocument();
184
193
  if (
185
194
  !!context.lookup(context.trailerInfo.Encrypt) &&
@@ -200,6 +209,7 @@ export default class PDFDocument {
200
209
  password,
201
210
  ),
202
211
  forIncrementalUpdate,
212
+ preserveObjectsVersions,
203
213
  ).parseDocument();
204
214
  const pdfDoc = new PDFDocument(decryptedContext, true, updateMetadata);
205
215
  if (forIncrementalUpdate) pdfDoc.takeSnapshot();
@@ -1638,6 +1648,49 @@ export default class PDFDocument {
1638
1648
  return snapshot;
1639
1649
  }
1640
1650
 
1651
+ /**
1652
+ * Returns the update version of the object as 'actual', and all the previous versions, of the objects
1653
+ * that has changed in the indicated update (or the last one).
1654
+ * If document wasn't load to preserve objects versions, an empty array is returned.
1655
+ * @param {number} lastUpdateMinusX If not the last update, how many updates before the last.
1656
+ * @returns {PDFObjectVersions[]} Objects modified in the update, and previous versions
1657
+ */
1658
+ getChangedObjects(lastUpdateMinusX: number = 0): PDFObjectVersions[] {
1659
+ if (!this.context.preserveObjectsVersions) return [];
1660
+ if (lastUpdateMinusX < 0) lastUpdateMinusX = 0;
1661
+ const upind = this.context.xrefs.length - lastUpdateMinusX - 1;
1662
+ const entries = this.context.listXrefEntries(upind);
1663
+ if (!entries.length) return [];
1664
+ const changed = new Map<PDFRef, PDFObjectVersions>();
1665
+ for (const entry of entries) {
1666
+ const ref = entry.ref;
1667
+ changed.set(ref, {
1668
+ ref,
1669
+ actual: entry.deleted ? undefined : this.context.lookup(ref),
1670
+ previous: this.context.getObjectVersions(ref),
1671
+ });
1672
+ }
1673
+ // if not the las update, then check objects later modified and adjust PDFObjectVersions accordingly
1674
+ if (!lastUpdateMinusX)
1675
+ return Array.from(changed.entries()).map((value) => value[1]);
1676
+ while (lastUpdateMinusX) {
1677
+ lastUpdateMinusX -= 1;
1678
+ const upind = this.context.xrefs.length - lastUpdateMinusX - 1;
1679
+ const nentries = this.context.listXrefEntries(upind);
1680
+ for (const nentry of nentries) {
1681
+ const oce = changed.get(nentry.ref);
1682
+ if (oce && oce.actual) {
1683
+ oce.actual = oce.previous[0];
1684
+ oce.previous = oce.previous.slice(1);
1685
+ }
1686
+ }
1687
+ }
1688
+ // if PDF has errors, it may happen to end with objects that has no current, nor previous versions
1689
+ return Array.from(changed.entries())
1690
+ .map((value) => value[1])
1691
+ .filter((ov) => ov.actual || ov.previous.length);
1692
+ }
1693
+
1641
1694
  private async prepareForSave(options: SaveOptions): Promise<void> {
1642
1695
  const { addDefaultPage = true, updateFieldAppearances = true } = options;
1643
1696
 
@@ -35,6 +35,7 @@ export interface LoadOptions {
35
35
  capNumbers?: boolean;
36
36
  password?: string;
37
37
  forIncrementalUpdate?: boolean;
38
+ preserveObjectsVersions?: boolean;
38
39
  }
39
40
 
40
41
  export interface CreateOptions {
@@ -21,6 +21,8 @@ import PDFContentStream from './structures/PDFContentStream';
21
21
  import PDFSecurity from './security/PDFSecurity';
22
22
  import { typedArrayFor } from '../utils';
23
23
  import { SimpleRNG } from '../utils/rng';
24
+ import PDFCrossRefSection from './document/PDFCrossRefSection';
25
+ import type { Entry } from './document/PDFCrossRefSection';
24
26
 
25
27
  type LookupKey = PDFRef | PDFObject | undefined;
26
28
 
@@ -55,7 +57,8 @@ const byAscendingObjectNumber = (
55
57
 
56
58
  class PDFContext {
57
59
  isDecrypted = true;
58
- static create = () => new PDFContext();
60
+ static create = (withObjectVersions: boolean = false) =>
61
+ new PDFContext(withObjectVersions);
59
62
 
60
63
  largestObjectNumber: number;
61
64
  header: PDFHeader;
@@ -74,20 +77,30 @@ class PDFContext {
74
77
  originalBytes?: Uint8Array;
75
78
  };
76
79
  snapshot?: DocumentSnapshot;
80
+ xrefs: PDFCrossRefSection[] = [];
81
+ private _preserveObjectsVersions: boolean;
82
+ public get preserveObjectsVersions(): boolean {
83
+ return this._preserveObjectsVersions;
84
+ }
77
85
 
78
86
  security?: PDFSecurity;
79
87
 
80
88
  private readonly indirectObjects: Map<PDFRef, PDFObject>;
89
+ private readonly objectsPreviousVersions: Map<PDFRef, PDFObject[]>;
81
90
 
82
91
  private pushGraphicsStateContentStreamRef?: PDFRef;
83
92
  private popGraphicsStateContentStreamRef?: PDFRef;
84
93
 
85
- private constructor() {
94
+ private constructor(preserveObjectsVersions?: boolean) {
95
+ this._preserveObjectsVersions = preserveObjectsVersions
96
+ ? preserveObjectsVersions
97
+ : false;
86
98
  this.largestObjectNumber = 0;
87
99
  this.header = PDFHeader.forVersion(1, 7);
88
100
  this.trailerInfo = {};
89
101
 
90
102
  this.indirectObjects = new Map();
103
+ this.objectsPreviousVersions = new Map();
91
104
  this.rng = SimpleRNG.withSeed(1);
92
105
  this.pdfFileDetails = {
93
106
  pdfSize: 0,
@@ -97,6 +110,17 @@ class PDFContext {
97
110
  }
98
111
 
99
112
  assign(ref: PDFRef, object: PDFObject): void {
113
+ if (this.preserveObjectsVersions) {
114
+ const prevOV = this.indirectObjects.get(ref);
115
+ if (prevOV) {
116
+ const prevList = this.objectsPreviousVersions.get(ref);
117
+ if (!prevList) {
118
+ this.objectsPreviousVersions.set(ref, [prevOV]);
119
+ } else {
120
+ prevList.unshift(prevOV);
121
+ }
122
+ }
123
+ }
100
124
  this.indirectObjects.set(ref, object);
101
125
  if (ref.objectNumber > this.largestObjectNumber) {
102
126
  this.largestObjectNumber = ref.objectNumber;
@@ -105,7 +129,9 @@ class PDFContext {
105
129
 
106
130
  nextRef(): PDFRef {
107
131
  this.largestObjectNumber += 1;
108
- return PDFRef.of(this.largestObjectNumber);
132
+ const ref = PDFRef.of(this.largestObjectNumber);
133
+ if (this.snapshot) this.snapshot.markRefForSave(ref);
134
+ return ref;
109
135
  }
110
136
 
111
137
  register(object: PDFObject): PDFRef {
@@ -116,6 +142,18 @@ class PDFContext {
116
142
 
117
143
  delete(ref: PDFRef): boolean {
118
144
  if (this.snapshot) this.snapshot.markDeletedRef(ref);
145
+ if (this.preserveObjectsVersions) {
146
+ const object = this.indirectObjects.get(ref);
147
+ if (object) {
148
+ // check is not already deleted
149
+ const verlist = this.objectsPreviousVersions.get(ref);
150
+ if (verlist) {
151
+ verlist.unshift(object);
152
+ } else {
153
+ this.objectsPreviousVersions.set(ref, [object]);
154
+ }
155
+ }
156
+ }
119
157
  return this.indirectObjects.delete(ref);
120
158
  }
121
159
 
@@ -393,6 +431,19 @@ class PDFContext {
393
431
  registerObjectChange(obj: PDFObject) {
394
432
  if (this.snapshot) this.snapshot.markObjForSave(obj);
395
433
  }
434
+
435
+ getObjectVersions(ref: PDFRef): PDFObject[] {
436
+ if (!this.preserveObjectsVersions) return [];
437
+ const list = this.objectsPreviousVersions.get(ref);
438
+ if (list) return list;
439
+ return [];
440
+ }
441
+
442
+ listXrefEntries(xrefIndex: number = -1): Entry[] {
443
+ if (xrefIndex < 0) xrefIndex = this.xrefs.length - 1;
444
+ if (xrefIndex < 0 || xrefIndex >= this.xrefs.length) return [];
445
+ return this.xrefs[xrefIndex].listRefs();
446
+ }
396
447
  }
397
448
 
398
449
  export default PDFContext;
@@ -212,6 +212,30 @@ class PDFCrossRefSection {
212
212
  this.chunkLength += 1;
213
213
  }
214
214
  }
215
+
216
+ /**
217
+ * Returns all the entries in the XREF section, except the first one (object == 0)
218
+ * @returns {Entry[]} All the entries in the XREF section
219
+ */
220
+ listRefs(): Entry[] {
221
+ const refList: Entry[] = [];
222
+ for (
223
+ let rangeIdx = 0, rangeLen = this.subsections.length;
224
+ rangeIdx < rangeLen;
225
+ rangeIdx++
226
+ ) {
227
+ const range = this.subsections[rangeIdx];
228
+ for (
229
+ let entryIdx = 0, entryLen = range.length;
230
+ entryIdx < entryLen;
231
+ entryIdx++
232
+ ) {
233
+ const entry = range[entryIdx];
234
+ if (entry.ref.objectNumber) refList.push(entry);
235
+ }
236
+ }
237
+ return refList;
238
+ }
215
239
  }
216
240
 
217
241
  export default PDFCrossRefSection;
@@ -35,6 +35,7 @@ class PDFParser extends PDFObjectParser {
35
35
  capNumbers?: boolean,
36
36
  cryptoFactory?: CipherTransformFactory,
37
37
  forIncrementalUpdate?: boolean,
38
+ preserveObjectsVersions?: boolean,
38
39
  ) =>
39
40
  new PDFParser(
40
41
  pdfBytes,
@@ -44,6 +45,7 @@ class PDFParser extends PDFObjectParser {
44
45
  capNumbers,
45
46
  cryptoFactory,
46
47
  forIncrementalUpdate,
48
+ preserveObjectsVersions,
47
49
  );
48
50
 
49
51
  private readonly objectsPerTick: number;
@@ -60,10 +62,11 @@ class PDFParser extends PDFObjectParser {
60
62
  capNumbers = false,
61
63
  cryptoFactory?: CipherTransformFactory,
62
64
  forIncrementalUpdate = false,
65
+ preserveObjectsVersions = false,
63
66
  ) {
64
67
  super(
65
68
  ByteStream.of(pdfBytes),
66
- PDFContext.create(),
69
+ PDFContext.create(preserveObjectsVersions),
67
70
  capNumbers,
68
71
  cryptoFactory,
69
72
  );
@@ -196,7 +199,15 @@ class PDFParser extends PDFObjectParser {
196
199
  object instanceof PDFRawStream &&
197
200
  object.dict.lookup(PDFName.of('Type')) === PDFName.of('XRef')
198
201
  ) {
199
- PDFXRefStreamParser.forStream(object).parseIntoContext();
202
+ const entries = PDFXRefStreamParser.forStream(object).parseIntoContext();
203
+ if (entries.length) {
204
+ const xref = PDFCrossRefSection.createEmpty();
205
+ for (const entry of entries) {
206
+ if (entry.deleted) xref.addDeletedEntry(entry.ref, entry.offset);
207
+ else xref.addEntry(entry.ref, entry.offset);
208
+ }
209
+ this.context.xrefs.push(xref);
210
+ }
200
211
  }
201
212
  // always register the object and the ref, to properly handle object numeration
202
213
  this.context.assign(ref, object);
@@ -340,7 +351,8 @@ class PDFParser extends PDFObjectParser {
340
351
 
341
352
  private async parseDocumentSection(): Promise<void> {
342
353
  await this.parseIndirectObjects();
343
- this.maybeParseCrossRefSection();
354
+ const xref = this.maybeParseCrossRefSection();
355
+ if (xref) this.context.xrefs.push(xref);
344
356
  this.maybeParseTrailerDict();
345
357
  this.maybeParseTrailer();
346
358
 
@@ -6,6 +6,7 @@ import PDFForm from './form/PDFForm';
6
6
  import { StandardFonts } from './StandardFonts';
7
7
  import { PageBoundingBox, PDFCatalog, PDFContext } from '../core';
8
8
  import { AttachmentOptions, SaveOptions, Base64SaveOptions, LoadOptions, CreateOptions, EmbedFontOptions, SetTitleOptions, IncrementalSaveOptions } from './PDFDocumentOptions';
9
+ import PDFObject from '../core/objects/PDFObject';
9
10
  import PDFRef from '../core/objects/PDFRef';
10
11
  import { Fontkit } from '../types/fontkit';
11
12
  import { TransformationMatrix } from '../types/matrix';
@@ -22,6 +23,11 @@ export type PDFAttachment = {
22
23
  creationDate: Date | undefined;
23
24
  modificationDate: Date | undefined;
24
25
  };
26
+ export type PDFObjectVersions = {
27
+ ref: PDFRef;
28
+ actual: PDFObject | undefined;
29
+ previous: PDFObject[];
30
+ };
25
31
  /**
26
32
  * Represents a PDF document.
27
33
  */
@@ -828,6 +834,14 @@ export default class PDFDocument {
828
834
  saveAsBase64(options?: Base64SaveOptions): Promise<string>;
829
835
  findPageForAnnotationRef(ref: PDFRef): PDFPage | undefined;
830
836
  takeSnapshot(): DocumentSnapshot;
837
+ /**
838
+ * Returns the update version of the object as 'actual', and all the previous versions, of the objects
839
+ * that has changed in the indicated update (or the last one).
840
+ * If document wasn't load to preserve objects versions, an empty array is returned.
841
+ * @param {number} lastUpdateMinusX If not the last update, how many updates before the last.
842
+ * @returns {PDFObjectVersions[]} Objects modified in the update, and previous versions
843
+ */
844
+ getChangedObjects(lastUpdateMinusX?: number): PDFObjectVersions[];
831
845
  private prepareForSave;
832
846
  private embedAll;
833
847
  private updateInfoDict;
@@ -30,6 +30,7 @@ export interface LoadOptions {
30
30
  capNumbers?: boolean;
31
31
  password?: string;
32
32
  forIncrementalUpdate?: boolean;
33
+ preserveObjectsVersions?: boolean;
33
34
  }
34
35
  export interface CreateOptions {
35
36
  updateMetadata?: boolean;
@@ -16,6 +16,8 @@ import PDFOperator from './operators/PDFOperator';
16
16
  import PDFContentStream from './structures/PDFContentStream';
17
17
  import PDFSecurity from './security/PDFSecurity';
18
18
  import { SimpleRNG } from '../utils/rng';
19
+ import PDFCrossRefSection from './document/PDFCrossRefSection';
20
+ import { Entry } from './document/PDFCrossRefSection';
19
21
  type LookupKey = PDFRef | PDFObject | undefined;
20
22
  interface LiteralObject {
21
23
  [name: string]: Literal | PDFObject;
@@ -32,7 +34,7 @@ interface LiteralConfig {
32
34
  }
33
35
  declare class PDFContext {
34
36
  isDecrypted: boolean;
35
- static create: () => PDFContext;
37
+ static create: (withObjectVersions?: boolean) => PDFContext;
36
38
  largestObjectNumber: number;
37
39
  header: PDFHeader;
38
40
  trailerInfo: {
@@ -50,8 +52,12 @@ declare class PDFContext {
50
52
  originalBytes?: Uint8Array;
51
53
  };
52
54
  snapshot?: DocumentSnapshot;
55
+ xrefs: PDFCrossRefSection[];
56
+ private _preserveObjectsVersions;
57
+ readonly preserveObjectsVersions: boolean;
53
58
  security?: PDFSecurity;
54
59
  private readonly indirectObjects;
60
+ private readonly objectsPreviousVersions;
55
61
  private pushGraphicsStateContentStreamRef?;
56
62
  private popGraphicsStateContentStreamRef?;
57
63
  private constructor();
@@ -113,6 +119,8 @@ declare class PDFContext {
113
119
  getPopGraphicsStateContentStream(): PDFRef;
114
120
  addRandomSuffix(prefix: string, suffixLength?: number): string;
115
121
  registerObjectChange(obj: PDFObject): void;
122
+ getObjectVersions(ref: PDFRef): PDFObject[];
123
+ listXrefEntries(xrefIndex?: number): Entry[];
116
124
  }
117
125
  export default PDFContext;
118
126
  //# sourceMappingURL=PDFContext.d.ts.map
@@ -23,6 +23,11 @@ declare class PDFCrossRefSection {
23
23
  private copySubsectionsIntoBuffer;
24
24
  private copyEntriesIntoBuffer;
25
25
  private append;
26
+ /**
27
+ * Returns all the entries in the XREF section, except the first one (object == 0)
28
+ * @returns {Entry[]} All the entries in the XREF section
29
+ */
30
+ listRefs(): Entry[];
26
31
  }
27
32
  export default PDFCrossRefSection;
28
33
  //# sourceMappingURL=PDFCrossRefSection.d.ts.map
@@ -2,13 +2,13 @@ import PDFObjectParser from './PDFObjectParser';
2
2
  import PDFContext from '../PDFContext';
3
3
  import { CipherTransformFactory } from '../crypto';
4
4
  declare class PDFParser extends PDFObjectParser {
5
- static forBytesWithOptions: (pdfBytes: Uint8Array, objectsPerTick?: number, throwOnInvalidObject?: boolean, warnOnInvalidObjects?: boolean, capNumbers?: boolean, cryptoFactory?: CipherTransformFactory, forIncrementalUpdate?: boolean) => PDFParser;
5
+ static forBytesWithOptions: (pdfBytes: Uint8Array, objectsPerTick?: number, throwOnInvalidObject?: boolean, warnOnInvalidObjects?: boolean, capNumbers?: boolean, cryptoFactory?: CipherTransformFactory, forIncrementalUpdate?: boolean, preserveObjectsVersions?: boolean) => PDFParser;
6
6
  private readonly objectsPerTick;
7
7
  private readonly throwOnInvalidObject;
8
8
  private readonly warnOnInvalidObjects;
9
9
  private alreadyParsed;
10
10
  private parsedObjects;
11
- constructor(pdfBytes: Uint8Array, objectsPerTick?: number, throwOnInvalidObject?: boolean, warnOnInvalidObjects?: boolean, capNumbers?: boolean, cryptoFactory?: CipherTransformFactory, forIncrementalUpdate?: boolean);
11
+ constructor(pdfBytes: Uint8Array, objectsPerTick?: number, throwOnInvalidObject?: boolean, warnOnInvalidObjects?: boolean, capNumbers?: boolean, cryptoFactory?: CipherTransformFactory, forIncrementalUpdate?: boolean, preserveObjectsVersions?: boolean);
12
12
  parseDocument(): Promise<PDFContext>;
13
13
  private maybeRecoverRoot;
14
14
  private parseHeader;
@@ -6,6 +6,7 @@ import PDFForm from './form/PDFForm';
6
6
  import { StandardFonts } from './StandardFonts';
7
7
  import { PageBoundingBox, PDFCatalog, PDFContext } from '../core';
8
8
  import { AttachmentOptions, SaveOptions, Base64SaveOptions, LoadOptions, CreateOptions, EmbedFontOptions, SetTitleOptions, IncrementalSaveOptions } from './PDFDocumentOptions';
9
+ import PDFObject from '../core/objects/PDFObject';
9
10
  import PDFRef from '../core/objects/PDFRef';
10
11
  import { Fontkit } from '../types/fontkit';
11
12
  import { TransformationMatrix } from '../types/matrix';
@@ -22,6 +23,11 @@ export type PDFAttachment = {
22
23
  creationDate: Date | undefined;
23
24
  modificationDate: Date | undefined;
24
25
  };
26
+ export type PDFObjectVersions = {
27
+ ref: PDFRef;
28
+ actual: PDFObject | undefined;
29
+ previous: PDFObject[];
30
+ };
25
31
  /**
26
32
  * Represents a PDF document.
27
33
  */
@@ -828,6 +834,14 @@ export default class PDFDocument {
828
834
  saveAsBase64(options?: Base64SaveOptions): Promise<string>;
829
835
  findPageForAnnotationRef(ref: PDFRef): PDFPage | undefined;
830
836
  takeSnapshot(): DocumentSnapshot;
837
+ /**
838
+ * Returns the update version of the object as 'actual', and all the previous versions, of the objects
839
+ * that has changed in the indicated update (or the last one).
840
+ * If document wasn't load to preserve objects versions, an empty array is returned.
841
+ * @param {number} lastUpdateMinusX If not the last update, how many updates before the last.
842
+ * @returns {PDFObjectVersions[]} Objects modified in the update, and previous versions
843
+ */
844
+ getChangedObjects(lastUpdateMinusX?: number): PDFObjectVersions[];
831
845
  private prepareForSave;
832
846
  private embedAll;
833
847
  private updateInfoDict;
@@ -30,6 +30,7 @@ export interface LoadOptions {
30
30
  capNumbers?: boolean;
31
31
  password?: string;
32
32
  forIncrementalUpdate?: boolean;
33
+ preserveObjectsVersions?: boolean;
33
34
  }
34
35
  export interface CreateOptions {
35
36
  updateMetadata?: boolean;
@@ -16,6 +16,8 @@ import PDFOperator from './operators/PDFOperator';
16
16
  import PDFContentStream from './structures/PDFContentStream';
17
17
  import PDFSecurity from './security/PDFSecurity';
18
18
  import { SimpleRNG } from '../utils/rng';
19
+ import PDFCrossRefSection from './document/PDFCrossRefSection';
20
+ import { Entry } from './document/PDFCrossRefSection';
19
21
  type LookupKey = PDFRef | PDFObject | undefined;
20
22
  interface LiteralObject {
21
23
  [name: string]: Literal | PDFObject;
@@ -32,7 +34,7 @@ interface LiteralConfig {
32
34
  }
33
35
  declare class PDFContext {
34
36
  isDecrypted: boolean;
35
- static create: () => PDFContext;
37
+ static create: (withObjectVersions?: boolean) => PDFContext;
36
38
  largestObjectNumber: number;
37
39
  header: PDFHeader;
38
40
  trailerInfo: {
@@ -50,8 +52,12 @@ declare class PDFContext {
50
52
  originalBytes?: Uint8Array;
51
53
  };
52
54
  snapshot?: DocumentSnapshot;
55
+ xrefs: PDFCrossRefSection[];
56
+ private _preserveObjectsVersions;
57
+ readonly preserveObjectsVersions: boolean;
53
58
  security?: PDFSecurity;
54
59
  private readonly indirectObjects;
60
+ private readonly objectsPreviousVersions;
55
61
  private pushGraphicsStateContentStreamRef?;
56
62
  private popGraphicsStateContentStreamRef?;
57
63
  private constructor();
@@ -113,6 +119,8 @@ declare class PDFContext {
113
119
  getPopGraphicsStateContentStream(): PDFRef;
114
120
  addRandomSuffix(prefix: string, suffixLength?: number): string;
115
121
  registerObjectChange(obj: PDFObject): void;
122
+ getObjectVersions(ref: PDFRef): PDFObject[];
123
+ listXrefEntries(xrefIndex?: number): Entry[];
116
124
  }
117
125
  export default PDFContext;
118
126
  //# sourceMappingURL=PDFContext.d.ts.map
@@ -23,6 +23,11 @@ declare class PDFCrossRefSection {
23
23
  private copySubsectionsIntoBuffer;
24
24
  private copyEntriesIntoBuffer;
25
25
  private append;
26
+ /**
27
+ * Returns all the entries in the XREF section, except the first one (object == 0)
28
+ * @returns {Entry[]} All the entries in the XREF section
29
+ */
30
+ listRefs(): Entry[];
26
31
  }
27
32
  export default PDFCrossRefSection;
28
33
  //# sourceMappingURL=PDFCrossRefSection.d.ts.map