В этой статье мы расскажем, как конвертировать страницы 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');
Пояснение кода
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);
Заключение:
Этот подход эффективно работает для преобразования PDF-файлов в изображения, позволяя обрабатывать или визуализировать PDF-контент. Для получения качественных изображений мы масштабируем холст в 2 раза. Это можно легко настроить в соответствии с вашими потребностями.
Надеюсь, это поможет! Не стесняйтесь адаптировать код в соответствии с вашими требованиями.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3