"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment convertir des pages PDF en images dans Node.js

Comment convertir des pages PDF en images dans Node.js

Publié le 2024-11-07
Parcourir:363

How to Convert PDF Pages to Images in Node.js

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 installer le canevas pdfjs-dist

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} 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 } 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

  1. Charger le PDF : nous utilisons pdfjs-dist pour charger un fichier PDF à partir d'un tampon.
const loadingTask = pdfjs.getDocument({ data: pdfBuffer });
const pdfDocument = await loadingTask.promise;
  1. Rendu chaque page : pour chaque page du PDF, nous la rendons sur un canevas à l'aide des méthodes getPage et render de pdfjs-dist.
const page = await pdfDocument.getPage(pageNumber);
const renderContext = {
  canvasContext: context,
  viewport: viewport,
};
await page.render(renderContext).promise;
  1. Enregistrer l'image localement : une fois la page rendue sur le canevas, nous enregistrons le tampon d'image au format JPEG à l'aide du module fs de Node.js.
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.

Déclaration de sortie Cet article est reproduit sur : https://dev.to/yashnarkhedkar/how-to-convert-pdf-pages-to-images-in-nodejs-2a6k?1 En cas de violation, veuillez contacter [email protected] pour le supprimer
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3