refactor: extract PDF rendering and storage logic into dedicated service classes
This commit is contained in:
32
src/services/PdfRenderer.js
Normal file
32
src/services/PdfRenderer.js
Normal file
@@ -0,0 +1,32 @@
|
||||
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;
|
||||
Reference in New Issue
Block a user