diff --git a/packages/ragmir-core/src/ocr.test.ts b/packages/ragmir-core/src/ocr.test.ts index 71fe01e..9f09d2c 100644 --- a/packages/ragmir-core/src/ocr.test.ts +++ b/packages/ragmir-core/src/ocr.test.ts @@ -109,6 +109,22 @@ describe("PDF OCR onboarding", () => { ).resolves.toBe("Synthetic OCR text from Tesseract\n") }) + it("should keep an empty OCR payload when the requested page has no text", async () => { + const root = await createTempRoot("ragmir-ocr-tesseract-empty-") + const binDir = await createFakeTools(root, { + tesseract: true, + pdftoppm: true, + emptyTesseractOutput: true, + }) + process.env.PATH = binDir + const input = path.join(root, "scan.pdf") + await writeFile(input, "synthetic PDF fixture") + + await expect( + extractPdfPage({ engine: "tesseract", input, page: 2, language: "eng" }), + ).resolves.toBe("") + }) + it("should extract multiple PDF pages through one bounded Tesseract batch", async () => { const root = await createTempRoot("ragmir-ocr-tesseract-batch-") const binDir = await createFakeTools(root, { tesseract: true, pdftoppm: true }) @@ -186,7 +202,12 @@ async function createTempRoot(prefix: string): Promise { async function createFakeTools( root: string, - tools: { ocrmypdf?: boolean; tesseract?: boolean; pdftoppm?: boolean }, + tools: { + ocrmypdf?: boolean + tesseract?: boolean + pdftoppm?: boolean + emptyTesseractOutput?: boolean + }, ): Promise { const binDir = path.join(root, "bin") await mkdir(binDir, { recursive: true }) @@ -200,7 +221,7 @@ if (args.includes("--list-langs")) { process.stdout.write("List of available languages (2):\\neng\\nfra\\n") } else if (args.includes("stdout")) { const pages = readFileSync(args[0], "utf8").trim().split("\\n").filter(Boolean) - process.stdout.write(pages.map(() => "Synthetic OCR text from Tesseract\\n").join("\\f") + "\\f") + process.stdout.write(${tools.emptyTesseractOutput ? '""' : 'pages.map(() => "Synthetic OCR text from Tesseract\\n").join("\\f") + "\\f"'}) } else { process.stdout.write("tesseract 5.5.0\\n") }`, diff --git a/packages/ragmir-core/src/ocr.ts b/packages/ragmir-core/src/ocr.ts index d7bfbf4..904a84b 100644 --- a/packages/ragmir-core/src/ocr.ts +++ b/packages/ragmir-core/src/ocr.ts @@ -375,7 +375,7 @@ async function extractWithTesseract(options: { function pairOcrPageText(pages: number[], output: string): Array<{ page: number; text: string }> { const pageTexts = output.replace(/\r\n?/gu, "\n").split("\f") - if (pageTexts.at(-1) === "") { + if (pageTexts.length === pages.length + 1 && pageTexts.at(-1) === "") { pageTexts.pop() } if (pageTexts.length !== pages.length) {