43 lines
1.3 KiB
JavaScript
43 lines
1.3 KiB
JavaScript
const { PDFDocument } = require('pdf-lib');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
/**
|
|
* Extracts the first two pages of a PDF and saves them as a new PDF file.
|
|
* We do this instead of backend image conversion because Node Canvas fails
|
|
* compilation on Windows 10/Node 24 environments without Visual Studio.
|
|
* The client will smoothly render this secure 2-page PDF into an image via Canvas.
|
|
*/
|
|
async function extractFirstTwoPages(inputPath, outputPath) {
|
|
try {
|
|
const existingPdfBytes = fs.readFileSync(inputPath);
|
|
const pdfDoc = await PDFDocument.load(existingPdfBytes);
|
|
|
|
// Create a new document
|
|
const newPdf = await PDFDocument.create();
|
|
|
|
// Determine how many pages to copy (max 2)
|
|
const pageCount = pdfDoc.getPageCount();
|
|
const pagesToCopy = Math.min(pageCount, 2);
|
|
|
|
const pageIndices = Array.from({ length: pagesToCopy }, (_, i) => i);
|
|
|
|
if (pageIndices.length > 0) {
|
|
const copiedPages = await newPdf.copyPages(pdfDoc, pageIndices);
|
|
copiedPages.forEach((page) => newPdf.addPage(page));
|
|
}
|
|
|
|
const newPdfBytes = await newPdf.save();
|
|
fs.writeFileSync(outputPath, newPdfBytes);
|
|
|
|
return true;
|
|
} catch (error) {
|
|
console.error('Error processing PDF:', error);
|
|
throw error;
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
extractFirstTwoPages
|
|
};
|