«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как конвертировать PDF-страницы в изображения в Node.js

Как конвертировать PDF-страницы в изображения в Node.js

Опубликовано 7 ноября 2024 г.
Просматривать:614

How to Convert PDF Pages to Images in Node.js

В этой статье мы расскажем, как конвертировать страницы PDF в изображения с помощью Node.js. Это может быть полезно для создания миниатюр или извлечения визуального контента из файлов PDF. Мы будем использовать библиотеку pdfjs-dist для загрузки и рендеринга PDF-страниц, а также Canvas для создания буферов изображений.

Предварительные условия
Прежде чем приступить к работе, вам необходимо установить необходимые пакеты:

npm установить холст pdfjs-dist

Код для преобразования страниц PDF в изображения и локального сохранения:

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

Пояснение кода

  1. Загрузить PDF-файл: мы используем pdfjs-dist для загрузки PDF-файла из буфера.
const loadingTask = pdfjs.getDocument({ data: pdfBuffer });
const pdfDocument = await loadingTask.promise;
  1. Рендеринг каждой страницы. Для каждой страницы PDF-файла мы визуализируем ее на холсте с помощью методов getPage и render из pdfjs-dist.
const page = await pdfDocument.getPage(pageNumber);
const renderContext = {
  canvasContext: context,
  viewport: viewport,
};
await page.render(renderContext).promise;
  1. Сохранить изображение локально: после отображения страницы на холсте мы сохраняем буфер изображения в формате JPEG с помощью модуля fs Node.js.
fs.writeFileSync(imagePath, imageBuffer);

Заключение:
Этот подход эффективно работает для преобразования PDF-файлов в изображения, позволяя обрабатывать или визуализировать PDF-контент. Для получения качественных изображений мы масштабируем холст в 2 раза. Это можно легко настроить в соответствии с вашими потребностями.

Надеюсь, это поможет! Не стесняйтесь адаптировать код в соответствии с вашими требованиями.

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/yashnakhedkar/how-to-convert-pdf-pages-to-images-in-nodejs-2a6k?1 Если есть какие-либо нарушения, пожалуйста, свяжитесь с [email protected] удалить его
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3