upload stuff
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import { pdfToText } from 'pdftotext-wasm';
|
||||
import { pdfToText, splitPdfPages } from 'pdfconvert-wasm';
|
||||
|
||||
export async function extractPdfText(pdfSource, options = { layout: true }) {
|
||||
return pdfToText(pdfSource, options);
|
||||
}
|
||||
|
||||
export { pdfToText };
|
||||
export { pdfToText, splitPdfPages };
|
||||
|
||||
|
||||
@@ -1,36 +1,22 @@
|
||||
import * as pdfjsLib from 'pdfjs-dist';
|
||||
|
||||
// Tells Vite/Webpack to emit the worker script as an asset file locally
|
||||
pdfjsLib.GlobalWorkerOptions.workerSrc = new URL(
|
||||
'pdfjs-dist/build/pdf.worker.mjs',
|
||||
import.meta.url
|
||||
).toString();
|
||||
import { pdfToPng } from 'pdfconvert-wasm';
|
||||
|
||||
export async function generatePdfThumbnail(pdfSource, targetWidth = 200) {
|
||||
let loadingTask;
|
||||
if (pdfSource instanceof File || pdfSource instanceof Blob) {
|
||||
const arrayBuffer = await pdfSource.arrayBuffer();
|
||||
loadingTask = pdfjsLib.getDocument({ data: arrayBuffer });
|
||||
} else {
|
||||
loadingTask = pdfjsLib.getDocument(pdfSource);
|
||||
const images = await pdfToPng(pdfSource, {
|
||||
firstPage: 1,
|
||||
singleFile: true,
|
||||
scaleToX: targetWidth,
|
||||
});
|
||||
|
||||
if (!images || images.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const pdf = await loadingTask.promise;
|
||||
const page = await pdf.getPage(1);
|
||||
|
||||
const unscaledViewport = page.getViewport({ scale: 1 });
|
||||
const scale = targetWidth / unscaledViewport.width;
|
||||
const viewport = page.getViewport({ scale });
|
||||
|
||||
const canvas = document.createElement('canvas');
|
||||
const context = canvas.getContext('2d');
|
||||
canvas.width = Math.floor(viewport.width);
|
||||
canvas.height = Math.floor(viewport.height);
|
||||
|
||||
await page.render({
|
||||
canvasContext: context,
|
||||
viewport: viewport,
|
||||
}).promise;
|
||||
|
||||
return canvas.toDataURL('image/jpeg', 0.85);
|
||||
const blob = new Blob([images[0].data], { type: 'image/png' });
|
||||
return new Promise((resolve, reject) => {
|
||||
const reader = new FileReader();
|
||||
reader.onloadend = () => resolve(reader.result);
|
||||
reader.onerror = reject;
|
||||
reader.readAsDataURL(blob);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user