pdfnova 1.0.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 +336 -0
- package/dist/AnnotationReader-ADHPZ3V5.mjs +3 -0
- package/dist/AnnotationReader-ADHPZ3V5.mjs.map +1 -0
- package/dist/AnnotationReader-C5XLXGWS.cjs +12 -0
- package/dist/AnnotationReader-C5XLXGWS.cjs.map +1 -0
- package/dist/AnnotationWriter-N3Y4KTPI.cjs +12 -0
- package/dist/AnnotationWriter-N3Y4KTPI.cjs.map +1 -0
- package/dist/AnnotationWriter-XWY5N6AZ.mjs +3 -0
- package/dist/AnnotationWriter-XWY5N6AZ.mjs.map +1 -0
- package/dist/FormFiller-2O4MOQYV.cjs +12 -0
- package/dist/FormFiller-2O4MOQYV.cjs.map +1 -0
- package/dist/FormFiller-6DLWMRN5.mjs +3 -0
- package/dist/FormFiller-6DLWMRN5.mjs.map +1 -0
- package/dist/FormFlattener-5MWLLH7W.cjs +12 -0
- package/dist/FormFlattener-5MWLLH7W.cjs.map +1 -0
- package/dist/FormFlattener-YQRQ3QOY.mjs +3 -0
- package/dist/FormFlattener-YQRQ3QOY.mjs.map +1 -0
- package/dist/FormReader-QAEDFD77.cjs +13 -0
- package/dist/FormReader-QAEDFD77.cjs.map +1 -0
- package/dist/FormReader-XEF3T5LD.mjs +4 -0
- package/dist/FormReader-XEF3T5LD.mjs.map +1 -0
- package/dist/SignatureVerifier-2IR7UQGU.mjs +3 -0
- package/dist/SignatureVerifier-2IR7UQGU.mjs.map +1 -0
- package/dist/SignatureVerifier-4KWQA7X6.cjs +12 -0
- package/dist/SignatureVerifier-4KWQA7X6.cjs.map +1 -0
- package/dist/WasmMock-2I3GVRQF.mjs +397 -0
- package/dist/WasmMock-2I3GVRQF.mjs.map +1 -0
- package/dist/WasmMock-OYPV4J6B.cjs +399 -0
- package/dist/WasmMock-OYPV4J6B.cjs.map +1 -0
- package/dist/chunk-2OWW5BYD.mjs +1847 -0
- package/dist/chunk-2OWW5BYD.mjs.map +1 -0
- package/dist/chunk-2YFCKMVK.cjs +72 -0
- package/dist/chunk-2YFCKMVK.cjs.map +1 -0
- package/dist/chunk-7FGOUG4Z.cjs +51 -0
- package/dist/chunk-7FGOUG4Z.cjs.map +1 -0
- package/dist/chunk-CPMUWWNS.cjs +44 -0
- package/dist/chunk-CPMUWWNS.cjs.map +1 -0
- package/dist/chunk-DVMAQ62T.cjs +109 -0
- package/dist/chunk-DVMAQ62T.cjs.map +1 -0
- package/dist/chunk-ETSUOY4U.cjs +104 -0
- package/dist/chunk-ETSUOY4U.cjs.map +1 -0
- package/dist/chunk-FD5RTJ5W.mjs +60 -0
- package/dist/chunk-FD5RTJ5W.mjs.map +1 -0
- package/dist/chunk-FO3DQLVB.mjs +42 -0
- package/dist/chunk-FO3DQLVB.mjs.map +1 -0
- package/dist/chunk-G2FA6VKV.cjs +62 -0
- package/dist/chunk-G2FA6VKV.cjs.map +1 -0
- package/dist/chunk-G7575D5X.mjs +67 -0
- package/dist/chunk-G7575D5X.mjs.map +1 -0
- package/dist/chunk-I7OBHZLB.mjs +75 -0
- package/dist/chunk-I7OBHZLB.mjs.map +1 -0
- package/dist/chunk-INA3KRJK.cjs +1863 -0
- package/dist/chunk-INA3KRJK.cjs.map +1 -0
- package/dist/chunk-RZFKZ2CA.cjs +77 -0
- package/dist/chunk-RZFKZ2CA.cjs.map +1 -0
- package/dist/chunk-VRJQZOCH.mjs +107 -0
- package/dist/chunk-VRJQZOCH.mjs.map +1 -0
- package/dist/chunk-X53667JS.mjs +102 -0
- package/dist/chunk-X53667JS.mjs.map +1 -0
- package/dist/chunk-XEHKVFPJ.mjs +49 -0
- package/dist/chunk-XEHKVFPJ.mjs.map +1 -0
- package/dist/index.cjs +112 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +103 -0
- package/dist/index.d.ts +103 -0
- package/dist/index.mjs +14 -0
- package/dist/index.mjs.map +1 -0
- package/dist/lite-CMz-Yosm.d.cts +662 -0
- package/dist/lite-CMz-Yosm.d.ts +662 -0
- package/dist/lite.cjs +70 -0
- package/dist/lite.cjs.map +1 -0
- package/dist/lite.d.cts +1 -0
- package/dist/lite.d.ts +1 -0
- package/dist/lite.mjs +8 -0
- package/dist/lite.mjs.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// src/signatures/SignatureVerifier.ts
|
|
2
|
+
var SignatureVerifier = class {
|
|
3
|
+
wasm;
|
|
4
|
+
bridge;
|
|
5
|
+
constructor(wasm, bridge) {
|
|
6
|
+
this.wasm = wasm;
|
|
7
|
+
this.bridge = bridge;
|
|
8
|
+
}
|
|
9
|
+
readSignatures(docPtr) {
|
|
10
|
+
if (!this.wasm._FPDF_GetSignatureCount) return [];
|
|
11
|
+
const count = this.wasm._FPDF_GetSignatureCount(docPtr);
|
|
12
|
+
if (count <= 0) return [];
|
|
13
|
+
const signatures = [];
|
|
14
|
+
for (let i = 0; i < count; i++) {
|
|
15
|
+
const sigPtr = this.wasm._FPDF_GetSignatureObject(docPtr, i);
|
|
16
|
+
if (sigPtr === 0) continue;
|
|
17
|
+
const sig = this._readSignature(sigPtr, i);
|
|
18
|
+
if (sig) signatures.push(sig);
|
|
19
|
+
}
|
|
20
|
+
return signatures;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Verify a signature's integrity.
|
|
24
|
+
* Performs basic byte-range validation and returns extracted metadata.
|
|
25
|
+
* For full PKI verification, use the raw `contents` with a crypto library.
|
|
26
|
+
*/
|
|
27
|
+
async verify(docPtr, sigIndex, documentBytes) {
|
|
28
|
+
const signatures = this.readSignatures(docPtr);
|
|
29
|
+
const sig = signatures[sigIndex];
|
|
30
|
+
if (!sig) {
|
|
31
|
+
throw new Error(`Signature at index ${sigIndex} not found`);
|
|
32
|
+
}
|
|
33
|
+
const byteRangeValid = this._validateByteRange(sig.byteRange, documentBytes);
|
|
34
|
+
return {
|
|
35
|
+
valid: byteRangeValid && sig.contents.length > 0,
|
|
36
|
+
signer: sig.reason || "Unknown",
|
|
37
|
+
reason: sig.reason,
|
|
38
|
+
timestamp: sig.signingTime,
|
|
39
|
+
subFilter: sig.subFilter,
|
|
40
|
+
docMDPPermission: sig.docMDPPermission,
|
|
41
|
+
rawContents: sig.contents
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
_readSignature(sigPtr, index) {
|
|
45
|
+
const contents = this.bridge.getSignatureBinaryField(
|
|
46
|
+
sigPtr,
|
|
47
|
+
(sig, buf, bufLen) => this.wasm._FPDFSignObj_GetContents(sig, buf, bufLen)
|
|
48
|
+
);
|
|
49
|
+
const byteRangeRaw = this.bridge.getSignatureBinaryField(
|
|
50
|
+
sigPtr,
|
|
51
|
+
(sig, buf, bufLen) => this.wasm._FPDFSignObj_GetByteRange(sig, buf, bufLen)
|
|
52
|
+
);
|
|
53
|
+
const byteRange = this._parseByteRange(byteRangeRaw);
|
|
54
|
+
const subFilter = this.bridge.getSignatureStringField(
|
|
55
|
+
sigPtr,
|
|
56
|
+
(sig, buf, bufLen) => this.wasm._FPDFSignObj_GetSubFilter(sig, buf, bufLen)
|
|
57
|
+
);
|
|
58
|
+
const reason = this.bridge.getSignatureStringField(
|
|
59
|
+
sigPtr,
|
|
60
|
+
(sig, buf, bufLen) => this.wasm._FPDFSignObj_GetReason(sig, buf, bufLen)
|
|
61
|
+
);
|
|
62
|
+
const signingTime = this.bridge.getSignatureStringField(
|
|
63
|
+
sigPtr,
|
|
64
|
+
(sig, buf, bufLen) => this.wasm._FPDFSignObj_GetTime(sig, buf, bufLen)
|
|
65
|
+
);
|
|
66
|
+
const docMDPPermission = this.wasm._FPDFSignObj_GetDocMDPPermission(sigPtr);
|
|
67
|
+
return {
|
|
68
|
+
index,
|
|
69
|
+
contents,
|
|
70
|
+
byteRange,
|
|
71
|
+
subFilter,
|
|
72
|
+
reason,
|
|
73
|
+
signingTime,
|
|
74
|
+
docMDPPermission
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
_parseByteRange(raw) {
|
|
78
|
+
if (raw.length === 0) return [];
|
|
79
|
+
const view = new DataView(raw.buffer, raw.byteOffset, raw.byteLength);
|
|
80
|
+
const ints = [];
|
|
81
|
+
for (let i = 0; i + 3 < raw.length; i += 4) {
|
|
82
|
+
ints.push(view.getInt32(i, true));
|
|
83
|
+
}
|
|
84
|
+
return ints;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Validates that the byte ranges cover the expected portions of the document
|
|
88
|
+
* (everything except the signature contents hex string).
|
|
89
|
+
*/
|
|
90
|
+
_validateByteRange(byteRange, documentBytes) {
|
|
91
|
+
if (byteRange.length < 4 || byteRange.length % 2 !== 0) return false;
|
|
92
|
+
if (byteRange[0] !== 0) return false;
|
|
93
|
+
const lastOffset = byteRange[byteRange.length - 2];
|
|
94
|
+
const lastLength = byteRange[byteRange.length - 1];
|
|
95
|
+
if (lastOffset + lastLength !== documentBytes.length) return false;
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export { SignatureVerifier };
|
|
101
|
+
//# sourceMappingURL=chunk-X53667JS.mjs.map
|
|
102
|
+
//# sourceMappingURL=chunk-X53667JS.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/signatures/SignatureVerifier.ts"],"names":[],"mappings":"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","file":"chunk-X53667JS.mjs","sourcesContent":["import type { WasmModule, SignatureData, SignatureVerificationResult } from '../types';\nimport { WasmBridge } from '../core/WasmBridge';\n\n/**\n * Reads and verifies digital signatures from a PDF document.\n * Uses PDFium's FPDFSignObj_* APIs to extract signature metadata.\n *\n * Note: Full cryptographic verification (validating the PKCS#7 signature\n * against a certificate chain) requires additional crypto libraries.\n * This class extracts the raw signature data and metadata for verification\n * by external tools (e.g., node-forge, WebCrypto, or OpenSSL).\n */\nexport class SignatureVerifier {\n private wasm: WasmModule;\n private bridge: WasmBridge;\n\n constructor(wasm: WasmModule, bridge: WasmBridge) {\n this.wasm = wasm;\n this.bridge = bridge;\n }\n\n readSignatures(docPtr: number): SignatureData[] {\n if (!this.wasm._FPDF_GetSignatureCount) return [];\n\n const count = this.wasm._FPDF_GetSignatureCount(docPtr);\n if (count <= 0) return [];\n\n const signatures: SignatureData[] = [];\n\n for (let i = 0; i < count; i++) {\n const sigPtr = this.wasm._FPDF_GetSignatureObject!(docPtr, i);\n if (sigPtr === 0) continue;\n\n const sig = this._readSignature(sigPtr, i);\n if (sig) signatures.push(sig);\n }\n\n return signatures;\n }\n\n /**\n * Verify a signature's integrity.\n * Performs basic byte-range validation and returns extracted metadata.\n * For full PKI verification, use the raw `contents` with a crypto library.\n */\n async verify(docPtr: number, sigIndex: number, documentBytes: Uint8Array): Promise<SignatureVerificationResult> {\n const signatures = this.readSignatures(docPtr);\n const sig = signatures[sigIndex];\n\n if (!sig) {\n throw new Error(`Signature at index ${sigIndex} not found`);\n }\n\n // Basic byte-range integrity check\n const byteRangeValid = this._validateByteRange(sig.byteRange, documentBytes);\n\n return {\n valid: byteRangeValid && sig.contents.length > 0,\n signer: sig.reason || 'Unknown',\n reason: sig.reason,\n timestamp: sig.signingTime,\n subFilter: sig.subFilter,\n docMDPPermission: sig.docMDPPermission,\n rawContents: sig.contents,\n };\n }\n\n private _readSignature(sigPtr: number, index: number): SignatureData | null {\n const contents = this.bridge.getSignatureBinaryField(\n sigPtr,\n (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetContents!(sig, buf, bufLen),\n );\n\n const byteRangeRaw = this.bridge.getSignatureBinaryField(\n sigPtr,\n (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetByteRange!(sig, buf, bufLen),\n );\n const byteRange = this._parseByteRange(byteRangeRaw);\n\n const subFilter = this.bridge.getSignatureStringField(\n sigPtr,\n (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetSubFilter!(sig, buf, bufLen),\n );\n\n const reason = this.bridge.getSignatureStringField(\n sigPtr,\n (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetReason!(sig, buf, bufLen),\n );\n\n const signingTime = this.bridge.getSignatureStringField(\n sigPtr,\n (sig, buf, bufLen) => this.wasm._FPDFSignObj_GetTime!(sig, buf, bufLen),\n );\n\n const docMDPPermission = this.wasm._FPDFSignObj_GetDocMDPPermission!(sigPtr);\n\n return {\n index,\n contents,\n byteRange,\n subFilter,\n reason,\n signingTime,\n docMDPPermission,\n };\n }\n\n private _parseByteRange(raw: Uint8Array): number[] {\n if (raw.length === 0) return [];\n\n // Byte range is stored as pairs of (offset, length) as 32-bit integers\n const view = new DataView(raw.buffer, raw.byteOffset, raw.byteLength);\n const ints: number[] = [];\n for (let i = 0; i + 3 < raw.length; i += 4) {\n ints.push(view.getInt32(i, true));\n }\n return ints;\n }\n\n /**\n * Validates that the byte ranges cover the expected portions of the document\n * (everything except the signature contents hex string).\n */\n private _validateByteRange(byteRange: number[], documentBytes: Uint8Array): boolean {\n if (byteRange.length < 4 || byteRange.length % 2 !== 0) return false;\n\n // Byte range should start at 0\n if (byteRange[0] !== 0) return false;\n\n // Last range should end at document length\n const lastOffset = byteRange[byteRange.length - 2];\n const lastLength = byteRange[byteRange.length - 1];\n if (lastOffset + lastLength !== documentBytes.length) return false;\n\n return true;\n }\n}\n"]}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
// src/forms/FormFiller.ts
|
|
2
|
+
var FormFiller = class {
|
|
3
|
+
wasm;
|
|
4
|
+
bridge;
|
|
5
|
+
constructor(wasm, bridge) {
|
|
6
|
+
this.wasm = wasm;
|
|
7
|
+
this.bridge = bridge;
|
|
8
|
+
}
|
|
9
|
+
setFieldValue(docPtr, formHandle, pageCount, fieldName, value) {
|
|
10
|
+
for (let pageIdx = 0; pageIdx < pageCount; pageIdx++) {
|
|
11
|
+
const pagePtr = this.wasm._FPDF_LoadPage(docPtr, pageIdx);
|
|
12
|
+
if (pagePtr === 0) continue;
|
|
13
|
+
try {
|
|
14
|
+
const found = this._setFieldOnPage(pagePtr, formHandle, fieldName, value);
|
|
15
|
+
if (found) return true;
|
|
16
|
+
} finally {
|
|
17
|
+
this.wasm._FPDF_ClosePage(pagePtr);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
throw new Error(`Form field "${fieldName}" not found`);
|
|
21
|
+
}
|
|
22
|
+
_setFieldOnPage(pagePtr, formHandle, fieldName, value) {
|
|
23
|
+
if (!this.wasm._FPDFPage_GetAnnotCount) return false;
|
|
24
|
+
const count = this.wasm._FPDFPage_GetAnnotCount(pagePtr);
|
|
25
|
+
for (let i = 0; i < count; i++) {
|
|
26
|
+
const annotPtr = this.wasm._FPDFPage_GetAnnot(pagePtr, i);
|
|
27
|
+
if (annotPtr === 0) continue;
|
|
28
|
+
try {
|
|
29
|
+
const subtype = this.wasm._FPDFAnnot_GetSubtype(annotPtr);
|
|
30
|
+
if (subtype !== 20) continue;
|
|
31
|
+
const name = this.bridge.getFormFieldName(formHandle, annotPtr);
|
|
32
|
+
if (name !== fieldName) continue;
|
|
33
|
+
if (this.wasm._FPDFAnnot_SetFormFieldValue) {
|
|
34
|
+
const valuePtr = this.bridge.allocateUTF16String(value);
|
|
35
|
+
this.wasm._FPDFAnnot_SetFormFieldValue(formHandle, annotPtr, valuePtr);
|
|
36
|
+
this.bridge.free(valuePtr);
|
|
37
|
+
}
|
|
38
|
+
return true;
|
|
39
|
+
} finally {
|
|
40
|
+
this.wasm._FPDFPage_CloseAnnot(annotPtr);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export { FormFiller };
|
|
48
|
+
//# sourceMappingURL=chunk-XEHKVFPJ.mjs.map
|
|
49
|
+
//# sourceMappingURL=chunk-XEHKVFPJ.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/forms/FormFiller.ts"],"names":[],"mappings":";AAOO,IAAM,aAAN,MAAiB;AAAA,EACd,IAAA;AAAA,EACA,MAAA;AAAA,EAER,WAAA,CAAY,MAAkB,MAAA,EAAoB;AAChD,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA,EAEA,aAAA,CACE,MAAA,EACA,UAAA,EACA,SAAA,EACA,WACA,KAAA,EACS;AACT,IAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,SAAA,EAAW,OAAA,EAAA,EAAW;AACpD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,cAAA,CAAe,QAAQ,OAAO,CAAA;AACxD,MAAA,IAAI,YAAY,CAAA,EAAG;AAEnB,MAAA,IAAI;AACF,QAAA,MAAM,QAAQ,IAAA,CAAK,eAAA,CAAgB,OAAA,EAAS,UAAA,EAAY,WAAW,KAAK,CAAA;AACxE,QAAA,IAAI,OAAO,OAAO,IAAA;AAAA,MACpB,CAAA,SAAE;AACA,QAAA,IAAA,CAAK,IAAA,CAAK,gBAAgB,OAAO,CAAA;AAAA,MACnC;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,SAAS,CAAA,WAAA,CAAa,CAAA;AAAA,EACvD;AAAA,EAEQ,eAAA,CACN,OAAA,EACA,UAAA,EACA,SAAA,EACA,KAAA,EACS;AACT,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,CAAK,uBAAA,EAAyB,OAAO,KAAA;AAE/C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,uBAAA,CAAwB,OAAO,CAAA;AAEvD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,kBAAA,CAAoB,SAAS,CAAC,CAAA;AACzD,MAAA,IAAI,aAAa,CAAA,EAAG;AAEpB,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,qBAAA,CAAuB,QAAQ,CAAA;AACzD,QAAA,IAAI,YAAY,EAAA,EAAI;AAEpB,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,YAAY,QAAQ,CAAA;AAC9D,QAAA,IAAI,SAAS,SAAA,EAAW;AAExB,QAAA,IAAI,IAAA,CAAK,KAAK,4BAAA,EAA8B;AAC1C,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,MAAA,CAAO,mBAAA,CAAoB,KAAK,CAAA;AACtD,UAAA,IAAA,CAAK,IAAA,CAAK,4BAAA,CAA6B,UAAA,EAAY,QAAA,EAAU,QAAQ,CAAA;AACrE,UAAA,IAAA,CAAK,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA,QAC3B;AAEA,QAAA,OAAO,IAAA;AAAA,MACT,CAAA,SAAE;AACA,QAAA,IAAA,CAAK,IAAA,CAAK,qBAAsB,QAAQ,CAAA;AAAA,MAC1C;AAAA,IACF;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AACF","file":"chunk-XEHKVFPJ.mjs","sourcesContent":["import type { WasmModule } from '../types';\nimport { WasmBridge } from '../core/WasmBridge';\n\n/**\n * Fills form field values programmatically.\n * Finds the matching field by name across all pages and sets its value.\n */\nexport class FormFiller {\n private wasm: WasmModule;\n private bridge: WasmBridge;\n\n constructor(wasm: WasmModule, bridge: WasmBridge) {\n this.wasm = wasm;\n this.bridge = bridge;\n }\n\n setFieldValue(\n docPtr: number,\n formHandle: number,\n pageCount: number,\n fieldName: string,\n value: string,\n ): boolean {\n for (let pageIdx = 0; pageIdx < pageCount; pageIdx++) {\n const pagePtr = this.wasm._FPDF_LoadPage(docPtr, pageIdx);\n if (pagePtr === 0) continue;\n\n try {\n const found = this._setFieldOnPage(pagePtr, formHandle, fieldName, value);\n if (found) return true;\n } finally {\n this.wasm._FPDF_ClosePage(pagePtr);\n }\n }\n\n throw new Error(`Form field \"${fieldName}\" not found`);\n }\n\n private _setFieldOnPage(\n pagePtr: number,\n formHandle: number,\n fieldName: string,\n value: string,\n ): boolean {\n if (!this.wasm._FPDFPage_GetAnnotCount) return false;\n\n const count = this.wasm._FPDFPage_GetAnnotCount(pagePtr);\n\n for (let i = 0; i < count; i++) {\n const annotPtr = this.wasm._FPDFPage_GetAnnot!(pagePtr, i);\n if (annotPtr === 0) continue;\n\n try {\n const subtype = this.wasm._FPDFAnnot_GetSubtype!(annotPtr);\n if (subtype !== 20) continue; // Not a widget\n\n const name = this.bridge.getFormFieldName(formHandle, annotPtr);\n if (name !== fieldName) continue;\n\n if (this.wasm._FPDFAnnot_SetFormFieldValue) {\n const valuePtr = this.bridge.allocateUTF16String(value);\n this.wasm._FPDFAnnot_SetFormFieldValue(formHandle, annotPtr, valuePtr);\n this.bridge.free(valuePtr);\n }\n\n return true;\n } finally {\n this.wasm._FPDFPage_CloseAnnot!(annotPtr);\n }\n }\n\n return false;\n }\n}\n"]}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkETSUOY4U_cjs = require('./chunk-ETSUOY4U.cjs');
|
|
4
|
+
var chunkINA3KRJK_cjs = require('./chunk-INA3KRJK.cjs');
|
|
5
|
+
var chunkDVMAQ62T_cjs = require('./chunk-DVMAQ62T.cjs');
|
|
6
|
+
var chunkRZFKZ2CA_cjs = require('./chunk-RZFKZ2CA.cjs');
|
|
7
|
+
var chunkG2FA6VKV_cjs = require('./chunk-G2FA6VKV.cjs');
|
|
8
|
+
var chunk2YFCKMVK_cjs = require('./chunk-2YFCKMVK.cjs');
|
|
9
|
+
var chunk7FGOUG4Z_cjs = require('./chunk-7FGOUG4Z.cjs');
|
|
10
|
+
var chunkCPMUWWNS_cjs = require('./chunk-CPMUWWNS.cjs');
|
|
11
|
+
|
|
12
|
+
// src/index.ts
|
|
13
|
+
chunkINA3KRJK_cjs.setTier("full");
|
|
14
|
+
|
|
15
|
+
Object.defineProperty(exports, "SignatureVerifier", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
get: function () { return chunkETSUOY4U_cjs.SignatureVerifier; }
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(exports, "LinkExtractor", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
get: function () { return chunkINA3KRJK_cjs.LinkExtractor; }
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(exports, "OutlineExtractor", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
get: function () { return chunkINA3KRJK_cjs.OutlineExtractor; }
|
|
26
|
+
});
|
|
27
|
+
Object.defineProperty(exports, "PDFDocument", {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
get: function () { return chunkINA3KRJK_cjs.PDFDocument; }
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(exports, "PDFPage", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
get: function () { return chunkINA3KRJK_cjs.PDFPage; }
|
|
34
|
+
});
|
|
35
|
+
Object.defineProperty(exports, "PDFWorker", {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
get: function () { return chunkINA3KRJK_cjs.PDFWorker; }
|
|
38
|
+
});
|
|
39
|
+
Object.defineProperty(exports, "PageRenderer", {
|
|
40
|
+
enumerable: true,
|
|
41
|
+
get: function () { return chunkINA3KRJK_cjs.PageRenderer; }
|
|
42
|
+
});
|
|
43
|
+
Object.defineProperty(exports, "SearchEngine", {
|
|
44
|
+
enumerable: true,
|
|
45
|
+
get: function () { return chunkINA3KRJK_cjs.SearchEngine; }
|
|
46
|
+
});
|
|
47
|
+
Object.defineProperty(exports, "TextExtractor", {
|
|
48
|
+
enumerable: true,
|
|
49
|
+
get: function () { return chunkINA3KRJK_cjs.TextExtractor; }
|
|
50
|
+
});
|
|
51
|
+
Object.defineProperty(exports, "TextLayerBuilder", {
|
|
52
|
+
enumerable: true,
|
|
53
|
+
get: function () { return chunkINA3KRJK_cjs.TextLayerBuilder; }
|
|
54
|
+
});
|
|
55
|
+
Object.defineProperty(exports, "VirtualRenderer", {
|
|
56
|
+
enumerable: true,
|
|
57
|
+
get: function () { return chunkINA3KRJK_cjs.VirtualRenderer; }
|
|
58
|
+
});
|
|
59
|
+
Object.defineProperty(exports, "WasmLoader", {
|
|
60
|
+
enumerable: true,
|
|
61
|
+
get: function () { return chunkINA3KRJK_cjs.WasmLoader; }
|
|
62
|
+
});
|
|
63
|
+
Object.defineProperty(exports, "WorkerPool", {
|
|
64
|
+
enumerable: true,
|
|
65
|
+
get: function () { return chunkINA3KRJK_cjs.WorkerPool; }
|
|
66
|
+
});
|
|
67
|
+
Object.defineProperty(exports, "getTier", {
|
|
68
|
+
enumerable: true,
|
|
69
|
+
get: function () { return chunkINA3KRJK_cjs.getTier; }
|
|
70
|
+
});
|
|
71
|
+
Object.defineProperty(exports, "isFullTier", {
|
|
72
|
+
enumerable: true,
|
|
73
|
+
get: function () { return chunkINA3KRJK_cjs.isFullTier; }
|
|
74
|
+
});
|
|
75
|
+
Object.defineProperty(exports, "AnnotationReader", {
|
|
76
|
+
enumerable: true,
|
|
77
|
+
get: function () { return chunkDVMAQ62T_cjs.AnnotationReader; }
|
|
78
|
+
});
|
|
79
|
+
Object.defineProperty(exports, "AnnotationWriter", {
|
|
80
|
+
enumerable: true,
|
|
81
|
+
get: function () { return chunkRZFKZ2CA_cjs.AnnotationWriter; }
|
|
82
|
+
});
|
|
83
|
+
Object.defineProperty(exports, "FormReader", {
|
|
84
|
+
enumerable: true,
|
|
85
|
+
get: function () { return chunkG2FA6VKV_cjs.FormReader; }
|
|
86
|
+
});
|
|
87
|
+
Object.defineProperty(exports, "AnnotationType", {
|
|
88
|
+
enumerable: true,
|
|
89
|
+
get: function () { return chunk2YFCKMVK_cjs.AnnotationType; }
|
|
90
|
+
});
|
|
91
|
+
Object.defineProperty(exports, "FLATTEN_USAGE", {
|
|
92
|
+
enumerable: true,
|
|
93
|
+
get: function () { return chunk2YFCKMVK_cjs.FLATTEN_USAGE; }
|
|
94
|
+
});
|
|
95
|
+
Object.defineProperty(exports, "FormFieldType", {
|
|
96
|
+
enumerable: true,
|
|
97
|
+
get: function () { return chunk2YFCKMVK_cjs.FormFieldType; }
|
|
98
|
+
});
|
|
99
|
+
Object.defineProperty(exports, "RENDER_FLAG", {
|
|
100
|
+
enumerable: true,
|
|
101
|
+
get: function () { return chunk2YFCKMVK_cjs.RENDER_FLAG; }
|
|
102
|
+
});
|
|
103
|
+
Object.defineProperty(exports, "FormFiller", {
|
|
104
|
+
enumerable: true,
|
|
105
|
+
get: function () { return chunk7FGOUG4Z_cjs.FormFiller; }
|
|
106
|
+
});
|
|
107
|
+
Object.defineProperty(exports, "FormFlattener", {
|
|
108
|
+
enumerable: true,
|
|
109
|
+
get: function () { return chunkCPMUWWNS_cjs.FormFlattener; }
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=index.cjs.map
|
|
112
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["setTier"],"mappings":";;;;;;;;;;;;AAgDAA,yBAAA,CAAQ,MAAM,CAAA","file":"index.cjs","sourcesContent":["export { PDFDocument } from './document/PDFDocument';\nexport { PDFPage } from './document/PDFPage';\nexport { PageRenderer } from './document/PageRenderer';\nexport { VirtualRenderer } from './document/VirtualRenderer';\nexport { TextExtractor } from './text/TextExtractor';\nexport { TextLayerBuilder } from './text/TextLayerBuilder';\nexport { SearchEngine } from './text/SearchEngine';\nexport { OutlineExtractor } from './navigation/OutlineExtractor';\nexport { LinkExtractor } from './navigation/LinkExtractor';\nexport { AnnotationReader } from './annotations/AnnotationReader';\nexport { AnnotationWriter } from './annotations/AnnotationWriter';\nexport { FormReader } from './forms/FormReader';\nexport { FormFiller } from './forms/FormFiller';\nexport { FormFlattener } from './forms/FormFlattener';\nexport { SignatureVerifier } from './signatures/SignatureVerifier';\nexport { PDFWorker } from './worker/PDFWorker';\nexport { WorkerPool } from './worker/WorkerPool';\nexport { WasmLoader } from './core/WasmLoader';\nexport { getTier, isFullTier } from './capabilities';\n\nexport type {\n PDFMetadata,\n PDFPermissions,\n RenderOptions,\n TextSpan,\n CharBox,\n SearchResult,\n SearchOptions,\n TextRect,\n OutlineItem,\n LinkInfo,\n OpenOptions,\n PDFNovaConfig,\n VirtualRendererOptions,\n WasmTier,\n AnnotationData,\n AnnotationColor,\n AnnotationRect,\n AttachmentPoint,\n CreateAnnotationOptions,\n FormFieldData,\n SignatureData,\n SignatureVerificationResult,\n} from './types';\n\nexport { RENDER_FLAG, AnnotationType, FormFieldType, FLATTEN_USAGE } from './types';\n\nimport { setTier } from './capabilities';\nsetTier('full');\n"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { W as WasmModule, a as WasmBridge, A as AnnotationData, C as CreateAnnotationOptions, F as FormFieldData, S as SignatureData, b as SignatureVerificationResult } from './lite-CMz-Yosm.cjs';
|
|
2
|
+
export { c as AnnotationColor, d as AnnotationRect, e as AnnotationType, f as AttachmentPoint, g as CharBox, h as FLATTEN_USAGE, i as FormFieldType, L as LinkExtractor, j as LinkInfo, O as OpenOptions, k as OutlineExtractor, l as OutlineItem, P as PDFDocument, m as PDFMetadata, n as PDFNovaConfig, o as PDFPage, p as PDFPermissions, q as PDFWorker, r as PageRenderer, R as RENDER_FLAG, s as RenderOptions, t as SearchEngine, u as SearchOptions, v as SearchResult, T as TextExtractor, w as TextLayerBuilder, x as TextRect, y as TextSpan, V as VirtualRenderer, z as VirtualRendererOptions, B as WasmLoader, D as WasmTier, E as WorkerPool, G as getTier, H as isFullTier } from './lite-CMz-Yosm.cjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Reads annotations from a PDF page using PDFium's FPDFAnnot_* APIs.
|
|
6
|
+
*/
|
|
7
|
+
declare class AnnotationReader {
|
|
8
|
+
private wasm;
|
|
9
|
+
private bridge;
|
|
10
|
+
constructor(wasm: WasmModule, bridge: WasmBridge);
|
|
11
|
+
readAnnotations(pagePtr: number): AnnotationData[];
|
|
12
|
+
private _readAnnotation;
|
|
13
|
+
private _getRect;
|
|
14
|
+
private _getColor;
|
|
15
|
+
private _getAttachmentPoints;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Creates and modifies annotations on PDF pages using PDFium's FPDFAnnot_* APIs.
|
|
20
|
+
*/
|
|
21
|
+
declare class AnnotationWriter {
|
|
22
|
+
private wasm;
|
|
23
|
+
private bridge;
|
|
24
|
+
constructor(wasm: WasmModule, bridge: WasmBridge);
|
|
25
|
+
addAnnotation(pagePtr: number, options: CreateAnnotationOptions): void;
|
|
26
|
+
removeAnnotation(pagePtr: number, index: number): void;
|
|
27
|
+
private _setRect;
|
|
28
|
+
private _setColor;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Reads form fields from all pages of a PDF document.
|
|
33
|
+
* Iterates through annotations of type Widget to find form fields.
|
|
34
|
+
*/
|
|
35
|
+
declare class FormReader {
|
|
36
|
+
private wasm;
|
|
37
|
+
private bridge;
|
|
38
|
+
constructor(wasm: WasmModule, bridge: WasmBridge);
|
|
39
|
+
readAllFields(docPtr: number, formHandle: number, pageCount: number): FormFieldData[];
|
|
40
|
+
private _readPageFields;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Fills form field values programmatically.
|
|
45
|
+
* Finds the matching field by name across all pages and sets its value.
|
|
46
|
+
*/
|
|
47
|
+
declare class FormFiller {
|
|
48
|
+
private wasm;
|
|
49
|
+
private bridge;
|
|
50
|
+
constructor(wasm: WasmModule, bridge: WasmBridge);
|
|
51
|
+
setFieldValue(docPtr: number, formHandle: number, pageCount: number, fieldName: string, value: string): boolean;
|
|
52
|
+
private _setFieldOnPage;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Flattens form fields into static page content.
|
|
57
|
+
* After flattening, form fields become non-interactive rendered graphics.
|
|
58
|
+
*/
|
|
59
|
+
declare class FormFlattener {
|
|
60
|
+
private wasm;
|
|
61
|
+
constructor(wasm: WasmModule);
|
|
62
|
+
/**
|
|
63
|
+
* Flatten all form fields across all pages.
|
|
64
|
+
* @param usage - 0 for normal display, 1 for print appearance
|
|
65
|
+
* @returns Number of pages successfully flattened
|
|
66
|
+
*/
|
|
67
|
+
flattenAll(docPtr: number, pageCount: number, usage?: number): number;
|
|
68
|
+
/**
|
|
69
|
+
* Flatten form fields on a single page.
|
|
70
|
+
*/
|
|
71
|
+
flattenPage(pagePtr: number, usage?: number): boolean;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Reads and verifies digital signatures from a PDF document.
|
|
76
|
+
* Uses PDFium's FPDFSignObj_* APIs to extract signature metadata.
|
|
77
|
+
*
|
|
78
|
+
* Note: Full cryptographic verification (validating the PKCS#7 signature
|
|
79
|
+
* against a certificate chain) requires additional crypto libraries.
|
|
80
|
+
* This class extracts the raw signature data and metadata for verification
|
|
81
|
+
* by external tools (e.g., node-forge, WebCrypto, or OpenSSL).
|
|
82
|
+
*/
|
|
83
|
+
declare class SignatureVerifier {
|
|
84
|
+
private wasm;
|
|
85
|
+
private bridge;
|
|
86
|
+
constructor(wasm: WasmModule, bridge: WasmBridge);
|
|
87
|
+
readSignatures(docPtr: number): SignatureData[];
|
|
88
|
+
/**
|
|
89
|
+
* Verify a signature's integrity.
|
|
90
|
+
* Performs basic byte-range validation and returns extracted metadata.
|
|
91
|
+
* For full PKI verification, use the raw `contents` with a crypto library.
|
|
92
|
+
*/
|
|
93
|
+
verify(docPtr: number, sigIndex: number, documentBytes: Uint8Array): Promise<SignatureVerificationResult>;
|
|
94
|
+
private _readSignature;
|
|
95
|
+
private _parseByteRange;
|
|
96
|
+
/**
|
|
97
|
+
* Validates that the byte ranges cover the expected portions of the document
|
|
98
|
+
* (everything except the signature contents hex string).
|
|
99
|
+
*/
|
|
100
|
+
private _validateByteRange;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export { AnnotationData, AnnotationReader, AnnotationWriter, CreateAnnotationOptions, FormFieldData, FormFiller, FormFlattener, FormReader, SignatureData, SignatureVerificationResult, SignatureVerifier };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { W as WasmModule, a as WasmBridge, A as AnnotationData, C as CreateAnnotationOptions, F as FormFieldData, S as SignatureData, b as SignatureVerificationResult } from './lite-CMz-Yosm.js';
|
|
2
|
+
export { c as AnnotationColor, d as AnnotationRect, e as AnnotationType, f as AttachmentPoint, g as CharBox, h as FLATTEN_USAGE, i as FormFieldType, L as LinkExtractor, j as LinkInfo, O as OpenOptions, k as OutlineExtractor, l as OutlineItem, P as PDFDocument, m as PDFMetadata, n as PDFNovaConfig, o as PDFPage, p as PDFPermissions, q as PDFWorker, r as PageRenderer, R as RENDER_FLAG, s as RenderOptions, t as SearchEngine, u as SearchOptions, v as SearchResult, T as TextExtractor, w as TextLayerBuilder, x as TextRect, y as TextSpan, V as VirtualRenderer, z as VirtualRendererOptions, B as WasmLoader, D as WasmTier, E as WorkerPool, G as getTier, H as isFullTier } from './lite-CMz-Yosm.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Reads annotations from a PDF page using PDFium's FPDFAnnot_* APIs.
|
|
6
|
+
*/
|
|
7
|
+
declare class AnnotationReader {
|
|
8
|
+
private wasm;
|
|
9
|
+
private bridge;
|
|
10
|
+
constructor(wasm: WasmModule, bridge: WasmBridge);
|
|
11
|
+
readAnnotations(pagePtr: number): AnnotationData[];
|
|
12
|
+
private _readAnnotation;
|
|
13
|
+
private _getRect;
|
|
14
|
+
private _getColor;
|
|
15
|
+
private _getAttachmentPoints;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Creates and modifies annotations on PDF pages using PDFium's FPDFAnnot_* APIs.
|
|
20
|
+
*/
|
|
21
|
+
declare class AnnotationWriter {
|
|
22
|
+
private wasm;
|
|
23
|
+
private bridge;
|
|
24
|
+
constructor(wasm: WasmModule, bridge: WasmBridge);
|
|
25
|
+
addAnnotation(pagePtr: number, options: CreateAnnotationOptions): void;
|
|
26
|
+
removeAnnotation(pagePtr: number, index: number): void;
|
|
27
|
+
private _setRect;
|
|
28
|
+
private _setColor;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Reads form fields from all pages of a PDF document.
|
|
33
|
+
* Iterates through annotations of type Widget to find form fields.
|
|
34
|
+
*/
|
|
35
|
+
declare class FormReader {
|
|
36
|
+
private wasm;
|
|
37
|
+
private bridge;
|
|
38
|
+
constructor(wasm: WasmModule, bridge: WasmBridge);
|
|
39
|
+
readAllFields(docPtr: number, formHandle: number, pageCount: number): FormFieldData[];
|
|
40
|
+
private _readPageFields;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Fills form field values programmatically.
|
|
45
|
+
* Finds the matching field by name across all pages and sets its value.
|
|
46
|
+
*/
|
|
47
|
+
declare class FormFiller {
|
|
48
|
+
private wasm;
|
|
49
|
+
private bridge;
|
|
50
|
+
constructor(wasm: WasmModule, bridge: WasmBridge);
|
|
51
|
+
setFieldValue(docPtr: number, formHandle: number, pageCount: number, fieldName: string, value: string): boolean;
|
|
52
|
+
private _setFieldOnPage;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Flattens form fields into static page content.
|
|
57
|
+
* After flattening, form fields become non-interactive rendered graphics.
|
|
58
|
+
*/
|
|
59
|
+
declare class FormFlattener {
|
|
60
|
+
private wasm;
|
|
61
|
+
constructor(wasm: WasmModule);
|
|
62
|
+
/**
|
|
63
|
+
* Flatten all form fields across all pages.
|
|
64
|
+
* @param usage - 0 for normal display, 1 for print appearance
|
|
65
|
+
* @returns Number of pages successfully flattened
|
|
66
|
+
*/
|
|
67
|
+
flattenAll(docPtr: number, pageCount: number, usage?: number): number;
|
|
68
|
+
/**
|
|
69
|
+
* Flatten form fields on a single page.
|
|
70
|
+
*/
|
|
71
|
+
flattenPage(pagePtr: number, usage?: number): boolean;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Reads and verifies digital signatures from a PDF document.
|
|
76
|
+
* Uses PDFium's FPDFSignObj_* APIs to extract signature metadata.
|
|
77
|
+
*
|
|
78
|
+
* Note: Full cryptographic verification (validating the PKCS#7 signature
|
|
79
|
+
* against a certificate chain) requires additional crypto libraries.
|
|
80
|
+
* This class extracts the raw signature data and metadata for verification
|
|
81
|
+
* by external tools (e.g., node-forge, WebCrypto, or OpenSSL).
|
|
82
|
+
*/
|
|
83
|
+
declare class SignatureVerifier {
|
|
84
|
+
private wasm;
|
|
85
|
+
private bridge;
|
|
86
|
+
constructor(wasm: WasmModule, bridge: WasmBridge);
|
|
87
|
+
readSignatures(docPtr: number): SignatureData[];
|
|
88
|
+
/**
|
|
89
|
+
* Verify a signature's integrity.
|
|
90
|
+
* Performs basic byte-range validation and returns extracted metadata.
|
|
91
|
+
* For full PKI verification, use the raw `contents` with a crypto library.
|
|
92
|
+
*/
|
|
93
|
+
verify(docPtr: number, sigIndex: number, documentBytes: Uint8Array): Promise<SignatureVerificationResult>;
|
|
94
|
+
private _readSignature;
|
|
95
|
+
private _parseByteRange;
|
|
96
|
+
/**
|
|
97
|
+
* Validates that the byte ranges cover the expected portions of the document
|
|
98
|
+
* (everything except the signature contents hex string).
|
|
99
|
+
*/
|
|
100
|
+
private _validateByteRange;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
export { AnnotationData, AnnotationReader, AnnotationWriter, CreateAnnotationOptions, FormFieldData, FormFiller, FormFlattener, FormReader, SignatureData, SignatureVerificationResult, SignatureVerifier };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { SignatureVerifier } from './chunk-X53667JS.mjs';
|
|
2
|
+
import { setTier } from './chunk-2OWW5BYD.mjs';
|
|
3
|
+
export { LinkExtractor, OutlineExtractor, PDFDocument, PDFPage, PDFWorker, PageRenderer, SearchEngine, TextExtractor, TextLayerBuilder, VirtualRenderer, WasmLoader, WorkerPool, getTier, isFullTier } from './chunk-2OWW5BYD.mjs';
|
|
4
|
+
export { AnnotationReader } from './chunk-VRJQZOCH.mjs';
|
|
5
|
+
export { AnnotationWriter } from './chunk-I7OBHZLB.mjs';
|
|
6
|
+
export { FormReader } from './chunk-FD5RTJ5W.mjs';
|
|
7
|
+
export { AnnotationType, FLATTEN_USAGE, FormFieldType, RENDER_FLAG } from './chunk-G7575D5X.mjs';
|
|
8
|
+
export { FormFiller } from './chunk-XEHKVFPJ.mjs';
|
|
9
|
+
export { FormFlattener } from './chunk-FO3DQLVB.mjs';
|
|
10
|
+
|
|
11
|
+
// src/index.ts
|
|
12
|
+
setTier("full");
|
|
13
|
+
//# sourceMappingURL=index.mjs.map
|
|
14
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;AAgDA,OAAA,CAAQ,MAAM,CAAA","file":"index.mjs","sourcesContent":["export { PDFDocument } from './document/PDFDocument';\nexport { PDFPage } from './document/PDFPage';\nexport { PageRenderer } from './document/PageRenderer';\nexport { VirtualRenderer } from './document/VirtualRenderer';\nexport { TextExtractor } from './text/TextExtractor';\nexport { TextLayerBuilder } from './text/TextLayerBuilder';\nexport { SearchEngine } from './text/SearchEngine';\nexport { OutlineExtractor } from './navigation/OutlineExtractor';\nexport { LinkExtractor } from './navigation/LinkExtractor';\nexport { AnnotationReader } from './annotations/AnnotationReader';\nexport { AnnotationWriter } from './annotations/AnnotationWriter';\nexport { FormReader } from './forms/FormReader';\nexport { FormFiller } from './forms/FormFiller';\nexport { FormFlattener } from './forms/FormFlattener';\nexport { SignatureVerifier } from './signatures/SignatureVerifier';\nexport { PDFWorker } from './worker/PDFWorker';\nexport { WorkerPool } from './worker/WorkerPool';\nexport { WasmLoader } from './core/WasmLoader';\nexport { getTier, isFullTier } from './capabilities';\n\nexport type {\n PDFMetadata,\n PDFPermissions,\n RenderOptions,\n TextSpan,\n CharBox,\n SearchResult,\n SearchOptions,\n TextRect,\n OutlineItem,\n LinkInfo,\n OpenOptions,\n PDFNovaConfig,\n VirtualRendererOptions,\n WasmTier,\n AnnotationData,\n AnnotationColor,\n AnnotationRect,\n AttachmentPoint,\n CreateAnnotationOptions,\n FormFieldData,\n SignatureData,\n SignatureVerificationResult,\n} from './types';\n\nexport { RENDER_FLAG, AnnotationType, FormFieldType, FLATTEN_USAGE } from './types';\n\nimport { setTier } from './capabilities';\nsetTier('full');\n"]}
|