feat(now supports pdf -> jpg): update

This commit is contained in:
2024-04-25 18:48:08 +02:00
parent fe6be928a9
commit d157a3acd9
6 changed files with 906 additions and 489 deletions

View File

@@ -183,18 +183,16 @@ export class SmartPdf {
};
}
public async mergePdfs(pdfArrayArg: plugins.tsclass.business.IPdf[]): Promise<IPdf> {
const merger = new plugins.pdfMerger();
for (const pdf of pdfArrayArg) {
merger.add(Buffer.from(pdf.buffer));
public async mergePdfs(inputPdfBuffers: Uint8Array[]): Promise<Uint8Array> {
const mergedPdf = await plugins.pdfLib.PDFDocument.create();
for (const pdfBytes of inputPdfBuffers) {
const pdfDoc = await plugins.pdfLib.PDFDocument.load(pdfBytes);
const pages = await mergedPdf.copyPages(pdfDoc, pdfDoc.getPageIndices());
pages.forEach((page) => mergedPdf.addPage(page));
}
const resultBuffer = await merger.saveAsBuffer();
return {
name: 'mergedPdf',
buffer: resultBuffer,
id: null,
metadata: null,
};
const mergedPdfBytes = await mergedPdf.save();
return mergedPdfBytes;
}
public async readFileToPdfObject(pathArg: string): Promise<plugins.tsclass.business.IPdf> {
@@ -226,4 +224,39 @@ export class SmartPdf {
pdfParser.parseBuffer(pdfBufferArg);
return deferred.promise;
}
public async convertPDFToJPGBytes(
pdfBytes: Uint8Array,
options: {
width?: number;
height?: number;
quality?: number;
} = {}
): Promise<Uint8Array[]> {
const { width = 1024, height = 768, quality = 100 } = options;
// Load the PDF document
const pdfDoc = await plugins.pdfLib.PDFDocument.load(pdfBytes);
const converter = plugins.pdf2pic.fromBuffer(Buffer.from(pdfBytes), {
density: 100, // Image density (DPI)
format: 'jpg', // Image format
width, // Output image width
height, // Output image height
quality, // Output image quality
});
// Get array promises that resolve to JPG buffers
const imagePromises: Promise<Buffer>[] = [];
const numPages = pdfDoc.getPageCount();
for (let i = 0; i < numPages; i++) {
imagePromises.push(converter(i + 1, {
responseType: 'buffer',
}).then((output) => output.buffer));
}
// Resolve all promises and return the array of buffers
return Promise.all(imagePromises);
}
}