| | import * as pdfjsLib from 'pdfjs-dist'; |
| |
|
| | |
| | pdfjsLib.GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/${pdfjsLib.version}/pdf.worker.min.js`; |
| |
|
| | |
| | |
| | |
| | |
| | |
| | export async function pdfToImages(file) { |
| | const images = []; |
| | const arrayBuffer = await file.arrayBuffer(); |
| | const pdf = await pdfjsLib.getDocument({ data: arrayBuffer }).promise; |
| |
|
| | for (let pageNum = 1; pageNum <= pdf.numPages; pageNum++) { |
| | const page = await pdf.getPage(pageNum); |
| | const viewport = page.getViewport({ scale: 2.0 }); |
| | |
| | const canvas = document.createElement('canvas'); |
| | const context = canvas.getContext('2d'); |
| | canvas.height = viewport.height; |
| | canvas.width = viewport.width; |
| |
|
| | await page.render({ |
| | canvasContext: context, |
| | viewport: viewport |
| | }).promise; |
| |
|
| | images.push({ |
| | dataUrl: canvas.toDataURL('image/jpeg', 0.95), |
| | pageNumber: pageNum |
| | }); |
| | } |
| |
|
| | return images; |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | export function imageToDataUrl(file) { |
| | return new Promise((resolve, reject) => { |
| | const reader = new FileReader(); |
| | reader.onload = (e) => resolve(e.target.result); |
| | reader.onerror = reject; |
| | reader.readAsDataURL(file); |
| | }); |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | export async function convertFileToImages(file) { |
| | const fileType = file.type; |
| | |
| | if (fileType === 'application/pdf') { |
| | const pdfImages = await pdfToImages(file); |
| | return pdfImages.map(img => ({ |
| | dataUrl: img.dataUrl, |
| | filename: `${file.name}_page_${img.pageNumber}`, |
| | pageNumber: img.pageNumber, |
| | originalFile: file.name |
| | })); |
| | } else if (fileType.startsWith('image/')) { |
| | const dataUrl = await imageToDataUrl(file); |
| | return [{ |
| | dataUrl, |
| | filename: file.name, |
| | pageNumber: 1, |
| | originalFile: file.name |
| | }]; |
| | } else { |
| | throw new Error('Unsupported file type. Please upload an image or PDF file.'); |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| | |
| | |
| | export function dataUrlToBlob(dataUrl) { |
| | const arr = dataUrl.split(','); |
| | const mime = arr[0].match(/:(.*?);/)[1]; |
| | const bstr = atob(arr[1]); |
| | let n = bstr.length; |
| | const u8arr = new Uint8Array(n); |
| | while (n--) { |
| | u8arr[n] = bstr.charCodeAt(n); |
| | } |
| | return new Blob([u8arr], { type: mime }); |
| | } |
| |
|