Files
GITLAB-Issue-Board-Discord/src/services/PdfRenderer.js

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;