|
import PDFDocument from 'pdfkit' |
|
import fs from 'fs' |
|
|
|
|
|
import { Image } from '../../object/Image.js' |
|
|
|
class PdfGenerator { |
|
constructor() { |
|
if (!PdfGenerator.instance) { |
|
PdfGenerator.instance = this |
|
} |
|
return PdfGenerator.instance |
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
generate(images, dest) { |
|
return new Promise((resolve, reject) => { |
|
if (images.length > 0) { |
|
const doc = new PDFDocument({ size: [images[0].width, images[0].height] }); |
|
const writeStream = fs.createWriteStream(dest); |
|
doc.pipe(writeStream); |
|
for (let page = 1; page <= images.length; page++) { |
|
let image = images[page - 1] |
|
doc.image(image.path, 0, 0, { |
|
fit: [image.width, image.height], |
|
align: 'center', |
|
valign: 'center' |
|
}); |
|
if (page < images.length) { |
|
doc.addPage({ size: [images[page].width, images[page].height] }) |
|
} |
|
} |
|
doc.end(); |
|
writeStream.on('finish', () => { |
|
console.log(`Generated: ${dest}`) |
|
resolve() |
|
}); |
|
} else { |
|
reject("no images") |
|
} |
|
}); |
|
} |
|
} |
|
|
|
export const pdfGenerator = new PdfGenerator() |
|
|