- 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)
52 lines
1.3 KiB
TypeScript
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'}`);
|
|
}
|
|
}
|
|
|
|
|