Cancel PDF reading and OCR when the offer assistant closes

This commit is contained in:
2026-09-06 10:24:07 +03:00
parent d534ea20b9
commit 3ad9348c20
6 changed files with 109 additions and 25 deletions
+9 -5
View File
@@ -1,19 +1,23 @@
import {awaitWithAbort} from './abortable.js';
/** Read every requested page in order, retaining text/OCR provenance per page. */
export async function readPdfPages(doc, {maxPages=Infinity, ocrPage, forceOcr=false, onProgress}={}) {
export async function readPdfPages(doc, {maxPages=Infinity, ocrPage, forceOcr=false, onProgress, signal}={}) {
if (!(maxPages === Infinity || (Number.isInteger(maxPages) && maxPages > 0))) throw new Error('Geçersiz sayfa sınırı.');
signal?.throwIfAborted();
const pages = Math.min(doc.numPages,maxPages);
const results=[];
for(let number=1;number<=pages;number++) {
signal?.throwIfAborted();
onProgress?.({sayfa:number,toplam:pages});
const page=await doc.getPage(number);
const page=await awaitWithAbort(doc.getPage(number).then(page=>{if(signal?.aborted){page.cleanup?.();signal.throwIfAborted();}return page;}),signal);
try {
const content=await page.getTextContent();
const content=await awaitWithAbort(page.getTextContent(),signal);
let text=content.items.map(item=>item.str + (item.hasEOL ? '\n' : ' ')).join('').trim();
let method='text';
if(ocrPage && (forceOcr || text.replace(/\s/g,'').length < 100)) {
try { text=await ocrPage(page); method='ocr'; }
catch { throw new Error(`${number}. sayfada OCR tamamlanamadı. Okunabilir belgeyle yeniden deneyin.`); }
try { text=await awaitWithAbort(ocrPage(page),signal); method='ocr'; }
catch { signal?.throwIfAborted(); throw new Error(`${number}. sayfada OCR tamamlanamadı. Okunabilir belgeyle yeniden deneyin.`); }
}
signal?.throwIfAborted();
results.push({page:number,text,method});
} finally { page.cleanup?.(); }
}