Как обеспечить сжатие pdf файла средствами javascript?

Пользователь

от narciso , в категории: JavaScript , 9 месяцев назад

Как обеспечить сжатие pdf файла средствами javascript?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от brenna , 9 месяцев назад

@narciso 

Для сжатия PDF-файла с использованием JavaScript вы можете использовать библиотеки, такие как PDF.js или PDF-LIB.

  1. Используя PDF.js: Загрузите PDF.js с официального репозитория: https://github.com/mozilla/pdf.js Разархивируйте скачанный файл и скопируйте папку build в ваш проект. В HTML-странице добавьте следующий код: // Загрузка и обработка файла PDF const loadingTask = pdfjsLib.getDocument('path/to/file.pdf'); loadingTask.promise.then(function(pdf) { // Создание нового PDF-документа const compressedPdf = pdfjsLib.getDocument(); // Определение качества сжатия (чем меньше значение, тем сильнее сжатие) const compressionQuality = 0.7; // Обход всех страниц и сжатие изображений for (let i = 1; i <= pdf.numPages; i++) { pdf.getPage(i).then(function(page) { const viewport = page.getViewport({ scale: 1.0 }); const canvas = document.createElement('canvas'); const context = canvas.getContext('2d'); canvas.height = viewport.height; canvas.width = viewport.width; const renderContext = { canvasContext: context, viewport: viewport, }; page.render(renderContext).promise.then(function() { // Получение сжатого изображения в формате JPEG const imageData = canvas.toDataURL('image/jpeg', compressionQuality); // Создание новой страницы в сжатой версии PDF compressedPdf.addPage(viewport.size); const compressedPage = compressedPdf.getPage(i); const compressedCanvas = document.createElement('canvas'); compressedCanvas.height = viewport.height; compressedCanvas.width = viewport.width; const compressedContext = compressedCanvas.getContext('2d'); const compressedImage = new Image(); compressedImage.onload = function() { compressedContext.drawImage(compressedImage, 0, 0); compressedPage.render({ canvasContext: compressedContext }).promise.then(function() { // Если это последняя страница, сохраняем сжатый PDF-файл if (i === pdf.numPages) { compressedPdf.save('path/to/compressed-file.pdf'); } }); }; compressedImage.src = imageData; }); }); } });
  2. Используя PDF-LIB: Установите PDF-LIB с помощью npm: npm install pdf-lib В JavaScript-файле добавьте следующий код: import { PDFDocumentFactory, PDFDocumentWriter, drawText, drawRectangle } from 'pdf-lib'; // Загрузка и обработка файла PDF const fileData = fs.readFileSync('path/to/file.pdf'); const pdfDoc = await PDFDocumentFactory.load(fileData); // Определение качества сжатия (чем меньше значение, тем сильнее сжатие) const compressionQuality = 0.7; const pages = pdfDoc.getPages(); for (let i = 0; i < pages.length; i++) { const page = pages[i]; // Получение данных изображения в формате JPEG const imageData = await page.asPNG({ drawBackground: drawRectangle }); // Создание новой страницы с сжатым изображением const compressedPage = pdfDoc.createPageFromPNGData(imageData); // Запись сжатой страницы в документ PDF pdfDoc.removePage(i); pdfDoc.insertPage(i, compressedPage); } // Сохранение сжатого PDF-файла const saveOptions = { useCompression: true, compressQuality: compressionQuality }; const savedData = await PDFDocumentWriter.saveToBytes(pdfDoc, saveOptions); fs.writeFileSync('path/to/compressed-file.pdf', savedData);


Пожалуйста, обратите внимание, что вы должны заменить path/to/file.pdf на фактический путь к исходному PDF-файлу и path/to/compressed-file.pdf на путь, по которому вы хотите сохранить сжатый PDF-файл. Также убедитесь, что у вас установлены все зависимости, необходимые для использования указанных библиотек.

Пользователь

от ian.heidenreich , 13 дней назад

@narciso 

Большое спасибо за подробное объяснение! Такой подход позволяет сжимать PDF-файлы без необходимости загрузки и использования сторонних онлайн-сервисов. Обе предложенные библиотеки - PDF.js и PDF-LIB - предоставляют мощные возможности для работы с PDF-файлами непосредственно на стороне клиента с использованием JavaScript. Это полезное решение для автоматизации процесса сжатия PDF-файлов и управления качеством изображений в них.