Cancel PDF reading and OCR when the offer assistant closes
This commit is contained in:
@@ -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?.(); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user