Dans cet article, nous expliquerons comment convertir des pages PDF en images à l'aide de Node.js. Cela peut être utile pour générer des vignettes ou extraire du contenu visuel à partir de fichiers PDF. Nous utiliserons la bibliothèque pdfjs-dist pour charger et restituer les pages PDF, et le canevas pour créer des tampons d'image.
Prérequis
Avant de commencer, vous devez installer les packages requis :
npm install pdfjs-dist canevas
Code pour convertir des pages PDF en images et enregistrer localement :
const fs = require('fs'); const path = require('path'); const pdfjs = require('pdfjs-dist/legacy/build/pdf.js'); const Canvas = require('canvas'); /** * Converts a PDF to images by rendering each page and saving them to a local directory. * * @param {Buffer} pdfBuffer - The PDF file as a buffer. * @param {string} outputDir - The directory where images will be saved. * @returns {Promise<void>} Resolves when all images are saved. */ async function convertPdfToImages(pdfBuffer, outputDir) { try { // Ensure the output directory exists if (!fs.existsSync(outputDir)) { fs.mkdirSync(outputDir, { recursive: true }); } // Load the original PDF using pdf.js const loadingTask = pdfjs.getDocument({ data: pdfBuffer }); const pdfDocument = await loadingTask.promise; // Loop through each page of the PDF for (let i = 1; i <= pdfDocument.numPages; i++) { const page = await pdfDocument.getPage(i); // Render the page as an image and save it const imageBuffer = await renderPageToImage(page); // Save the image to the output directory const imagePath = path.join(outputDir, `page_${i}.jpg`); fs.writeFileSync(imagePath, imageBuffer); console.log(`Saved: ${imagePath}`); } } catch (error) { console.error('Error converting PDF to images:', error); } } /** * Renders a single PDF page to an image buffer. * * @param {PDFPageProxy} page - The PDF.js page object. * @returns {Promise<Buffer>} The image as a buffer (JPEG format). */ async function renderPageToImage(page) { // Scale the page to 2x for a higher quality image output const viewport = page.getViewport({ scale: 2.0 }); const canvas = Canvas.createCanvas(viewport.width, viewport.height); const context = canvas.getContext('2d'); const renderContext = { canvasContext: context, viewport: viewport, }; // Render the PDF page to the canvas await page.render(renderContext).promise; // Convert the canvas content to a JPEG image buffer and return it return canvas.toBuffer('image/jpeg'); } // Example usage: // const pdfBuffer = fs.readFileSync('sample.pdf'); // convertPdfToImages(pdfBuffer, './output_images');
Explication du code
const loadingTask = pdfjs.getDocument({ data: pdfBuffer }); const pdfDocument = await loadingTask.promise;
const page = await pdfDocument.getPage(pageNumber); const renderContext = { canvasContext: context, viewport: viewport, }; await page.render(renderContext).promise;
fs.writeFileSync(imagePath, imageBuffer);
Conclusion :
Cette approche fonctionne efficacement pour convertir des PDF en images, vous permettant de traiter ou de visualiser le contenu PDF. Pour des images de haute qualité, nous redimensionnons la toile à 2x. Cela peut être facilement ajusté en fonction de vos besoins.
J'espère que cela vous aidera ! N'hésitez pas à adapter le code selon vos besoins.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!