espace-paie-odentas/lib/odentas-sign/pdf-converter.ts
odentas 59749d481b feat: Migration Cloudinary vers Poppler pour conversion PDF→JPEG
- Remplacer Cloudinary (US) par solution 100% AWS eu-west-3
- Lambda odentas-sign-pdf-converter avec pdftoppm
- Lambda Layer poppler-utils v5 avec dépendances complètes
- Trigger S3 ObjectCreated pour conversion automatique
- Support multi-pages validé (PDF 3 pages)
- Stockage images dans S3 odentas-docs
- PDFImageViewer pour affichage images converties
- Conformité RGPD garantie (données EU uniquement)
2025-10-28 10:22:45 +01:00

52 lines
1.3 KiB
TypeScript

import { pdf } from 'pdf-to-img';
interface PageImage {
pageNumber: number;
imageBase64: string;
width: number;
height: number;
}
/**
* Convertit un PDF (buffer) en images JPEG
* Solution ultra simple avec pdf-to-img
*/
export async function convertPdfToJpegImages(
pdfBuffer: Buffer,
targetWidth: number = 1400
): Promise<PageImage[]> {
try {
console.log('[PDF Converter] Début conversion, taille buffer:', pdfBuffer.length);
const pages: PageImage[] = [];
// Convertir le PDF en images
const document = await pdf(pdfBuffer, {
scale: 2.0, // Haute résolution
});
let pageNum = 1;
for await (const page of document) {
// page est déjà un Buffer PNG
const imageBase64 = `data:image/png;base64,${page.toString('base64')}`;
pages.push({
pageNumber: pageNum,
imageBase64,
width: targetWidth,
height: Math.round(targetWidth * 1.414), // Ratio A4 approximatif
});
console.log(`[PDF Converter] Page ${pageNum} convertie`);
pageNum++;
}
console.log(`[PDF Converter] ${pages.length} page(s) converties avec succès`);
return pages;
} catch (error) {
console.error('[PDF Converter] Erreur:', error);
throw new Error(`Erreur de conversion PDF: ${error instanceof Error ? error.message : 'Erreur inconnue'}`);
}
}