"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo convertir páginas PDF en imágenes en Node.js

Cómo convertir páginas PDF en imágenes en Node.js

Publicado el 2024-11-07
Navegar:857

How to Convert PDF Pages to Images in Node.js

En este artículo, cubriremos cómo convertir páginas PDF en imágenes usando Node.js. Esto puede resultar útil para generar miniaturas o extraer contenido visual de archivos PDF. Usaremos la biblioteca pdfjs-dist para cargar y renderizar páginas PDF y lienzo para crear buffers de imágenes.

Requisitos previos
Antes de comenzar, debe instalar los paquetes necesarios:

npm instala el lienzo pdfjs-dist

Código para convertir páginas PDF en imágenes y guardarlas localmente:

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');

Explicación del código

  1. Cargar el PDF: Usamos pdfjs-dist para cargar un archivo PDF desde un búfer.
const loadingTask = pdfjs.getDocument({ data: pdfBuffer });
const pdfDocument = await loadingTask.promise;
  1. Representar cada página: para cada página del PDF, la representamos en un lienzo usando los métodos getPage y render de pdfjs-dist.
const page = await pdfDocument.getPage(pageNumber);
const renderContext = {
  canvasContext: context,
  viewport: viewport,
};
await page.render(renderContext).promise;
  1. Guardar imagen localmente: una vez que la página se representa en el lienzo, guardamos el búfer de imagen en formato JPEG usando el módulo fs de Node.js.
fs.writeFileSync(imagePath, imageBuffer);

Conclusión:
Este enfoque funciona de manera eficiente para convertir archivos PDF en imágenes, lo que le permite procesar o visualizar contenido PDF. Para imágenes de alta calidad, escalamos el lienzo a 2x. Esto se puede ajustar fácilmente según tus necesidades.

¡Espero que esto ayude! No dude en adaptar el código según sus requisitos.

Declaración de liberación Este artículo se reproduce en: https://dev.to/yashnarkhedkar/how-to-convert-pdf-pages-to-images-in-nodejs-2a6k?1 Si hay alguna infracción, comuníquese con [email protected] para borrarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3