tipazo
Version:
libreria-multiform
29 lines (27 loc) • 1.19 kB
text/typescript
import fs from 'fs';
import path from 'path';
import { PDFDocument } from 'pdf-lib';
import sharp from 'sharp';
import puppeteer from 'puppeteer';
export async function convertirArchivoAPDF(rutaArchivo: string, salidaPDF: string): Promise<void> {
const extension = path.extname(rutaArchivo).toLowerCase();
if (extension === '.jpg' || extension === '.png') {
const buffer = await sharp(rutaArchivo).toFormat('pdf').toBuffer();
fs.writeFileSync(salidaPDF, buffer);
} else if (extension === '.html') {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(`file://${path.resolve(rutaArchivo)}`, { waitUntil: 'networkidle0' });
await page.pdf({ path: salidaPDF, format: 'A4' });
await browser.close();
} else if (extension === '.txt') {
const contenido = fs.readFileSync(rutaArchivo, 'utf-8');
const pdfDoc = await PDFDocument.create();
const page = pdfDoc.addPage();
page.drawText(contenido, { x: 50, y: 700 });
const pdfBytes = await pdfDoc.save();
fs.writeFileSync(salidaPDF, pdfBytes);
} else {
throw new Error(`Formato no soportado: ${extension}`);
}
}