// PDF text extraction using pdfjs-dist legacy build (Node.js compatible, no canvas/DOMMatrix) // Force Next.js file tracer to include the worker file in standalone builds import 'pdfjs-dist/legacy/build/pdf.worker.mjs'; /** * Extract all text from a PDF buffer. * Uses pdfjs-dist legacy build which works in Node.js without canvas or DOM APIs. */ export async function extractTextFromPdf(buffer: Buffer): Promise { const pdfjsLib = await import('pdfjs-dist/legacy/build/pdf.mjs'); // Resolve the worker path at runtime so pdfjs can find it in standalone builds const { createRequire } = await import('module'); const require = createRequire(import.meta.url ?? __filename); pdfjsLib.GlobalWorkerOptions.workerSrc = require.resolve( 'pdfjs-dist/legacy/build/pdf.worker.mjs', ); const data = new Uint8Array(buffer); const doc = await pdfjsLib.getDocument({ data, useSystemFonts: true, isEvalSupported: false, }).promise; const pages: string[] = []; for (let i = 1; i <= doc.numPages; i++) { const page = await doc.getPage(i); const content = await page.getTextContent(); const pageText = content.items .filter((item) => 'str' in item) .map((item) => (item as { str: string }).str) .join(' '); pages.push(pageText); } doc.destroy(); return pages.join('\n'); }