-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.ts
37 lines (27 loc) · 1016 Bytes
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import pdfJS from 'pdfjs-dist/legacy/build/pdf.js'
import type * as types from './types'
const DEFAULT_OPTIONS: types.ExtractFormFieldOptions = Object.freeze({
useFieldName: false
})
async function getPdfFieldObjects(
sourcePDF: string
): Promise<types.PdfFieldObjects> {
const pdfDocument = await pdfJS.getDocument(sourcePDF).promise
const pdfFields =
(await pdfDocument.getFieldObjects()) as types.PdfFieldObjects
return pdfFields
}
export async function extractFormFields(
sourcePDF: string,
extractOptions?: types.ExtractFormFieldOptions
): Promise<Record<string, string>> {
const options = Object.assign({}, DEFAULT_OPTIONS, extractOptions)
const fieldObjects = await getPdfFieldObjects(sourcePDF)
const fields: Record<string, string> = {}
for (const [fieldKey, fieldObject] of Object.entries(fieldObjects)) {
const key = options.useFieldName! ? fieldObject[0].name : fieldKey
fields[key] = fieldObject[0].value
}
return fields
}
export default extractFormFields