/** * Module de conversion PDF vers images pour l'OCR */ const pdf = require('pdf-poppler') const fs = require('fs') const path = require('path') /** * Convertit un PDF en images pour l'OCR * @param {string} pdfPath - Chemin vers le fichier PDF * @param {string} outputDir - Répertoire de sortie (optionnel) * @returns {Promise} - Tableau des chemins des images générées */ async function convertPdfToImages(pdfPath, outputDir = null) { console.log(`[PDF-CONVERTER] Début de la conversion PDF: ${path.basename(pdfPath)}`) try { // Répertoire de sortie par défaut if (!outputDir) { outputDir = path.dirname(pdfPath) } // Configuration de la conversion const options = { format: 'png', out_dir: outputDir, out_prefix: 'page', page: null, // Toutes les pages scale: 2000 // Résolution élevée } console.log(`[PDF-CONVERTER] Configuration: Format=PNG, Scale=2000`) // Conversion de toutes les pages const results = await pdf.convert(pdfPath, options) console.log(`[PDF-CONVERTER] Conversion terminée: ${results.length} page(s) convertie(s)`) // Retourner les chemins des images générées const imagePaths = results.map((result, index) => { const imagePath = path.join(outputDir, `page-${index + 1}.png`) console.log(`[PDF-CONVERTER] Page ${index + 1}: ${imagePath}`) return imagePath }) return imagePaths } catch (error) { console.error(`[PDF-CONVERTER] Erreur lors de la conversion:`, error.message) throw error } } /** * Convertit un PDF en une seule image (première page) * @param {string} pdfPath - Chemin vers le fichier PDF * @param {string} outputPath - Chemin de sortie de l'image (optionnel) * @returns {Promise} - Chemin de l'image générée */ async function convertPdfToSingleImage(pdfPath, outputPath = null) { console.log(`[PDF-CONVERTER] Conversion PDF vers image unique: ${path.basename(pdfPath)}`) try { // Chemin de sortie par défaut if (!outputPath) { const baseName = path.basename(pdfPath, '.pdf') const dirName = path.dirname(pdfPath) outputPath = path.join(dirName, `${baseName}_converted.png`) } // Configuration pour une seule page const options = { format: 'png', out_dir: path.dirname(outputPath), out_prefix: path.basename(outputPath, '.png'), page: 1, // Première page seulement scale: 2000 } // Conversion de la première page seulement const results = await pdf.convert(pdfPath, options) console.log(`[PDF-CONVERTER] Image générée: ${outputPath}`) return outputPath } catch (error) { console.error(`[PDF-CONVERTER] Erreur lors de la conversion:`, error.message) throw error } } /** * Nettoie les fichiers temporaires générés * @param {Array} filePaths - Chemins des fichiers à supprimer */ async function cleanupTempFiles(filePaths) { console.log(`[PDF-CONVERTER] Nettoyage de ${filePaths.length} fichier(s) temporaire(s)`) for (const filePath of filePaths) { try { if (fs.existsSync(filePath)) { await fs.promises.unlink(filePath) console.log(`[PDF-CONVERTER] Fichier supprimé: ${path.basename(filePath)}`) } } catch (error) { console.warn(`[PDF-CONVERTER] Erreur lors de la suppression de ${filePath}: ${error.message}`) } } } module.exports = { convertPdfToImages, convertPdfToSingleImage, cleanupTempFiles }