import assert from "node:assert/strict"; import { readFile } from "node:fs/promises"; import pdf from "pdf-parse"; interface PdfPageData { getTextContent(options: { normalizeWhitespace: boolean; disableCombineTextItems: boolean }): Promise<{ items: Array<{ str?: string }>; }>; } const fixtureUrl = new URL("../tests/fixtures/ocr/native-three-pages.pdf", import.meta.url); const input = process.argv[2] ? new URL(`file://${process.argv[2]}`) : fixtureUrl; const nodeMajor = Number.parseInt(process.versions.node.split(".")[0] ?? "0", 10); assert.ok(nodeMajor >= 22, `Node 22 or newer is required; received ${process.versions.node}`); const pages: Array<{ page: number; text: string }> = []; const bytes = Uint8Array.from(await readFile(input)); const result = await pdf(bytes as Buffer, { version: "v2.0.550", pagerender: async (pageData: PdfPageData) => { const textContent = await pageData.getTextContent({ normalizeWhitespace: false, disableCombineTextItems: false }); const text = textContent.items.flatMap((item) => item.str ?? []).join(" ").trim(); pages.push({ page: pages.length + 1, text }); return text; } }); assert.equal(result.numpages, pages.length); assert.deepEqual(pages, [ { page: 1, text: "Native page one." }, { page: 2, text: "" }, { page: 3, text: "Native page three." } ]); console.log(JSON.stringify({ node: process.versions.node, parser: `pdf-parse/pdfjs-${result.version}`, pages }));