import fs from 'fs' import path from 'path' import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs' if (typeof pdfjsLib.GlobalWorkerOptions !== 'undefined') { pdfjsLib.GlobalWorkerOptions.workerSrc = path.join( process.cwd(), 'node_modules/pdfjs-dist/legacy/build/pdf.worker.mjs' ) } interface ExtractedPage { pageNumber: number text: string } export interface ExtractedDocument { pages: ExtractedPage[] totalPages: number metadata: { title?: string; author?: string } } export class DocumentExtractionService { async extractPdf(filePath: string): Promise { const dataBuffer = fs.readFileSync(filePath) const doc = await pdfjsLib.getDocument({ data: new Uint8Array(dataBuffer), useSystemFonts: true, useWorkerFetch: false, isEvalSupported: false, }).promise const pages: ExtractedPage[] = [] for (let i = 1; i <= doc.numPages; i++) { const page = await doc.getPage(i) const content = await page.getTextContent() const text = content.items .map((item: any) => item.str) .join(' ') pages.push({ pageNumber: i, text }) } const metadata = await doc.getMetadata().catch(() => null) as any return { pages, totalPages: doc.numPages, metadata: { title: metadata?.info?.Title, author: metadata?.info?.Author, }, } } } export const documentExtractionService = new DocumentExtractionService()