import puppeteer from 'puppeteer'; import { OnePagerData } from '../ai/types'; import { DocumentRenderer } from './types'; export class PdfOnePagerRenderer implements DocumentRenderer { async render(data: OnePagerData): Promise { // Design System Colors: Primary #1C7C54, Secondary #1B3A57, Accent #F4A261 const htmlContent = `
${data.mainImage ? `Brand Visual` : ''}

${data.title || '[Nom du Projet]'}

${data.tagline || '[Votre Slogan Stratégique]'}

Analyse du Problème

${data.problem || '[Donnée à compléter]'}

Notre Solution Stratégique

${data.solution || '[Donnée à compléter]'}

Cible et Opportunité

${data.targetAudience || '[Donnée à compléter]'}

Modèle Économique & Croissance

${data.businessModel || '[Donnée à compléter]'}

${data.marketSources ? `

Sources & Données Réelles : ${data.marketSources}

` : ''}

${data.callToAction || '[Action Suivante]'}

`; const browser = await puppeteer.launch({ executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || undefined, headless: true, args: ['--no-sandbox', '--disable-setuid-sandbox'], // Required for running as root in Docker/HF }); const page = await browser.newPage(); await page.setContent(htmlContent, { waitUntil: 'networkidle0' }); const pdfBuffer = await page.pdf({ format: 'A4', printBackground: true, margin: { top: '20px', right: '20px', bottom: '20px', left: '20px' } }); await browser.close(); return pdfBuffer as Buffer; } }