espace-paie-odentas/app/api/test-pdf/route.tsx
odentas 6485db4a75 feat(naa): Amélioration UX modal EditNAA - replier/déplier
- Tous les clients repliés par défaut à l'ouverture du modal
- Boutons 'Tout replier' / 'Tout déplier' pour gérer tous les clients
- Section factures repliable avec bouton Afficher/Masquer
- Affichage résumé facture sélectionnée quand section repliée
- Nouveau client déplié automatiquement pour faciliter la saisie
- Améliore la lisibilité pour NAA avec nombreux clients
2025-10-31 15:28:44 +01:00

58 lines
2 KiB
TypeScript

import React from 'react';
import { NextRequest, NextResponse } from 'next/server';
import ReactPDF from '@react-pdf/renderer';
import { ContratCDDU } from '@/lib/pdf/templates/ContratCDDU';
import testData from '@/PDF/donnees_test.json';
import { ContratCDDUData } from '@/lib/pdf/types';
/**
* Route API de test pour la génération de PDF avec @react-pdf/renderer
*
* URL: GET /api/test-pdf
*
* Cette route génère un PDF de contrat CDDU en utilisant les données de test
* et retourne le PDF directement dans le navigateur.
*/
export async function GET(request: NextRequest) {
try {
console.log('🧪 [test-pdf] Début de la génération du PDF de test');
// Cast des données de test
const data = testData as unknown as ContratCDDUData;
// Génération du PDF à partir du composant React
console.log('📄 [test-pdf] Rendu du composant ContratCDDU...');
// Créer le composant et le rendre en PDF
const doc = <ContratCDDU data={data} />;
const pdfBlob = await ReactPDF.pdf(doc).toBlob();
// Convertir le Blob en ArrayBuffer puis en Buffer
const arrayBuffer = await pdfBlob.arrayBuffer();
const pdfBuffer = Buffer.from(arrayBuffer);
console.log(`✅ [test-pdf] PDF généré avec succès (${pdfBuffer.byteLength} bytes)`);
// Retour du PDF avec les bons headers
return new NextResponse(pdfBuffer, {
status: 200,
headers: {
'Content-Type': 'application/pdf',
'Content-Disposition': 'inline; filename="contrat_cddu_test.pdf"',
'Content-Length': pdfBuffer.byteLength.toString(),
},
});
} catch (error) {
console.error('❌ [test-pdf] Erreur lors de la génération du PDF:', error);
return NextResponse.json(
{
error: 'Erreur lors de la génération du PDF',
details: error instanceof Error ? error.message : String(error),
stack: error instanceof Error ? error.stack : undefined,
},
{ status: 500 }
);
}
}