Files
ihaleist/src/services/pdfText.js
T

53 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { readPdfPages } from './pdfDocumentReader.js';
async function openPdf(file) {
const pdfjs = await import('pdfjs-dist');
pdfjs.GlobalWorkerOptions.workerSrc = (await import('pdfjs-dist/build/pdf.worker.min.mjs?url')).default;
let task;
try {
task = pdfjs.getDocument({data:await file.arrayBuffer()});
return {doc:await task.promise,task};
}
catch(error) {
await task?.destroy();
if(error.name === 'InvalidPDFException') throw new Error('PDF dosyası bozuk veya geçerli PDF biçiminde değil.');
if(error.name === 'PasswordException') throw new Error('PDF parola korumalı; okunabilir bir kopyasını yükleyin.');
throw new Error('PDF okunamadı. Dosyayı kontrol edip yeniden deneyin.');
}
}
async function readPdf(file,{ocr=false,forceOcr=false,maxPages=Infinity,onProgress}={}) {
const {doc,task}=await openPdf(file);
let worker;
try {
const result=await readPdfPages(doc,{maxPages,forceOcr,onProgress,ocrPage:ocr ? async(page)=>{
if(!worker) {
const {createWorker}=await import('tesseract.js');
worker=await createWorker('tur');
}
const viewport=page.getViewport({scale:2});
const canvas=document.createElement('canvas');
canvas.width=viewport.width;canvas.height=viewport.height;
try {
await page.render({canvasContext:canvas.getContext('2d'),viewport}).promise;
return (await worker.recognize(canvas)).data.text;
} finally { canvas.width=0;canvas.height=0; }
} : undefined});
return result;
} finally {
try { if(worker) await worker.terminate(); }
finally { await task.destroy(); }
}
}
export const extractPdfText=(file,options={})=>readPdf(file,{...options,ocr:false});
export const ocrPdfText=(file,options={})=>readPdf(file,{...options,ocr:true,forceOcr:true});
export async function extractPlainText(file) {
return {text:(await file.text()).trim(),pageCount:1,usedPages:1,complete:true};
}
export async function extractText(file,{ocr=true,onProgress}={}) {
if((file.name || '').toLowerCase().endsWith('.pdf') || file.type==='application/pdf')
return readPdf(file,{ocr,onProgress});
return extractPlainText(file);
}