33 lines
1006 B
JavaScript
33 lines
1006 B
JavaScript
const { createCanvas } = require('canvas');
|
|
const sharp = require('sharp');
|
|
const pdfjsLib = require('pdfjs-dist/legacy/build/pdf.js');
|
|
|
|
// Configure le worker pdfjs
|
|
pdfjsLib.GlobalWorkerOptions.workerSrc = require('pdfjs-dist/build/pdf.worker.min.js');
|
|
|
|
class PdfRenderer {
|
|
async loadPdf(pdfPath) {
|
|
const data = new Uint8Array(require('fs').readFileSync(pdfPath));
|
|
const loadingTask = pdfjsLib.getDocument({ data });
|
|
const pdf = await loadingTask.promise;
|
|
return { pdf, totalPages: pdf.numPages };
|
|
}
|
|
|
|
async renderPage(pdf, pageNumber) {
|
|
const page = await pdf.getPage(pageNumber);
|
|
const viewport = page.getViewport({ scale: 1.5 });
|
|
const canvas = createCanvas(viewport.width, viewport.height);
|
|
const context = canvas.getContext('2d');
|
|
|
|
await page.render({
|
|
canvasContext: context,
|
|
viewport,
|
|
}).promise;
|
|
|
|
const buffer = canvas.toBuffer('image/png');
|
|
return sharp(buffer).png({ quality: 90 }).toBuffer();
|
|
}
|
|
}
|
|
|
|
module.exports = PdfRenderer;
|