@adnsistemas/pdf-lib 2.6.4 → 2.7.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.
- 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/cjs/utils/png.js +1 -1
- package/cjs/utils/png.js.map +1 -1
- package/dist/pdf-lib.esm.js +224 -45
- package/dist/pdf-lib.esm.js.map +1 -1
- package/dist/pdf-lib.esm.min.js +3 -3
- package/dist/pdf-lib.esm.min.js.map +1 -1
- package/dist/pdf-lib.js +224 -45
- 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/es/utils/png.js +1 -1
- package/es/utils/png.js.map +1 -1
- package/package.json +4 -3
- 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/src/utils/png.ts +1 -1
- 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)
|
|
@@ -13331,7 +13380,7 @@ end\
|
|
|
13331
13380
|
else if(depth== 2) for(var x=0; x<w; x++) { var gr= 85*((data[off+(x>>>2)]>>>(6 -((x&3)<<1)))& 3), al=(gr==tr* 85)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
|
|
13332
13381
|
else if(depth== 4) for(var x=0; x<w; x++) { var gr= 17*((data[off+(x>>>1)]>>>(4 -((x&1)<<2)))&15), al=(gr==tr* 17)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
|
|
13333
13382
|
else if(depth== 8) for(var x=0; x<w; x++) { var gr=data[off+ x], al=(gr ==tr)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
|
|
13334
|
-
else if(depth==16) for(var x=0; x<w; x++) { var gr=data[off+(x<<1)], al=(rs(data,off+(x<<
|
|
13383
|
+
else if(depth==16) for(var x=0; x<w; x++) { var gr=data[off+(x<<1)], al=(rs(data,off+(x<<1))==tr)?0:255; bf32[to+x]=(al<<24)|(gr<<16)|(gr<<8)|gr; }
|
|
13335
13384
|
}
|
|
13336
13385
|
}
|
|
13337
13386
|
//console.log(Date.now()-time);
|
|
@@ -13357,6 +13406,7 @@ end\
|
|
|
13357
13406
|
//console.log(type,len);
|
|
13358
13407
|
|
|
13359
13408
|
if (type=="IHDR") { UPNG.decode._IHDR(data, offset, out); }
|
|
13409
|
+
else if(type=="CgBI") { out.tabs[type] = data.slice(offset,offset+4); }
|
|
13360
13410
|
else if(type=="IDAT") {
|
|
13361
13411
|
for(var i=0; i<len; i++) dd[doff+i] = data[offset+i];
|
|
13362
13412
|
doff += len;
|
|
@@ -13386,11 +13436,16 @@ end\
|
|
|
13386
13436
|
out.tabs[type] = [];
|
|
13387
13437
|
for(var i=0; i<8; i++) out.tabs[type].push(bin.readUint(data, offset+i*4));
|
|
13388
13438
|
}
|
|
13389
|
-
else if(type=="tEXt") {
|
|
13439
|
+
else if(type=="tEXt" || type=="zTXt") {
|
|
13390
13440
|
if(out.tabs[type]==null) out.tabs[type] = {};
|
|
13391
13441
|
var nz = bin.nextZero(data, offset);
|
|
13392
13442
|
var keyw = bin.readASCII(data, offset, nz-offset);
|
|
13393
|
-
var text =
|
|
13443
|
+
var text, tl=offset+len-nz-1;
|
|
13444
|
+
if(type=="tEXt") text = bin.readASCII(data, nz+1, tl);
|
|
13445
|
+
else {
|
|
13446
|
+
var bfr = UPNG.decode._inflate(data.slice(nz+2,nz+2+tl));
|
|
13447
|
+
text = bin.readUTF8(bfr,0,bfr.length);
|
|
13448
|
+
}
|
|
13394
13449
|
out.tabs[type][keyw] = text;
|
|
13395
13450
|
}
|
|
13396
13451
|
else if(type=="iTXt") {
|
|
@@ -13398,12 +13453,17 @@ end\
|
|
|
13398
13453
|
var nz = 0, off = offset;
|
|
13399
13454
|
nz = bin.nextZero(data, off);
|
|
13400
13455
|
var keyw = bin.readASCII(data, off, nz-off); off = nz + 1;
|
|
13401
|
-
data[off]; data[off+1]; off+=2;
|
|
13456
|
+
var cflag = data[off]; data[off+1]; off+=2;
|
|
13402
13457
|
nz = bin.nextZero(data, off);
|
|
13403
13458
|
bin.readASCII(data, off, nz-off); off = nz + 1;
|
|
13404
13459
|
nz = bin.nextZero(data, off);
|
|
13405
13460
|
bin.readUTF8(data, off, nz-off); off = nz + 1;
|
|
13406
|
-
var text
|
|
13461
|
+
var text, tl=len-(off-offset);
|
|
13462
|
+
if(cflag==0) text = bin.readUTF8(data, off, tl);
|
|
13463
|
+
else {
|
|
13464
|
+
var bfr = UPNG.decode._inflate(data.slice(off,off+tl));
|
|
13465
|
+
text = bin.readUTF8(bfr,0,bfr.length);
|
|
13466
|
+
}
|
|
13407
13467
|
out.tabs[type][keyw] = text;
|
|
13408
13468
|
}
|
|
13409
13469
|
else if(type=="PLTE") {
|
|
@@ -13430,12 +13490,12 @@ end\
|
|
|
13430
13490
|
else if(type=="IEND") {
|
|
13431
13491
|
break;
|
|
13432
13492
|
}
|
|
13433
|
-
//else { log("unknown chunk type", type, len); }
|
|
13493
|
+
//else { console.log("unknown chunk type", type, len); out.tabs[type]=data.slice(offset,offset+len); }
|
|
13434
13494
|
offset += len;
|
|
13435
13495
|
bin.readUint(data, offset); offset += 4;
|
|
13436
13496
|
}
|
|
13437
13497
|
if(foff!=0) { var fr = out.frames[out.frames.length-1];
|
|
13438
|
-
fr.data = UPNG.decode._decompress(out, fd.slice(0,foff), fr.rect.width, fr.rect.height);
|
|
13498
|
+
fr.data = UPNG.decode._decompress(out, fd.slice(0,foff), fr.rect.width, fr.rect.height);
|
|
13439
13499
|
}
|
|
13440
13500
|
out.data = UPNG.decode._decompress(out, dd, out.width, out.height);
|
|
13441
13501
|
|
|
@@ -13445,7 +13505,8 @@ end\
|
|
|
13445
13505
|
|
|
13446
13506
|
UPNG.decode._decompress = function(out, dd, w, h) {
|
|
13447
13507
|
var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w*bpp/8), buff = new Uint8Array((bpl+1+out.interlace)*h);
|
|
13448
|
-
dd = UPNG.
|
|
13508
|
+
if(out.tabs["CgBI"]) dd = UPNG.inflateRaw(dd,buff);
|
|
13509
|
+
else dd = UPNG.decode._inflate(dd,buff);
|
|
13449
13510
|
if (out.interlace==0) dd = UPNG.decode._filterZero(dd, out, 0, w, h);
|
|
13450
13511
|
else if(out.interlace==1) dd = UPNG.decode._readInterlace(dd, out);
|
|
13451
13512
|
//console.log(Date.now()-time);
|
|
@@ -13455,7 +13516,7 @@ end\
|
|
|
13455
13516
|
UPNG.decode._inflate = function(data, buff) { var out=UPNG["inflateRaw"](new Uint8Array(data.buffer, 2,data.length-6),buff); return out; };
|
|
13456
13517
|
UPNG.inflateRaw=function(){var H={};H.H={};H.H.N=function(N,W){var R=Uint8Array,i=0,m=0,J=0,h=0,Q=0,X=0,u=0,w=0,d=0,v,C;
|
|
13457
13518
|
if(N[0]==3&&N[1]==0)return W?W:new R(0);var V=H.H,n=V.b,A=V.e,l=V.R,M=V.n,I=V.A,e=V.Z,b=V.m,Z=W==null;
|
|
13458
|
-
if(Z)W=new R(N.length>>>2<<
|
|
13519
|
+
if(Z)W=new R(N.length>>>2<<5);while(i==0){i=n(N,d,1);m=n(N,d+1,2);d+=3;if(m==0){if((d&7)!=0)d+=8-(d&7);
|
|
13459
13520
|
var D=(d>>>3)+4,q=N[D-4]|N[D-3]<<8;if(Z)W=H.H.W(W,w+q);W.set(new R(N.buffer,N.byteOffset+D,q),w);d=D+q<<3;
|
|
13460
13521
|
w+=q;continue}if(Z)W=H.H.W(W,w+(1<<17));if(m==1){v=b.J;C=b.h;X=(1<<9)-1;u=(1<<5)-1;}if(m==2){J=A(N,d,5)+257;
|
|
13461
13522
|
h=A(N,d+5,5)+1;Q=A(N,d+10,4)+4;d+=14;var j=1;for(var c=0;c<38;c+=2){b.Q[c]=0;b.Q[c+1]=0;}for(var c=0;
|
|
@@ -13552,7 +13613,7 @@ end\
|
|
|
13552
13613
|
var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w*bpp/8), paeth = UPNG.decode._paeth;
|
|
13553
13614
|
bpp = Math.ceil(bpp/8);
|
|
13554
13615
|
|
|
13555
|
-
var i
|
|
13616
|
+
var i,di, type=data[off], x=0;
|
|
13556
13617
|
|
|
13557
13618
|
if(type>1) data[off]=[0,0,1][type-2];
|
|
13558
13619
|
if(type==3) for(x=bpp; x<bpl; x++) data[x+1] = (data[x+1] + (data[x+1-bpp]>>>1) )&255;
|
|
@@ -13652,12 +13713,13 @@ end\
|
|
|
13652
13713
|
|
|
13653
13714
|
|
|
13654
13715
|
|
|
13716
|
+
|
|
13655
13717
|
UPNG.encode = function(bufs, w, h, ps, dels, tabs, forbidPlte)
|
|
13656
13718
|
{
|
|
13657
13719
|
if(ps==null) ps=0;
|
|
13658
13720
|
if(forbidPlte==null) forbidPlte = false;
|
|
13659
13721
|
|
|
13660
|
-
var nimg = UPNG.encode.compress(bufs, w, h, ps, [false, false, false, 0, forbidPlte]);
|
|
13722
|
+
var nimg = UPNG.encode.compress(bufs, w, h, ps, [false, false, false, 0, forbidPlte,false]);
|
|
13661
13723
|
UPNG.encode.compressPNG(nimg, -1);
|
|
13662
13724
|
|
|
13663
13725
|
return UPNG.encode._main(nimg, w, h, dels, tabs);
|
|
@@ -13805,7 +13867,7 @@ end\
|
|
|
13805
13867
|
UPNG.encode.compress = function(bufs, w, h, ps, prms) // prms: onlyBlend, minBits, forbidPlte
|
|
13806
13868
|
{
|
|
13807
13869
|
//var time = Date.now();
|
|
13808
|
-
var onlyBlend = prms[0], evenCrd = prms[1], forbidPrev = prms[2], minBits = prms[3], forbidPlte = prms[4];
|
|
13870
|
+
var onlyBlend = prms[0], evenCrd = prms[1], forbidPrev = prms[2], minBits = prms[3], forbidPlte = prms[4], dither=prms[5];
|
|
13809
13871
|
|
|
13810
13872
|
var ctype = 6, depth = 8, alphaAnd=255;
|
|
13811
13873
|
|
|
@@ -13821,17 +13883,27 @@ end\
|
|
|
13821
13883
|
var frms = UPNG.encode.framize(bufs, w, h, onlyBlend, evenCrd, forbidPrev);
|
|
13822
13884
|
//console.log("framize", Date.now()-time); time = Date.now();
|
|
13823
13885
|
|
|
13824
|
-
var cmap={}, plte=[], inds=[];
|
|
13886
|
+
var cmap={}, plte=[], inds=[];
|
|
13825
13887
|
|
|
13826
13888
|
if(ps!=0) {
|
|
13827
13889
|
var nbufs = []; for(var i=0; i<frms.length; i++) nbufs.push(frms[i].img.buffer);
|
|
13828
13890
|
|
|
13829
|
-
var abuf = UPNG.encode.concatRGBA(nbufs), qres = UPNG.quantize(abuf, ps);
|
|
13830
|
-
var cof = 0, bb = new Uint8Array(qres.abuf);
|
|
13831
|
-
for(var i=0; i<frms.length; i++) { var ti=frms[i].img, bln=ti.length; inds.push(new Uint8Array(qres.inds.buffer, cof>>2, bln>>2));
|
|
13832
|
-
for(var j=0; j<bln; j+=4) { ti[j]=bb[cof+j]; ti[j+1]=bb[cof+j+1]; ti[j+2]=bb[cof+j+2]; ti[j+3]=bb[cof+j+3]; } cof+=bln; }
|
|
13891
|
+
var abuf = UPNG.encode.concatRGBA(nbufs), qres = UPNG.quantize(abuf, ps);
|
|
13833
13892
|
|
|
13834
13893
|
for(var i=0; i<qres.plte.length; i++) plte.push(qres.plte[i].est.rgba);
|
|
13894
|
+
|
|
13895
|
+
var cof = 0;
|
|
13896
|
+
for(var i=0; i<frms.length; i++) {
|
|
13897
|
+
var frm=frms[i], bln=frm.img.length, ind = new Uint8Array(qres.inds.buffer, cof>>2, bln>>2); inds.push(ind);
|
|
13898
|
+
var bb = new Uint8Array(qres.abuf,cof,bln);
|
|
13899
|
+
|
|
13900
|
+
//console.log(frm.img, frm.width, frm.height);
|
|
13901
|
+
//var time = Date.now();
|
|
13902
|
+
if(dither) UPNG.encode.dither(frm.img, frm.rect.width, frm.rect.height, plte, bb, ind);
|
|
13903
|
+
//console.log(Date.now()-time);
|
|
13904
|
+
frm.img.set(bb); cof+=bln;
|
|
13905
|
+
}
|
|
13906
|
+
|
|
13835
13907
|
//console.log("quantize", Date.now()-time); time = Date.now();
|
|
13836
13908
|
}
|
|
13837
13909
|
else {
|
|
@@ -14023,8 +14095,8 @@ end\
|
|
|
14023
14095
|
else if(h*bpl>500000 || bpp==1) ftry=[0];
|
|
14024
14096
|
var opts; if(levelZero) opts={level:0};
|
|
14025
14097
|
|
|
14026
|
-
var CMPR = (levelZero && UZIP!=null) ? UZIP : pako$1;
|
|
14027
14098
|
|
|
14099
|
+
var CMPR = (data.length>10e6 && UZIP!=null) ? UZIP : pako$1;
|
|
14028
14100
|
for(var i=0; i<ftry.length; i++) {
|
|
14029
14101
|
for(var y=0; y<h; y++) UPNG.encode._filterLine(data, img, y, bpl, bpp, ftry[i]);
|
|
14030
14102
|
//var nimg = new Uint8Array(data.length);
|
|
@@ -14034,6 +14106,7 @@ end\
|
|
|
14034
14106
|
//console.log(crc, UZIP.adler(data,2,data.length-6));
|
|
14035
14107
|
fls.push(CMPR["deflate"](data,opts));
|
|
14036
14108
|
}
|
|
14109
|
+
|
|
14037
14110
|
var ti, tsize=1e9;
|
|
14038
14111
|
for(var i=0; i<fls.length; i++) if(fls[i].length<tsize) { ti=i; tsize=fls[i].length; }
|
|
14039
14112
|
return fls[ti];
|
|
@@ -14088,27 +14161,30 @@ end\
|
|
|
14088
14161
|
|
|
14089
14162
|
UPNG.quantize = function(abuf, ps)
|
|
14090
14163
|
{
|
|
14091
|
-
var
|
|
14164
|
+
var sb = new Uint8Array(abuf), tb = sb.slice(0), tb32 = new Uint32Array(tb.buffer);
|
|
14092
14165
|
|
|
14093
|
-
var KD = UPNG.quantize.getKDtree(
|
|
14166
|
+
var KD = UPNG.quantize.getKDtree(tb, ps);
|
|
14094
14167
|
var root = KD[0], leafs = KD[1];
|
|
14095
14168
|
|
|
14096
|
-
UPNG.quantize.planeDst;
|
|
14097
|
-
var
|
|
14098
|
-
|
|
14099
|
-
var inds = new Uint8Array(oimg.length>>2);
|
|
14100
|
-
for(var i=0; i<len; i+=4) {
|
|
14101
|
-
var r=sb[i]*(1/255), g=sb[i+1]*(1/255), b=sb[i+2]*(1/255), a=sb[i+3]*(1/255);
|
|
14102
|
-
|
|
14103
|
-
// exact, but too slow :(
|
|
14104
|
-
var nd = UPNG.quantize.getNearest(root, r, g, b, a);
|
|
14105
|
-
//var nd = root;
|
|
14106
|
-
//while(nd.left) nd = (planeDst(nd.est,r,g,b,a)<=0) ? nd.left : nd.right;
|
|
14169
|
+
var planeDst = UPNG.quantize.planeDst;
|
|
14170
|
+
var len=sb.length;
|
|
14107
14171
|
|
|
14108
|
-
|
|
14109
|
-
|
|
14110
|
-
|
|
14111
|
-
|
|
14172
|
+
var inds = new Uint8Array(len>>2), nd;
|
|
14173
|
+
if(sb.length<20e6) // precise, but slow :(
|
|
14174
|
+
for(var i=0; i<len; i+=4) {
|
|
14175
|
+
var r=sb[i]*(1/255), g=sb[i+1]*(1/255), b=sb[i+2]*(1/255), a=sb[i+3]*(1/255);
|
|
14176
|
+
|
|
14177
|
+
nd = UPNG.quantize.getNearest(root, r, g, b, a);
|
|
14178
|
+
inds[i>>2] = nd.ind; tb32[i>>2] = nd.est.rgba;
|
|
14179
|
+
}
|
|
14180
|
+
else
|
|
14181
|
+
for(var i=0; i<len; i+=4) {
|
|
14182
|
+
var r=sb[i]*(1/255), g=sb[i+1]*(1/255), b=sb[i+2]*(1/255), a=sb[i+3]*(1/255);
|
|
14183
|
+
|
|
14184
|
+
nd = root; while(nd.left) nd = (planeDst(nd.est,r,g,b,a)<=0) ? nd.left : nd.right;
|
|
14185
|
+
inds[i>>2] = nd.ind; tb32[i>>2] = nd.est.rgba;
|
|
14186
|
+
}
|
|
14187
|
+
return { abuf:tb.buffer, inds:inds, plte:leafs };
|
|
14112
14188
|
};
|
|
14113
14189
|
|
|
14114
14190
|
UPNG.quantize.getKDtree = function(nimg, ps, err) {
|
|
@@ -14216,12 +14292,12 @@ end\
|
|
|
14216
14292
|
];
|
|
14217
14293
|
|
|
14218
14294
|
var A = Rj, M = UPNG.M4;
|
|
14219
|
-
var b = [
|
|
14295
|
+
var b = [Math.random(),Math.random(),Math.random(),Math.random()], mi = 0, tmi = 0;
|
|
14220
14296
|
|
|
14221
14297
|
if(N!=0)
|
|
14222
|
-
for(var i=0; i<
|
|
14298
|
+
for(var i=0; i<16; i++) {
|
|
14223
14299
|
b = M.multVec(A, b); tmi = Math.sqrt(M.dot(b,b)); b = M.sml(1/tmi, b);
|
|
14224
|
-
if(Math.abs(tmi-mi)<1e-9) break; mi = tmi;
|
|
14300
|
+
if(i!=0 && Math.abs(tmi-mi)<1e-9) break; mi = tmi;
|
|
14225
14301
|
}
|
|
14226
14302
|
//b = [0,0,1,0]; mi=N;
|
|
14227
14303
|
var q = [m0*iN, m1*iN, m2*iN, m3*iN];
|
|
@@ -14258,6 +14334,66 @@ end\
|
|
|
14258
14334
|
return nimg.buffer;
|
|
14259
14335
|
};
|
|
14260
14336
|
|
|
14337
|
+
UPNG.encode.dither = function(sb, w, h, plte, tb, oind) {
|
|
14338
|
+
|
|
14339
|
+
function addErr(er, tg, ti, f) {
|
|
14340
|
+
tg[ti]+=(er[0]*f)>>4; tg[ti+1]+=(er[1]*f)>>4; tg[ti+2]+=(er[2]*f)>>4; tg[ti+3]+=(er[3]*f)>>4;
|
|
14341
|
+
}
|
|
14342
|
+
function N(x) { return Math.max(0, Math.min(255, x)); }
|
|
14343
|
+
function D(a,b) { var dr=a[0]-b[0], dg=a[1]-b[1], db=a[2]-b[2], da=a[3]-b[3]; return (dr*dr + dg*dg + db*db + da*da); }
|
|
14344
|
+
|
|
14345
|
+
|
|
14346
|
+
var pc=plte.length, nplt = [];
|
|
14347
|
+
for(var i=0; i<pc; i++) {
|
|
14348
|
+
var c = plte[i];
|
|
14349
|
+
nplt.push([((c>>>0)&255), ((c>>>8)&255), ((c>>>16)&255), ((c>>>24)&255)]);
|
|
14350
|
+
}
|
|
14351
|
+
for(var i=0; i<pc; i++) {
|
|
14352
|
+
var ne=0xffffffff, ni=0;
|
|
14353
|
+
for(var j=0; j<pc; j++) { var ce=D(nplt[i],nplt[j]); if(j!=i && ce<ne) { ne=ce; ni=j; } }
|
|
14354
|
+
}
|
|
14355
|
+
|
|
14356
|
+
var tb32 = new Uint32Array(tb.buffer);
|
|
14357
|
+
var err = new Int16Array(w*h*4);
|
|
14358
|
+
|
|
14359
|
+
for(var y=0; y<h; y++) {
|
|
14360
|
+
for(var x=0; x<w; x++) {
|
|
14361
|
+
var i = (y*w+x)*4;
|
|
14362
|
+
|
|
14363
|
+
var cc = [N(sb[i]+err[i]), N(sb[i+1]+err[i+1]), N(sb[i+2]+err[i+2]), N(sb[i+3]+err[i+3])];
|
|
14364
|
+
|
|
14365
|
+
var ni=0, nd = 0xffffff;
|
|
14366
|
+
for(var j=0; j<pc; j++) {
|
|
14367
|
+
var cd = D(cc,nplt[j]);
|
|
14368
|
+
if(cd<nd) { nd=cd; ni=j; }
|
|
14369
|
+
}
|
|
14370
|
+
|
|
14371
|
+
//ni = oind[i>>2];
|
|
14372
|
+
var nc = nplt[ni];
|
|
14373
|
+
var er = [cc[0]-nc[0], cc[1]-nc[1], cc[2]-nc[2], cc[3]-nc[3]];
|
|
14374
|
+
|
|
14375
|
+
//addErr(er, err, i+4, 16);
|
|
14376
|
+
|
|
14377
|
+
//*
|
|
14378
|
+
if(x!=w-1) addErr(er, err, i+4 , 7);
|
|
14379
|
+
if(y!=h-1) {
|
|
14380
|
+
if(x!= 0) addErr(er, err, i+4*w-4, 3);
|
|
14381
|
+
addErr(er, err, i+4*w , 5);
|
|
14382
|
+
if(x!=w-1) addErr(er, err, i+4*w+4, 1); //*/
|
|
14383
|
+
}
|
|
14384
|
+
|
|
14385
|
+
oind[i>>2] = ni; tb32[i>>2] = plte[ni];
|
|
14386
|
+
}
|
|
14387
|
+
}
|
|
14388
|
+
};
|
|
14389
|
+
if (typeof module !== 'undefined') {
|
|
14390
|
+
if (exports && exports.default) {
|
|
14391
|
+
module.exports = exports.default;
|
|
14392
|
+
} else if (exports) {
|
|
14393
|
+
module.exports = exports;
|
|
14394
|
+
}
|
|
14395
|
+
}
|
|
14396
|
+
|
|
14261
14397
|
const getImageType = (ctype) => {
|
|
14262
14398
|
if (ctype === 0)
|
|
14263
14399
|
return PngType.Greyscale;
|
|
@@ -30170,7 +30306,7 @@ end\
|
|
|
30170
30306
|
*/
|
|
30171
30307
|
class PDFFont {
|
|
30172
30308
|
constructor(ref, doc, embedder) {
|
|
30173
|
-
this.
|
|
30309
|
+
this.alreadyEmbedded = false;
|
|
30174
30310
|
assertIs(ref, 'ref', [[PDFRef, 'PDFRef']]);
|
|
30175
30311
|
assertIs(doc, 'doc', [[PDFDocument, 'PDFDocument']]);
|
|
30176
30312
|
assertIs(embedder, 'embedder', [
|
|
@@ -30194,7 +30330,6 @@ end\
|
|
|
30194
30330
|
*/
|
|
30195
30331
|
encodeText(text) {
|
|
30196
30332
|
assertIs(text, 'text', ['string']);
|
|
30197
|
-
this.modified = true;
|
|
30198
30333
|
return this.embedder.encodeText(text);
|
|
30199
30334
|
}
|
|
30200
30335
|
/**
|
|
@@ -30269,10 +30404,9 @@ end\
|
|
|
30269
30404
|
*/
|
|
30270
30405
|
embed() {
|
|
30271
30406
|
return __awaiter(this, void 0, void 0, function* () {
|
|
30272
|
-
|
|
30273
|
-
if (this.modified) {
|
|
30407
|
+
if (!this.alreadyEmbedded) {
|
|
30274
30408
|
yield this.embedder.embedIntoContext(this.doc.context, this.ref);
|
|
30275
|
-
this.
|
|
30409
|
+
this.alreadyEmbedded = true;
|
|
30276
30410
|
}
|
|
30277
30411
|
});
|
|
30278
30412
|
}
|
|
@@ -37194,6 +37328,51 @@ end\
|
|
|
37194
37328
|
.map((value) => value[1])
|
|
37195
37329
|
.filter((ov) => ov.actual || ov.previous.length);
|
|
37196
37330
|
}
|
|
37331
|
+
/**
|
|
37332
|
+
* Saves the current changes to the document as an incremental update, returns the full document,
|
|
37333
|
+
* like save method, and modifies the internal state to be able to continue editing the document
|
|
37334
|
+
* for another incremental update.
|
|
37335
|
+
* This allows you to save multiple incremental updates without reloading the PDF.
|
|
37336
|
+
*
|
|
37337
|
+
* For example:
|
|
37338
|
+
* ```js
|
|
37339
|
+
* const pdfDoc = await PDFDocument.load(pdfBytes, { forIncrementalUpdate: true })
|
|
37340
|
+
*
|
|
37341
|
+
* const page = pdfDoc.getPage(0)
|
|
37342
|
+
* page.drawText('First update')
|
|
37343
|
+
* const firstsave = await pdfDoc.saveAndContinue()
|
|
37344
|
+
*
|
|
37345
|
+
* page.drawText('Second update', { y: 100 })
|
|
37346
|
+
* const secondsave = await pdfDoc.saveAndContinue()
|
|
37347
|
+
* ```
|
|
37348
|
+
*
|
|
37349
|
+
* @param options The options to be used when saving changes.
|
|
37350
|
+
* @returns Resolves with the complete PDF bytes including all updates.
|
|
37351
|
+
*/
|
|
37352
|
+
saveAndContinue(options = {}) {
|
|
37353
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
37354
|
+
if (!this.context.pdfFileDetails.originalBytes || !this.context.snapshot) {
|
|
37355
|
+
throw new Error('saveAndContinue() requires the document to be loaded with forIncrementalUpdate: true');
|
|
37356
|
+
}
|
|
37357
|
+
const originalBytes = this.context.pdfFileDetails.originalBytes;
|
|
37358
|
+
const incrementalBytes = yield this.saveIncremental(this.context.snapshot, options);
|
|
37359
|
+
const newPdfBytes = new Uint8Array(originalBytes.byteLength + incrementalBytes.byteLength);
|
|
37360
|
+
newPdfBytes.set(originalBytes);
|
|
37361
|
+
newPdfBytes.set(incrementalBytes, originalBytes.byteLength);
|
|
37362
|
+
this.context.pdfFileDetails.originalBytes = newPdfBytes;
|
|
37363
|
+
this.context.pdfFileDetails.pdfSize = newPdfBytes.byteLength;
|
|
37364
|
+
const incrementalStr = new TextDecoder('latin1').decode(incrementalBytes);
|
|
37365
|
+
const startxrefMatch = incrementalStr.match(/startxref\s+(\d+)/);
|
|
37366
|
+
if (startxrefMatch) {
|
|
37367
|
+
this.context.pdfFileDetails.prevStartXRef = parseInt(startxrefMatch[1], 10);
|
|
37368
|
+
}
|
|
37369
|
+
else {
|
|
37370
|
+
this.context.pdfFileDetails.prevStartXRef = originalBytes.byteLength;
|
|
37371
|
+
}
|
|
37372
|
+
this.context.snapshot = this.takeSnapshot();
|
|
37373
|
+
return newPdfBytes;
|
|
37374
|
+
});
|
|
37375
|
+
}
|
|
37197
37376
|
prepareForSave(options) {
|
|
37198
37377
|
return __awaiter(this, void 0, void 0, function* () {
|
|
37199
37378
|
const { addDefaultPage = true, updateFieldAppearances = true } = options;
|