@adnsistemas/pdf-lib 2.6.4 → 2.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/README.md +44 -0
- package/cjs/api/PDFDocument.d.ts +22 -0
- package/cjs/api/PDFDocument.d.ts.map +1 -1
- package/cjs/api/PDFDocument.js +45 -0
- package/cjs/api/PDFDocument.js.map +1 -1
- package/cjs/api/PDFFont.d.ts +1 -1
- package/cjs/api/PDFFont.d.ts.map +1 -1
- package/cjs/api/PDFFont.js +3 -5
- package/cjs/api/PDFFont.js.map +1 -1
- package/cjs/core/PDFContext.d.ts +2 -0
- package/cjs/core/PDFContext.d.ts.map +1 -1
- package/cjs/core/PDFContext.js +43 -2
- package/cjs/core/PDFContext.js.map +1 -1
- package/cjs/core/objects/PDFArray.d.ts +1 -0
- package/cjs/core/objects/PDFArray.d.ts.map +1 -1
- package/cjs/core/objects/PDFArray.js +7 -0
- package/cjs/core/objects/PDFArray.js.map +1 -1
- package/cjs/core/objects/PDFRawStream.d.ts.map +1 -1
- package/cjs/core/objects/PDFRawStream.js +1 -0
- package/cjs/core/objects/PDFRawStream.js.map +1 -1
- package/dist/pdf-lib.esm.js +99 -7
- package/dist/pdf-lib.esm.js.map +1 -1
- package/dist/pdf-lib.esm.min.js +2 -2
- package/dist/pdf-lib.esm.min.js.map +1 -1
- package/dist/pdf-lib.js +99 -7
- package/dist/pdf-lib.js.map +1 -1
- package/dist/pdf-lib.min.js +2 -2
- package/dist/pdf-lib.min.js.map +1 -1
- package/es/api/PDFDocument.d.ts +22 -0
- package/es/api/PDFDocument.d.ts.map +1 -1
- package/es/api/PDFDocument.js +45 -0
- package/es/api/PDFDocument.js.map +1 -1
- package/es/api/PDFFont.d.ts +1 -1
- package/es/api/PDFFont.d.ts.map +1 -1
- package/es/api/PDFFont.js +3 -5
- package/es/api/PDFFont.js.map +1 -1
- package/es/core/PDFContext.d.ts +2 -0
- package/es/core/PDFContext.d.ts.map +1 -1
- package/es/core/PDFContext.js +43 -2
- package/es/core/PDFContext.js.map +1 -1
- package/es/core/objects/PDFArray.d.ts +1 -0
- package/es/core/objects/PDFArray.d.ts.map +1 -1
- package/es/core/objects/PDFArray.js +7 -0
- package/es/core/objects/PDFArray.js.map +1 -1
- package/es/core/objects/PDFRawStream.d.ts.map +1 -1
- package/es/core/objects/PDFRawStream.js +1 -0
- package/es/core/objects/PDFRawStream.js.map +1 -1
- package/package.json +3 -2
- package/src/api/PDFDocument.ts +60 -0
- package/src/api/PDFFont.ts +3 -5
- package/src/core/PDFContext.ts +42 -1
- package/src/core/objects/PDFArray.ts +8 -0
- package/src/core/objects/PDFRawStream.ts +1 -0
- package/ts3.4/cjs/api/PDFDocument.d.ts +22 -0
- package/ts3.4/cjs/api/PDFFont.d.ts +1 -1
- package/ts3.4/cjs/core/PDFContext.d.ts +2 -0
- package/ts3.4/cjs/core/objects/PDFArray.d.ts +1 -0
- package/ts3.4/es/api/PDFDocument.d.ts +22 -0
- package/ts3.4/es/api/PDFFont.d.ts +1 -1
- package/ts3.4/es/core/PDFContext.d.ts +2 -0
- package/ts3.4/es/core/objects/PDFArray.d.ts +1 -0
package/dist/pdf-lib.js
CHANGED
|
@@ -8341,9 +8341,11 @@
|
|
|
8341
8341
|
return this.array.length;
|
|
8342
8342
|
}
|
|
8343
8343
|
push(object) {
|
|
8344
|
+
this.registerChange();
|
|
8344
8345
|
this.array.push(object);
|
|
8345
8346
|
}
|
|
8346
8347
|
insert(index, object) {
|
|
8348
|
+
this.registerChange();
|
|
8347
8349
|
this.array.splice(index, 0, object);
|
|
8348
8350
|
}
|
|
8349
8351
|
indexOf(object) {
|
|
@@ -8351,9 +8353,11 @@
|
|
|
8351
8353
|
return index === -1 ? undefined : index;
|
|
8352
8354
|
}
|
|
8353
8355
|
remove(index) {
|
|
8356
|
+
this.registerChange();
|
|
8354
8357
|
this.array.splice(index, 1);
|
|
8355
8358
|
}
|
|
8356
8359
|
set(idx, object) {
|
|
8360
|
+
this.registerChange();
|
|
8357
8361
|
this.array[idx] = object;
|
|
8358
8362
|
}
|
|
8359
8363
|
get(index) {
|
|
@@ -8428,6 +8432,9 @@
|
|
|
8428
8432
|
}
|
|
8429
8433
|
}
|
|
8430
8434
|
}
|
|
8435
|
+
registerChange() {
|
|
8436
|
+
this.context.registerObjectChange(this);
|
|
8437
|
+
}
|
|
8431
8438
|
}
|
|
8432
8439
|
PDFArray.withContext = (context) => new PDFArray(context);
|
|
8433
8440
|
|
|
@@ -8917,6 +8924,7 @@
|
|
|
8917
8924
|
return this.contents.length;
|
|
8918
8925
|
}
|
|
8919
8926
|
updateContents(contents) {
|
|
8927
|
+
this.dict.registerChange();
|
|
8920
8928
|
this.contents = contents;
|
|
8921
8929
|
}
|
|
8922
8930
|
}
|
|
@@ -9533,8 +9541,49 @@
|
|
|
9533
9541
|
return `${prefix}-${Math.floor(this.rng.nextInt() * Math.pow(10, suffixLength))}`;
|
|
9534
9542
|
}
|
|
9535
9543
|
registerObjectChange(obj) {
|
|
9536
|
-
if (this.snapshot)
|
|
9537
|
-
|
|
9544
|
+
if (!this.snapshot)
|
|
9545
|
+
return;
|
|
9546
|
+
const ref = this.getObjectRef(obj);
|
|
9547
|
+
if (ref) {
|
|
9548
|
+
this.snapshot.markRefForSave(ref);
|
|
9549
|
+
return;
|
|
9550
|
+
}
|
|
9551
|
+
const containingRef = this.findContainingIndirectObject(obj);
|
|
9552
|
+
if (containingRef) {
|
|
9553
|
+
this.snapshot.markRefForSave(containingRef);
|
|
9554
|
+
}
|
|
9555
|
+
}
|
|
9556
|
+
findContainingIndirectObject(target) {
|
|
9557
|
+
const entries = Array.from(this.indirectObjects.entries());
|
|
9558
|
+
for (let idx = 0, len = entries.length; idx < len; idx++) {
|
|
9559
|
+
const [ref, object] = entries[idx];
|
|
9560
|
+
if (this.objectContains(object, target)) {
|
|
9561
|
+
return ref;
|
|
9562
|
+
}
|
|
9563
|
+
}
|
|
9564
|
+
return undefined;
|
|
9565
|
+
}
|
|
9566
|
+
objectContains(container, target) {
|
|
9567
|
+
if (container === target)
|
|
9568
|
+
return true;
|
|
9569
|
+
if (container instanceof PDFDict) {
|
|
9570
|
+
const values = container.values();
|
|
9571
|
+
for (let i = 0, len = values.length; i < len; i++) {
|
|
9572
|
+
if (this.objectContains(values[i], target))
|
|
9573
|
+
return true;
|
|
9574
|
+
}
|
|
9575
|
+
}
|
|
9576
|
+
else if (container instanceof PDFArray) {
|
|
9577
|
+
for (let i = 0, len = container.size(); i < len; i++) {
|
|
9578
|
+
if (this.objectContains(container.get(i), target))
|
|
9579
|
+
return true;
|
|
9580
|
+
}
|
|
9581
|
+
}
|
|
9582
|
+
else if (container instanceof PDFStream) {
|
|
9583
|
+
if (this.objectContains(container.dict, target))
|
|
9584
|
+
return true;
|
|
9585
|
+
}
|
|
9586
|
+
return false;
|
|
9538
9587
|
}
|
|
9539
9588
|
getObjectVersions(ref) {
|
|
9540
9589
|
if (!this.preserveObjectsVersions)
|
|
@@ -30170,7 +30219,7 @@ end\
|
|
|
30170
30219
|
*/
|
|
30171
30220
|
class PDFFont {
|
|
30172
30221
|
constructor(ref, doc, embedder) {
|
|
30173
|
-
this.
|
|
30222
|
+
this.alreadyEmbedded = false;
|
|
30174
30223
|
assertIs(ref, 'ref', [[PDFRef, 'PDFRef']]);
|
|
30175
30224
|
assertIs(doc, 'doc', [[PDFDocument, 'PDFDocument']]);
|
|
30176
30225
|
assertIs(embedder, 'embedder', [
|
|
@@ -30194,7 +30243,6 @@ end\
|
|
|
30194
30243
|
*/
|
|
30195
30244
|
encodeText(text) {
|
|
30196
30245
|
assertIs(text, 'text', ['string']);
|
|
30197
|
-
this.modified = true;
|
|
30198
30246
|
return this.embedder.encodeText(text);
|
|
30199
30247
|
}
|
|
30200
30248
|
/**
|
|
@@ -30269,10 +30317,9 @@ end\
|
|
|
30269
30317
|
*/
|
|
30270
30318
|
embed() {
|
|
30271
30319
|
return __awaiter(this, void 0, void 0, function* () {
|
|
30272
|
-
|
|
30273
|
-
if (this.modified) {
|
|
30320
|
+
if (!this.alreadyEmbedded) {
|
|
30274
30321
|
yield this.embedder.embedIntoContext(this.doc.context, this.ref);
|
|
30275
|
-
this.
|
|
30322
|
+
this.alreadyEmbedded = true;
|
|
30276
30323
|
}
|
|
30277
30324
|
});
|
|
30278
30325
|
}
|
|
@@ -37194,6 +37241,51 @@ end\
|
|
|
37194
37241
|
.map((value) => value[1])
|
|
37195
37242
|
.filter((ov) => ov.actual || ov.previous.length);
|
|
37196
37243
|
}
|
|
37244
|
+
/**
|
|
37245
|
+
* Saves the current changes to the document as an incremental update, returns the full document,
|
|
37246
|
+
* like save method, and modifies the internal state to be able to continue editing the document
|
|
37247
|
+
* for another incremental update.
|
|
37248
|
+
* This allows you to save multiple incremental updates without reloading the PDF.
|
|
37249
|
+
*
|
|
37250
|
+
* For example:
|
|
37251
|
+
* ```js
|
|
37252
|
+
* const pdfDoc = await PDFDocument.load(pdfBytes, { forIncrementalUpdate: true })
|
|
37253
|
+
*
|
|
37254
|
+
* const page = pdfDoc.getPage(0)
|
|
37255
|
+
* page.drawText('First update')
|
|
37256
|
+
* const firstsave = await pdfDoc.saveAndContinue()
|
|
37257
|
+
*
|
|
37258
|
+
* page.drawText('Second update', { y: 100 })
|
|
37259
|
+
* const secondsave = await pdfDoc.saveAndContinue()
|
|
37260
|
+
* ```
|
|
37261
|
+
*
|
|
37262
|
+
* @param options The options to be used when saving changes.
|
|
37263
|
+
* @returns Resolves with the complete PDF bytes including all updates.
|
|
37264
|
+
*/
|
|
37265
|
+
saveAndContinue(options = {}) {
|
|
37266
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37267
|
+
if (!this.context.pdfFileDetails.originalBytes || !this.context.snapshot) {
|
|
37268
|
+
throw new Error('saveAndContinue() requires the document to be loaded with forIncrementalUpdate: true');
|
|
37269
|
+
}
|
|
37270
|
+
const originalBytes = this.context.pdfFileDetails.originalBytes;
|
|
37271
|
+
const incrementalBytes = yield this.saveIncremental(this.context.snapshot, options);
|
|
37272
|
+
const newPdfBytes = new Uint8Array(originalBytes.byteLength + incrementalBytes.byteLength);
|
|
37273
|
+
newPdfBytes.set(originalBytes);
|
|
37274
|
+
newPdfBytes.set(incrementalBytes, originalBytes.byteLength);
|
|
37275
|
+
this.context.pdfFileDetails.originalBytes = newPdfBytes;
|
|
37276
|
+
this.context.pdfFileDetails.pdfSize = newPdfBytes.byteLength;
|
|
37277
|
+
const incrementalStr = new TextDecoder('latin1').decode(incrementalBytes);
|
|
37278
|
+
const startxrefMatch = incrementalStr.match(/startxref\s+(\d+)/);
|
|
37279
|
+
if (startxrefMatch) {
|
|
37280
|
+
this.context.pdfFileDetails.prevStartXRef = parseInt(startxrefMatch[1], 10);
|
|
37281
|
+
}
|
|
37282
|
+
else {
|
|
37283
|
+
this.context.pdfFileDetails.prevStartXRef = originalBytes.byteLength;
|
|
37284
|
+
}
|
|
37285
|
+
this.context.snapshot = this.takeSnapshot();
|
|
37286
|
+
return newPdfBytes;
|
|
37287
|
+
});
|
|
37288
|
+
}
|
|
37197
37289
|
prepareForSave(options) {
|
|
37198
37290
|
return __awaiter(this, void 0, void 0, function* () {
|
|
37199
37291
|
const { addDefaultPage = true, updateFieldAppearances = true } = options;
|