@pdfluent/sdk-wasm 1.0.0 → 1.2.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/LICENSE-COMMERCIAL +8 -0
- package/NOTICE +7 -0
- package/README.md +1 -1
- package/THIRD_PARTY_LICENSES.txt +149 -3
- package/package.json +16 -5
- package/xfa_wasm.augment.d.ts +188 -0
- package/xfa_wasm.d.ts +242 -0
- package/xfa_wasm.js +498 -2
- package/xfa_wasm_bg.wasm +0 -0
- package/xfa_wasm_bg.wasm.d.ts +13 -0
- /package/snippets/{xfa-wasm-df2db187f9a0e994 → xfa-wasm-0357326a9eb2f21e}/inline0.js +0 -0
package/xfa_wasm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* @ts-self-types="./xfa_wasm.d.ts" */
|
|
2
|
-
import { __pdfluent_error_ctor } from './snippets/xfa-wasm-
|
|
2
|
+
import { __pdfluent_error_ctor } from './snippets/xfa-wasm-0357326a9eb2f21e/inline0.js';
|
|
3
3
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
@@ -168,6 +168,8 @@ export class PdfDoc {
|
|
|
168
168
|
/**
|
|
169
169
|
* Apply a diagonal text watermark to every page.
|
|
170
170
|
* `opacity` in 0.0..=1.0. Default rotation 45 deg, default colour gray.
|
|
171
|
+
*
|
|
172
|
+
* Kept for compatibility; `addWatermark` takes the full set of options.
|
|
171
173
|
* @param {string} text
|
|
172
174
|
* @param {number} opacity
|
|
173
175
|
* @returns {Uint8Array}
|
|
@@ -192,6 +194,31 @@ export class PdfDoc {
|
|
|
192
194
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
193
195
|
}
|
|
194
196
|
}
|
|
197
|
+
/**
|
|
198
|
+
* Apply a text watermark with full control over text or preset, size,
|
|
199
|
+
* rotation, opacity, colour, position, layer, tiling and pages. Returns
|
|
200
|
+
* the new PDF bytes. Text only: there is no image watermark.
|
|
201
|
+
* @param {WatermarkOptions} options
|
|
202
|
+
* @returns {Uint8Array}
|
|
203
|
+
*/
|
|
204
|
+
addWatermark(options) {
|
|
205
|
+
try {
|
|
206
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
207
|
+
wasm.pdfdoc_addWatermark(retptr, this.__wbg_ptr, addHeapObject(options));
|
|
208
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
209
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
210
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
211
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
212
|
+
if (r3) {
|
|
213
|
+
throw takeObject(r2);
|
|
214
|
+
}
|
|
215
|
+
var v1 = getArrayU8FromWasm0(r0, r1).slice();
|
|
216
|
+
wasm.__wbindgen_export4(r0, r1 * 1, 1);
|
|
217
|
+
return v1;
|
|
218
|
+
} finally {
|
|
219
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
195
222
|
/**
|
|
196
223
|
* Re-encode all content streams with deflate compression. Removes
|
|
197
224
|
* no-op overhead. Returns the optimised PDF as a `Uint8Array`.
|
|
@@ -288,6 +315,139 @@ export class PdfDoc {
|
|
|
288
315
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
289
316
|
}
|
|
290
317
|
}
|
|
318
|
+
/**
|
|
319
|
+
* The document's blocks as JSON, in reading order (#573).
|
|
320
|
+
*
|
|
321
|
+
* Preview: output quality is still improving and the API may change in a minor release.
|
|
322
|
+
*
|
|
323
|
+
* `{"blocks": [...]}`, one entry per paragraph, heading, list item, table
|
|
324
|
+
* cell and running head, each with its kind, page, box, text, spans and
|
|
325
|
+
* place in the reading order. `docs/STRUCTURED_EXTRACTION.md` is the key
|
|
326
|
+
* to every field.
|
|
327
|
+
*
|
|
328
|
+
* A JSON string and not a structured value, which is what every other
|
|
329
|
+
* structured reader in this binding hands back: one shape crosses the
|
|
330
|
+
* boundary, `JSON.parse` is what the caller already does for
|
|
331
|
+
* `getTextPositions` and the annotations, and a `serde` mirror of the
|
|
332
|
+
* block model would be a second definition of it to keep in step.
|
|
333
|
+
*
|
|
334
|
+
* An XFA form is read from its flattened form, for the reason
|
|
335
|
+
* `extractMarkdown` above gives.
|
|
336
|
+
* @param {number | null} [first_page]
|
|
337
|
+
* @param {number | null} [page_count]
|
|
338
|
+
* @returns {string}
|
|
339
|
+
*/
|
|
340
|
+
extractBlocks(first_page, page_count) {
|
|
341
|
+
let deferred2_0;
|
|
342
|
+
let deferred2_1;
|
|
343
|
+
try {
|
|
344
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
345
|
+
wasm.pdfdoc_extractBlocks(retptr, this.__wbg_ptr, isLikeNone(first_page) ? Number.MAX_SAFE_INTEGER : (first_page) >>> 0, isLikeNone(page_count) ? Number.MAX_SAFE_INTEGER : (page_count) >>> 0);
|
|
346
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
347
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
348
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
349
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
350
|
+
var ptr1 = r0;
|
|
351
|
+
var len1 = r1;
|
|
352
|
+
if (r3) {
|
|
353
|
+
ptr1 = 0; len1 = 0;
|
|
354
|
+
throw takeObject(r2);
|
|
355
|
+
}
|
|
356
|
+
deferred2_0 = ptr1;
|
|
357
|
+
deferred2_1 = len1;
|
|
358
|
+
return getStringFromWasm0(ptr1, len1);
|
|
359
|
+
} finally {
|
|
360
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
361
|
+
wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* The document as a Docling `DoclingDocument`, as JSON (#629).
|
|
366
|
+
*
|
|
367
|
+
* Preview: output quality is still improving and the API may change in a minor release.
|
|
368
|
+
*
|
|
369
|
+
* The schema version the engine pins, which docling-core's
|
|
370
|
+
* `DoclingDocument.model_validate_json` loads as it is. `name` is
|
|
371
|
+
* `DoclingDocument.name`, which Docling fills with the file's stem;
|
|
372
|
+
* absent means `"document"`. An XFA form is read from its flattened form,
|
|
373
|
+
* for the reason `extractMarkdown` above gives.
|
|
374
|
+
* @param {number | null} [first_page]
|
|
375
|
+
* @param {number | null} [page_count]
|
|
376
|
+
* @param {string | null} [name]
|
|
377
|
+
* @returns {string}
|
|
378
|
+
*/
|
|
379
|
+
extractDocling(first_page, page_count, name) {
|
|
380
|
+
let deferred3_0;
|
|
381
|
+
let deferred3_1;
|
|
382
|
+
try {
|
|
383
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
384
|
+
var ptr0 = isLikeNone(name) ? 0 : passStringToWasm0(name, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
385
|
+
var len0 = WASM_VECTOR_LEN;
|
|
386
|
+
wasm.pdfdoc_extractDocling(retptr, this.__wbg_ptr, isLikeNone(first_page) ? Number.MAX_SAFE_INTEGER : (first_page) >>> 0, isLikeNone(page_count) ? Number.MAX_SAFE_INTEGER : (page_count) >>> 0, ptr0, len0);
|
|
387
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
388
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
389
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
390
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
391
|
+
var ptr2 = r0;
|
|
392
|
+
var len2 = r1;
|
|
393
|
+
if (r3) {
|
|
394
|
+
ptr2 = 0; len2 = 0;
|
|
395
|
+
throw takeObject(r2);
|
|
396
|
+
}
|
|
397
|
+
deferred3_0 = ptr2;
|
|
398
|
+
deferred3_1 = len2;
|
|
399
|
+
return getStringFromWasm0(ptr2, len2);
|
|
400
|
+
} finally {
|
|
401
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
402
|
+
wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* The document as markdown, in reading order (#573).
|
|
407
|
+
*
|
|
408
|
+
* Preview: output quality is still improving and the API may change in a minor release.
|
|
409
|
+
*
|
|
410
|
+
* Headings become `#` to `###`, list items `-` and `1.`, a table a pipe
|
|
411
|
+
* table or an HTML one where markdown cannot hold its shape, and a change
|
|
412
|
+
* of page an HTML comment. The running heads a document repeats are not in
|
|
413
|
+
* it; they are in `extractBlocks`.
|
|
414
|
+
*
|
|
415
|
+
* `firstPage` and `pageCount` choose a window of pages; leave both out for
|
|
416
|
+
* the whole document. The document is read whole whatever the window is,
|
|
417
|
+
* because what a block IS is decided against the rest of the document.
|
|
418
|
+
*
|
|
419
|
+
* AN XFA FORM IS READ FROM ITS FLATTENED FORM, the way `text` and
|
|
420
|
+
* `getTextPositions` read one: a dynamic XFA document draws its fields
|
|
421
|
+
* from a template rather than from page content, so the blocks of the
|
|
422
|
+
* unflattened file are the blocks of an empty page.
|
|
423
|
+
* @param {number | null} [first_page]
|
|
424
|
+
* @param {number | null} [page_count]
|
|
425
|
+
* @returns {string}
|
|
426
|
+
*/
|
|
427
|
+
extractMarkdown(first_page, page_count) {
|
|
428
|
+
let deferred2_0;
|
|
429
|
+
let deferred2_1;
|
|
430
|
+
try {
|
|
431
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
432
|
+
wasm.pdfdoc_extractMarkdown(retptr, this.__wbg_ptr, isLikeNone(first_page) ? Number.MAX_SAFE_INTEGER : (first_page) >>> 0, isLikeNone(page_count) ? Number.MAX_SAFE_INTEGER : (page_count) >>> 0);
|
|
433
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
434
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
435
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
436
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
437
|
+
var ptr1 = r0;
|
|
438
|
+
var len1 = r1;
|
|
439
|
+
if (r3) {
|
|
440
|
+
ptr1 = 0; len1 = 0;
|
|
441
|
+
throw takeObject(r2);
|
|
442
|
+
}
|
|
443
|
+
deferred2_0 = ptr1;
|
|
444
|
+
deferred2_1 = len1;
|
|
445
|
+
return getStringFromWasm0(ptr1, len1);
|
|
446
|
+
} finally {
|
|
447
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
448
|
+
wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);
|
|
449
|
+
}
|
|
450
|
+
}
|
|
291
451
|
/**
|
|
292
452
|
* Extract the listed pages (0-based) into a new document.
|
|
293
453
|
* Used to implement "split" workflows in the browser.
|
|
@@ -565,6 +725,10 @@ export class PdfDoc {
|
|
|
565
725
|
/**
|
|
566
726
|
* Search-and-redact: every match of `query` (literal text, case-sensitive)
|
|
567
727
|
* is permanently removed from every page.
|
|
728
|
+
*
|
|
729
|
+
* Throws `E-PARSE-INVALID-PDF` when a page's text could not be read:
|
|
730
|
+
* that page was not searched, so returning bytes would read as "no
|
|
731
|
+
* matches there" (#698).
|
|
568
732
|
* @param {string} query
|
|
569
733
|
* @returns {Uint8Array}
|
|
570
734
|
*/
|
|
@@ -888,6 +1052,40 @@ export class PdfDoc {
|
|
|
888
1052
|
wasm.__wbindgen_export4(deferred1_0, deferred1_1, 1);
|
|
889
1053
|
}
|
|
890
1054
|
}
|
|
1055
|
+
/**
|
|
1056
|
+
* Every text block of the document with its page and enclosing box, as
|
|
1057
|
+
* JSON (#416): `[{"text": "...", "bbox": [xMin, yMin, xMax, yMax], "page": 0}]`.
|
|
1058
|
+
*
|
|
1059
|
+
* `page` is 0-based like every page index in this binding; `bbox` is in PDF
|
|
1060
|
+
* points with the origin at the bottom left (PDF space, not the y-down CSS
|
|
1061
|
+
* space `getTextPositions` returns). An XFA form is read from its flattened
|
|
1062
|
+
* form, as `text` and `getTextPositions` do.
|
|
1063
|
+
* @returns {string}
|
|
1064
|
+
*/
|
|
1065
|
+
textWithLayout() {
|
|
1066
|
+
let deferred2_0;
|
|
1067
|
+
let deferred2_1;
|
|
1068
|
+
try {
|
|
1069
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1070
|
+
wasm.pdfdoc_textWithLayout(retptr, this.__wbg_ptr);
|
|
1071
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1072
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1073
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
1074
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
1075
|
+
var ptr1 = r0;
|
|
1076
|
+
var len1 = r1;
|
|
1077
|
+
if (r3) {
|
|
1078
|
+
ptr1 = 0; len1 = 0;
|
|
1079
|
+
throw takeObject(r2);
|
|
1080
|
+
}
|
|
1081
|
+
deferred2_0 = ptr1;
|
|
1082
|
+
deferred2_1 = len1;
|
|
1083
|
+
return getStringFromWasm0(ptr1, len1);
|
|
1084
|
+
} finally {
|
|
1085
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1086
|
+
wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);
|
|
1087
|
+
}
|
|
1088
|
+
}
|
|
891
1089
|
/**
|
|
892
1090
|
* Convert this PDF to a Word `.docx` package.
|
|
893
1091
|
*
|
|
@@ -1309,6 +1507,40 @@ export class PdfDocMut {
|
|
|
1309
1507
|
wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);
|
|
1310
1508
|
}
|
|
1311
1509
|
}
|
|
1510
|
+
/**
|
|
1511
|
+
* The images drawn on a page (0-based `pageIndex`) as JSON, in drawing
|
|
1512
|
+
* order, form-nested and inline images included:
|
|
1513
|
+
* `[{"formPath":[…],"opIndex":n,"kind":"xobject"|"inline","resourceName":…,
|
|
1514
|
+
* "formNames":[…],"ctm":[6],"bbox":[x0,y0,x1,y1],"pixelWidth":…,
|
|
1515
|
+
* "pixelHeight":…,"hasSmask":…}]`. `bbox` is in page space, origin at the
|
|
1516
|
+
* bottom left. An entry is the handle the three edit methods take.
|
|
1517
|
+
* @param {number} page_index
|
|
1518
|
+
* @returns {string}
|
|
1519
|
+
*/
|
|
1520
|
+
imagePlacements(page_index) {
|
|
1521
|
+
let deferred2_0;
|
|
1522
|
+
let deferred2_1;
|
|
1523
|
+
try {
|
|
1524
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1525
|
+
wasm.pdfdocmut_imagePlacements(retptr, this.__wbg_ptr, page_index);
|
|
1526
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1527
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1528
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
1529
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
1530
|
+
var ptr1 = r0;
|
|
1531
|
+
var len1 = r1;
|
|
1532
|
+
if (r3) {
|
|
1533
|
+
ptr1 = 0; len1 = 0;
|
|
1534
|
+
throw takeObject(r2);
|
|
1535
|
+
}
|
|
1536
|
+
deferred2_0 = ptr1;
|
|
1537
|
+
deferred2_1 = len1;
|
|
1538
|
+
return getStringFromWasm0(ptr1, len1);
|
|
1539
|
+
} finally {
|
|
1540
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1541
|
+
wasm.__wbindgen_export4(deferred2_0, deferred2_1, 1);
|
|
1542
|
+
}
|
|
1543
|
+
}
|
|
1312
1544
|
/**
|
|
1313
1545
|
* Open a PDF for editing.
|
|
1314
1546
|
* @param {Uint8Array} bytes
|
|
@@ -1363,6 +1595,10 @@ export class PdfDocMut {
|
|
|
1363
1595
|
/**
|
|
1364
1596
|
* Search-and-redact: every literal match of `query` is permanently
|
|
1365
1597
|
* removed from every page.
|
|
1598
|
+
*
|
|
1599
|
+
* Throws `E-PARSE-INVALID-PDF` when a page's text could not be read:
|
|
1600
|
+
* that page was not searched, so success would read as "no matches
|
|
1601
|
+
* there" (#698). The document is then left as it was.
|
|
1366
1602
|
* @param {string} query
|
|
1367
1603
|
*/
|
|
1368
1604
|
redactSearch(query) {
|
|
@@ -1380,6 +1616,27 @@ export class PdfDocMut {
|
|
|
1380
1616
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1381
1617
|
}
|
|
1382
1618
|
}
|
|
1619
|
+
/**
|
|
1620
|
+
* Remove one placed image. The image data leaves the file when nothing
|
|
1621
|
+
* else uses it.
|
|
1622
|
+
* @param {number} page_index
|
|
1623
|
+
* @param {string} handle_json
|
|
1624
|
+
*/
|
|
1625
|
+
removeImage(page_index, handle_json) {
|
|
1626
|
+
try {
|
|
1627
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1628
|
+
const ptr0 = passStringToWasm0(handle_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
1629
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1630
|
+
wasm.pdfdocmut_removeImage(retptr, this.__wbg_ptr, page_index, ptr0, len0);
|
|
1631
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1632
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1633
|
+
if (r1) {
|
|
1634
|
+
throw takeObject(r0);
|
|
1635
|
+
}
|
|
1636
|
+
} finally {
|
|
1637
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1638
|
+
}
|
|
1639
|
+
}
|
|
1383
1640
|
/**
|
|
1384
1641
|
* Re-order pages. `new_order` is a permutation of `0..page_count`.
|
|
1385
1642
|
* @param {Uint32Array} new_order
|
|
@@ -1399,6 +1656,42 @@ export class PdfDocMut {
|
|
|
1399
1656
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1400
1657
|
}
|
|
1401
1658
|
}
|
|
1659
|
+
/**
|
|
1660
|
+
* Swap the picture of one placed image for JPEG or PNG `data`, fitted
|
|
1661
|
+
* inside the old placement and centred. Returns the new handle as JSON.
|
|
1662
|
+
* @param {number} page_index
|
|
1663
|
+
* @param {string} handle_json
|
|
1664
|
+
* @param {Uint8Array} data
|
|
1665
|
+
* @returns {string}
|
|
1666
|
+
*/
|
|
1667
|
+
replaceImage(page_index, handle_json, data) {
|
|
1668
|
+
let deferred4_0;
|
|
1669
|
+
let deferred4_1;
|
|
1670
|
+
try {
|
|
1671
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1672
|
+
const ptr0 = passStringToWasm0(handle_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
1673
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1674
|
+
const ptr1 = passArray8ToWasm0(data, wasm.__wbindgen_export);
|
|
1675
|
+
const len1 = WASM_VECTOR_LEN;
|
|
1676
|
+
wasm.pdfdocmut_replaceImage(retptr, this.__wbg_ptr, page_index, ptr0, len0, ptr1, len1);
|
|
1677
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1678
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1679
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
1680
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
1681
|
+
var ptr3 = r0;
|
|
1682
|
+
var len3 = r1;
|
|
1683
|
+
if (r3) {
|
|
1684
|
+
ptr3 = 0; len3 = 0;
|
|
1685
|
+
throw takeObject(r2);
|
|
1686
|
+
}
|
|
1687
|
+
deferred4_0 = ptr3;
|
|
1688
|
+
deferred4_1 = len3;
|
|
1689
|
+
return getStringFromWasm0(ptr3, len3);
|
|
1690
|
+
} finally {
|
|
1691
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1692
|
+
wasm.__wbindgen_export4(deferred4_0, deferred4_1, 1);
|
|
1693
|
+
}
|
|
1694
|
+
}
|
|
1402
1695
|
/**
|
|
1403
1696
|
* G3 — Replace a text span on a page.
|
|
1404
1697
|
*
|
|
@@ -1564,6 +1857,45 @@ export class PdfDocMut {
|
|
|
1564
1857
|
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1565
1858
|
}
|
|
1566
1859
|
}
|
|
1860
|
+
/**
|
|
1861
|
+
* Move or resize one placed image so its bounding box becomes
|
|
1862
|
+
* `[x0, y0, x1, y1]` in page space. `handleJson` is an entry of
|
|
1863
|
+
* `imagePlacements`. Returns the new handle as JSON. An edit inside a Form
|
|
1864
|
+
* XObject copies the form for this page, so other pages keep the original.
|
|
1865
|
+
* @param {number} page_index
|
|
1866
|
+
* @param {string} handle_json
|
|
1867
|
+
* @param {number} x0
|
|
1868
|
+
* @param {number} y0
|
|
1869
|
+
* @param {number} x1
|
|
1870
|
+
* @param {number} y1
|
|
1871
|
+
* @returns {string}
|
|
1872
|
+
*/
|
|
1873
|
+
setImageRect(page_index, handle_json, x0, y0, x1, y1) {
|
|
1874
|
+
let deferred3_0;
|
|
1875
|
+
let deferred3_1;
|
|
1876
|
+
try {
|
|
1877
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
1878
|
+
const ptr0 = passStringToWasm0(handle_json, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
1879
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1880
|
+
wasm.pdfdocmut_setImageRect(retptr, this.__wbg_ptr, page_index, ptr0, len0, x0, y0, x1, y1);
|
|
1881
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
1882
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
1883
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
1884
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
1885
|
+
var ptr2 = r0;
|
|
1886
|
+
var len2 = r1;
|
|
1887
|
+
if (r3) {
|
|
1888
|
+
ptr2 = 0; len2 = 0;
|
|
1889
|
+
throw takeObject(r2);
|
|
1890
|
+
}
|
|
1891
|
+
deferred3_0 = ptr2;
|
|
1892
|
+
deferred3_1 = len2;
|
|
1893
|
+
return getStringFromWasm0(ptr2, len2);
|
|
1894
|
+
} finally {
|
|
1895
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
1896
|
+
wasm.__wbindgen_export4(deferred3_0, deferred3_1, 1);
|
|
1897
|
+
}
|
|
1898
|
+
}
|
|
1567
1899
|
/**
|
|
1568
1900
|
* Select multiple options on a multi-select list box.
|
|
1569
1901
|
*
|
|
@@ -2109,10 +2441,154 @@ export class XfaEngine {
|
|
|
2109
2441
|
}
|
|
2110
2442
|
}
|
|
2111
2443
|
if (Symbol.dispose) XfaEngine.prototype[Symbol.dispose] = XfaEngine.prototype.free;
|
|
2444
|
+
|
|
2445
|
+
/**
|
|
2446
|
+
* Remove the password from a PDF whose password you know, and return the
|
|
2447
|
+
* unprotected bytes; open them with `PdfDoc.open`.
|
|
2448
|
+
*
|
|
2449
|
+
* The owner password always works. The user password works only when the
|
|
2450
|
+
* file has no permission restrictions. Throws `PdfluentError` with
|
|
2451
|
+
* `E-SECURITY-DECRYPTION-FAILED` for a password that does not entitle the
|
|
2452
|
+
* caller, and `E-WASM-INVALID-ARGUMENT` for a PDF without a password.
|
|
2453
|
+
* @param {Uint8Array} bytes
|
|
2454
|
+
* @param {string} password
|
|
2455
|
+
* @returns {Uint8Array}
|
|
2456
|
+
*/
|
|
2457
|
+
export function decryptPdf(bytes, password) {
|
|
2458
|
+
try {
|
|
2459
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
2460
|
+
const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_export);
|
|
2461
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2462
|
+
const ptr1 = passStringToWasm0(password, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
2463
|
+
const len1 = WASM_VECTOR_LEN;
|
|
2464
|
+
wasm.decryptPdf(retptr, ptr0, len0, ptr1, len1);
|
|
2465
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
2466
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
2467
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
2468
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
2469
|
+
if (r3) {
|
|
2470
|
+
throw takeObject(r2);
|
|
2471
|
+
}
|
|
2472
|
+
var v3 = getArrayU8FromWasm0(r0, r1).slice();
|
|
2473
|
+
wasm.__wbindgen_export4(r0, r1 * 1, 1);
|
|
2474
|
+
return v3;
|
|
2475
|
+
} finally {
|
|
2476
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
2477
|
+
}
|
|
2478
|
+
}
|
|
2479
|
+
|
|
2480
|
+
/**
|
|
2481
|
+
* Encrypt a PDF with AES-256 and return the encrypted bytes.
|
|
2482
|
+
*
|
|
2483
|
+
* `userPassword` is needed to open the file (may be empty: then anyone can
|
|
2484
|
+
* open it, and the permissions apply); `ownerPassword` lifts the permissions
|
|
2485
|
+
* (empty: the user password serves as both). Refuses a PDF that is already
|
|
2486
|
+
* encrypted. Throws `PdfluentError` with `E-WASM-INVALID-ARGUMENT` or
|
|
2487
|
+
* `E-PARSE-INVALID-PDF`.
|
|
2488
|
+
* @param {Uint8Array} bytes
|
|
2489
|
+
* @param {string} user_password
|
|
2490
|
+
* @param {string} owner_password
|
|
2491
|
+
* @param {EncryptPermissions | null} [permissions]
|
|
2492
|
+
* @returns {Uint8Array}
|
|
2493
|
+
*/
|
|
2494
|
+
export function encryptPdf(bytes, user_password, owner_password, permissions) {
|
|
2495
|
+
try {
|
|
2496
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
2497
|
+
const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_export);
|
|
2498
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2499
|
+
const ptr1 = passStringToWasm0(user_password, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
2500
|
+
const len1 = WASM_VECTOR_LEN;
|
|
2501
|
+
const ptr2 = passStringToWasm0(owner_password, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
2502
|
+
const len2 = WASM_VECTOR_LEN;
|
|
2503
|
+
wasm.encryptPdf(retptr, ptr0, len0, ptr1, len1, ptr2, len2, isLikeNone(permissions) ? 0 : addHeapObject(permissions));
|
|
2504
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
2505
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
2506
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
2507
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
2508
|
+
if (r3) {
|
|
2509
|
+
throw takeObject(r2);
|
|
2510
|
+
}
|
|
2511
|
+
var v4 = getArrayU8FromWasm0(r0, r1).slice();
|
|
2512
|
+
wasm.__wbindgen_export4(r0, r1 * 1, 1);
|
|
2513
|
+
return v4;
|
|
2514
|
+
} finally {
|
|
2515
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
2516
|
+
}
|
|
2517
|
+
}
|
|
2518
|
+
|
|
2519
|
+
/**
|
|
2520
|
+
* Extract the images of a PDF as PNG or JPEG files.
|
|
2521
|
+
*
|
|
2522
|
+
* Returns `{ images, skipped }`. An image that could not be exported exactly
|
|
2523
|
+
* as it looks -- JPEG 2000, JBIG2 or fax compression, a transparency mask, a
|
|
2524
|
+
* Decode array, CMYK, an ICC profile other than sRGB -- is listed in `skipped`
|
|
2525
|
+
* with the reason, never emitted wrong. Each image is listed once, on the
|
|
2526
|
+
* first page (0-based) that uses it.
|
|
2527
|
+
* @param {Uint8Array} bytes
|
|
2528
|
+
* @returns {ImageExtraction}
|
|
2529
|
+
*/
|
|
2530
|
+
export function extractImages(bytes) {
|
|
2531
|
+
try {
|
|
2532
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
2533
|
+
const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_export);
|
|
2534
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2535
|
+
wasm.extractImages(retptr, ptr0, len0);
|
|
2536
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
2537
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
2538
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
2539
|
+
if (r2) {
|
|
2540
|
+
throw takeObject(r1);
|
|
2541
|
+
}
|
|
2542
|
+
return takeObject(r0);
|
|
2543
|
+
} finally {
|
|
2544
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
2545
|
+
}
|
|
2546
|
+
}
|
|
2547
|
+
|
|
2548
|
+
/**
|
|
2549
|
+
* Sign a PDF with your own certificate (a .p12/.pfx file and its password)
|
|
2550
|
+
* and return the signed bytes. The private key never leaves the page.
|
|
2551
|
+
*
|
|
2552
|
+
* This is a cryptographic PAdES signature (ETSI.CAdES.detached), appended as
|
|
2553
|
+
* an incremental update so earlier signatures stay valid. Without a
|
|
2554
|
+
* timestamp authority: no TSA or LTV in the browser. A self-signed
|
|
2555
|
+
* certificate verifies, but readers such as Acrobat show its validity as
|
|
2556
|
+
* unknown because they do not trust the issuer. Throws `PdfluentError` with
|
|
2557
|
+
* `E-SECURITY-DECRYPTION-FAILED` for a wrong certificate password.
|
|
2558
|
+
* @param {Uint8Array} bytes
|
|
2559
|
+
* @param {Uint8Array} pkcs12
|
|
2560
|
+
* @param {string} password
|
|
2561
|
+
* @param {SignPdfOptions | null} [options]
|
|
2562
|
+
* @returns {Uint8Array}
|
|
2563
|
+
*/
|
|
2564
|
+
export function signPdf(bytes, pkcs12, password, options) {
|
|
2565
|
+
try {
|
|
2566
|
+
const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
|
|
2567
|
+
const ptr0 = passArray8ToWasm0(bytes, wasm.__wbindgen_export);
|
|
2568
|
+
const len0 = WASM_VECTOR_LEN;
|
|
2569
|
+
const ptr1 = passArray8ToWasm0(pkcs12, wasm.__wbindgen_export);
|
|
2570
|
+
const len1 = WASM_VECTOR_LEN;
|
|
2571
|
+
const ptr2 = passStringToWasm0(password, wasm.__wbindgen_export, wasm.__wbindgen_export2);
|
|
2572
|
+
const len2 = WASM_VECTOR_LEN;
|
|
2573
|
+
wasm.signPdf(retptr, ptr0, len0, ptr1, len1, ptr2, len2, isLikeNone(options) ? 0 : addHeapObject(options));
|
|
2574
|
+
var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);
|
|
2575
|
+
var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);
|
|
2576
|
+
var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);
|
|
2577
|
+
var r3 = getDataViewMemory0().getInt32(retptr + 4 * 3, true);
|
|
2578
|
+
if (r3) {
|
|
2579
|
+
throw takeObject(r2);
|
|
2580
|
+
}
|
|
2581
|
+
var v4 = getArrayU8FromWasm0(r0, r1).slice();
|
|
2582
|
+
wasm.__wbindgen_export4(r0, r1 * 1, 1);
|
|
2583
|
+
return v4;
|
|
2584
|
+
} finally {
|
|
2585
|
+
wasm.__wbindgen_add_to_stack_pointer(16);
|
|
2586
|
+
}
|
|
2587
|
+
}
|
|
2112
2588
|
function __wbg_get_imports() {
|
|
2113
2589
|
const import0 = {
|
|
2114
2590
|
__proto__: null,
|
|
2115
|
-
|
|
2591
|
+
__wbg___pdfluent_error_ctor_9f2854a17b02ffba: function() {
|
|
2116
2592
|
const ret = __pdfluent_error_ctor();
|
|
2117
2593
|
return addHeapObject(ret);
|
|
2118
2594
|
},
|
|
@@ -2127,6 +2603,14 @@ function __wbg_get_imports() {
|
|
|
2127
2603
|
const ret = typeof(getObject(arg0)) === 'function';
|
|
2128
2604
|
return ret;
|
|
2129
2605
|
},
|
|
2606
|
+
__wbg___wbindgen_is_null_2042690d351e14f0: function(arg0) {
|
|
2607
|
+
const ret = getObject(arg0) === null;
|
|
2608
|
+
return ret;
|
|
2609
|
+
},
|
|
2610
|
+
__wbg___wbindgen_is_undefined_35bb9f4c7fd651d5: function(arg0) {
|
|
2611
|
+
const ret = getObject(arg0) === undefined;
|
|
2612
|
+
return ret;
|
|
2613
|
+
},
|
|
2130
2614
|
__wbg___wbindgen_string_get_d109740c0d18f4d7: function(arg0, arg1) {
|
|
2131
2615
|
const obj = getObject(arg1);
|
|
2132
2616
|
const ret = typeof(obj) === 'string' ? obj : undefined;
|
|
@@ -2192,6 +2676,10 @@ function __wbg_get_imports() {
|
|
|
2192
2676
|
__wbg_moveTo_11bf5a977e6b8610: function(arg0, arg1, arg2) {
|
|
2193
2677
|
getObject(arg0).moveTo(arg1, arg2);
|
|
2194
2678
|
},
|
|
2679
|
+
__wbg_new_02d162bc6cf02f60: function() {
|
|
2680
|
+
const ret = new Object();
|
|
2681
|
+
return addHeapObject(ret);
|
|
2682
|
+
},
|
|
2195
2683
|
__wbg_new_1f236d63ba0c4784: function(arg0, arg1) {
|
|
2196
2684
|
const ret = new Error(getStringFromWasm0(arg0, arg1));
|
|
2197
2685
|
return addHeapObject(ret);
|
|
@@ -2200,6 +2688,10 @@ function __wbg_get_imports() {
|
|
|
2200
2688
|
const ret = new Array();
|
|
2201
2689
|
return addHeapObject(ret);
|
|
2202
2690
|
},
|
|
2691
|
+
__wbg_new_from_slice_269e35316ed2d061: function(arg0, arg1) {
|
|
2692
|
+
const ret = new Uint8Array(getArrayU8FromWasm0(arg0, arg1));
|
|
2693
|
+
return addHeapObject(ret);
|
|
2694
|
+
},
|
|
2203
2695
|
__wbg_new_with_u8_clamped_array_and_sh_13504c3c5394c7c9: function() { return handleError(function (arg0, arg1, arg2, arg3) {
|
|
2204
2696
|
const ret = new ImageData(getClampedArrayU8FromWasm0(arg0, arg1), arg2 >>> 0, arg3 >>> 0);
|
|
2205
2697
|
return addHeapObject(ret);
|
|
@@ -2273,6 +2765,10 @@ function __wbg_get_imports() {
|
|
|
2273
2765
|
__wbg_set_width_25112eb6bf1148df: function(arg0, arg1) {
|
|
2274
2766
|
getObject(arg0).width = arg1 >>> 0;
|
|
2275
2767
|
},
|
|
2768
|
+
__wbg_stringify_ef0c105b1ccc3849: function() { return handleError(function (arg0) {
|
|
2769
|
+
const ret = JSON.stringify(getObject(arg0));
|
|
2770
|
+
return addHeapObject(ret);
|
|
2771
|
+
}, arguments); },
|
|
2276
2772
|
__wbg_strokeRect_3430a0df4158ba67: function(arg0, arg1, arg2, arg3, arg4) {
|
|
2277
2773
|
getObject(arg0).strokeRect(arg1, arg2, arg3, arg4);
|
|
2278
2774
|
},
|
package/xfa_wasm_bg.wasm
CHANGED
|
Binary file
|
package/xfa_wasm_bg.wasm.d.ts
CHANGED
|
@@ -5,14 +5,21 @@ export const __wbg_pdfdoc_free: (a: number, b: number) => void;
|
|
|
5
5
|
export const __wbg_pdfdocmut_free: (a: number, b: number) => void;
|
|
6
6
|
export const __wbg_texteditor_free: (a: number, b: number) => void;
|
|
7
7
|
export const __wbg_xfaengine_free: (a: number, b: number) => void;
|
|
8
|
+
export const decryptPdf: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
9
|
+
export const encryptPdf: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void;
|
|
10
|
+
export const extractImages: (a: number, b: number, c: number) => void;
|
|
8
11
|
export const pdfdoc_addFreeText: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
|
|
9
12
|
export const pdfdoc_addHighlight: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
|
|
10
13
|
export const pdfdoc_addStickyNote: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
11
14
|
export const pdfdoc_addTextWatermark: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
15
|
+
export const pdfdoc_addWatermark: (a: number, b: number, c: number) => void;
|
|
12
16
|
export const pdfdoc_compress: (a: number, b: number) => void;
|
|
13
17
|
export const pdfdoc_convertToPdfa: (a: number, b: number, c: number, d: number) => void;
|
|
14
18
|
export const pdfdoc_deletePages: (a: number, b: number, c: number, d: number) => void;
|
|
15
19
|
export const pdfdoc_dssInfo: (a: number, b: number) => void;
|
|
20
|
+
export const pdfdoc_extractBlocks: (a: number, b: number, c: number, d: number) => void;
|
|
21
|
+
export const pdfdoc_extractDocling: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
22
|
+
export const pdfdoc_extractMarkdown: (a: number, b: number, c: number, d: number) => void;
|
|
16
23
|
export const pdfdoc_extractPages: (a: number, b: number, c: number, d: number) => void;
|
|
17
24
|
export const pdfdoc_flattenXfa: (a: number, b: number) => void;
|
|
18
25
|
export const pdfdoc_getAnnotations: (a: number, b: number, c: number) => void;
|
|
@@ -37,6 +44,7 @@ export const pdfdoc_setFormField: (a: number, b: number, c: number, d: number, e
|
|
|
37
44
|
export const pdfdoc_setFormFields: (a: number, b: number, c: number, d: number) => void;
|
|
38
45
|
export const pdfdoc_signatures: (a: number, b: number) => void;
|
|
39
46
|
export const pdfdoc_text: (a: number, b: number, c: number) => void;
|
|
47
|
+
export const pdfdoc_textWithLayout: (a: number, b: number) => void;
|
|
40
48
|
export const pdfdoc_toDocx: (a: number, b: number) => void;
|
|
41
49
|
export const pdfdoc_toPptx: (a: number, b: number) => void;
|
|
42
50
|
export const pdfdoc_toXlsx: (a: number, b: number) => void;
|
|
@@ -52,18 +60,23 @@ export const pdfdocmut_compress: (a: number, b: number) => void;
|
|
|
52
60
|
export const pdfdocmut_deletePages: (a: number, b: number, c: number, d: number) => void;
|
|
53
61
|
export const pdfdocmut_extractPages: (a: number, b: number, c: number, d: number) => void;
|
|
54
62
|
export const pdfdocmut_formatTextSpan: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
63
|
+
export const pdfdocmut_imagePlacements: (a: number, b: number, c: number) => void;
|
|
55
64
|
export const pdfdocmut_open: (a: number, b: number, c: number) => void;
|
|
56
65
|
export const pdfdocmut_pageCount: (a: number) => number;
|
|
57
66
|
export const pdfdocmut_redactRegion: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
58
67
|
export const pdfdocmut_redactSearch: (a: number, b: number, c: number, d: number) => void;
|
|
68
|
+
export const pdfdocmut_removeImage: (a: number, b: number, c: number, d: number, e: number) => void;
|
|
59
69
|
export const pdfdocmut_reorderPages: (a: number, b: number, c: number, d: number) => void;
|
|
70
|
+
export const pdfdocmut_replaceImage: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
60
71
|
export const pdfdocmut_replaceTextSpan: (a: number, b: number, c: number, d: number, e: number, f: number, g: number) => void;
|
|
61
72
|
export const pdfdocmut_rotatePage: (a: number, b: number, c: number, d: number) => void;
|
|
62
73
|
export const pdfdocmut_save: (a: number, b: number) => void;
|
|
63
74
|
export const pdfdocmut_setFormField: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
64
75
|
export const pdfdocmut_setFormFields: (a: number, b: number, c: number, d: number) => void;
|
|
76
|
+
export const pdfdocmut_setImageRect: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number) => void;
|
|
65
77
|
export const pdfdocmut_setMultiSelect: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
|
66
78
|
export const pdfdocmut_setTextRunStyle: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void;
|
|
79
|
+
export const signPdf: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number) => void;
|
|
67
80
|
export const texteditor_findText: (a: number, b: number, c: number, d: number) => void;
|
|
68
81
|
export const texteditor_open: (a: number, b: number, c: number) => void;
|
|
69
82
|
export const texteditor_pageCount: (a: number) => number;
|
|
File without changes
|