25 lines
996 B
JavaScript
25 lines
996 B
JavaScript
import fs from 'node:fs'
|
|
import { getDocument } from 'pdfjs-dist/legacy/build/pdf.mjs'
|
|
import { WorkerMessageHandler } from 'pdfjs-dist/legacy/build/pdf.worker.mjs'
|
|
import { parseEncodedVaccinationRecordMetadata } from '../../src/lib/vaccinationRecordMetadata.js'
|
|
|
|
globalThis.pdfjsWorker = { WorkerMessageHandler }
|
|
|
|
/**
|
|
* @param {string} filePath
|
|
* @returns {Promise<{ patientName: string, dateOfBirth: string, notes: string, rows: object[] }>}
|
|
*/
|
|
export async function parseVaccinationRecordPdf(filePath) {
|
|
const data = new Uint8Array(fs.readFileSync(filePath))
|
|
const doc = await getDocument({ data, useSystemFonts: true }).promise
|
|
const page = await doc.getPage(1)
|
|
const content = await page.getTextContent()
|
|
|
|
const textItems = content.items.map((item) => item.str)
|
|
const metadataText =
|
|
textItems.find((s) => s.startsWith('CTM_VR:')) ??
|
|
textItems.find((s) => s.includes('CTM_VR:')) ??
|
|
textItems.join('')
|
|
return parseEncodedVaccinationRecordMetadata(metadataText)
|
|
}
|