36 lines
1.4 KiB
TypeScript
36 lines
1.4 KiB
TypeScript
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 }));
|