Dalam artikel ini, kami akan membincangkan cara menukar halaman PDF kepada imej menggunakan Node.js. Ini boleh berguna untuk menjana lakaran kecil atau mengekstrak kandungan visual daripada fail PDF. Kami akan menggunakan perpustakaan pdfjs-dist untuk memuatkan dan memaparkan halaman PDF dan kanvas untuk membuat penimbal imej.
Prasyarat
Sebelum bermula, anda perlu memasang pakej yang diperlukan:
npm pasang pdfjs-dist canvas
Kod untuk Menukar Halaman PDF kepada Imej dan Menyimpan Setempat:
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<void>} 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 <= pdfDocument.numPages; i++) { const page = await pdfDocument.getPage(i); // Render the page as an image and save it const imageBuffer = await renderPageToImage(page); // Save the image to the output directory const imagePath = path.join(outputDir, `page_${i}.jpg`); fs.writeFileSync(imagePath, imageBuffer); console.log(`Saved: ${imagePath}`); } } catch (error) { console.error('Error converting PDF to images:', error); } } /** * Renders a single PDF page to an image buffer. * * @param {PDFPageProxy} page - The PDF.js page object. * @returns {Promise<Buffer>} 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');
Penjelasan Kod
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);
Kesimpulan:
Pendekatan ini berfungsi dengan cekap untuk menukar PDF kepada imej, membolehkan anda memproses atau menggambarkan kandungan PDF. Untuk imej berkualiti tinggi, kami menskalakan kanvas kepada 2x. Ini boleh dilaraskan dengan mudah berdasarkan keperluan anda.
Saya harap ini membantu! Jangan ragu untuk menyesuaikan kod mengikut keperluan anda.
Atas ialah kandungan terperinci Cara Menukar Halaman PDF kepada Imej dalam Node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!