\section{Pourquoi Vercel + FormaTeX}
Générer des PDF sans quitter votre pile Next.js
Les fonctions Vercel ne peuvent pas exécuter TeX Live, mais elles peuvent faire des requêtes HTTP. L'API FormaTeX transforme un simple appel fetch en PDF entièrement compilé.
Déploiement sans configuration
Ajoutez un fichier de route d'API et une variable d'environnement. Poussez sur Vercel : votre point de terminaison PDF est en ligne dans le monde entier en quelques secondes.
Compatible avec l'App Router
Le route handler suit la convention de l'App Router de Next.js. Exportez runtime, maxDuration et le gestionnaire POST : c'est tout.
Réponse en streaming
Renvoyez les octets du PDF en amont directement au navigateur sans mettre tout le fichier en mémoire tampon, ce qui garde l'invocation de votre fonction rapide et économique.
\section{Route d'API Next.js}
La route d'API complète
Créez app/api/pdf/route.ts dans votre projet Next.js. La route accepte une requête POST avec un corps JSON contenant source et un engine facultatif, puis renvoie le PDF compilé à l'appelant en streaming.
// app/api/pdf/route.ts
import type { NextRequest } from "next/server"
// Use the Node.js runtime — the Edge runtime does not support
// the full fetch API response streaming needed for binary files.
export const runtime = "nodejs"
// Vercel Hobby: 10 s max. Pro / Enterprise: up to 300 s.
// Set this to at least 30 s to handle complex documents.
export const maxDuration = 30
export async function POST(request: NextRequest) {
const body = await request.json()
const source: string = body.source ?? ""
const engine: string = body.engine ?? "pdflatex"
if (!source) {
return Response.json({ error: "source is required" }, { status: 400 })
}
const apiKey = process.env.FORMATEX_API_KEY
if (!apiKey) {
return Response.json({ error: "FORMATEX_API_KEY is not configured" }, { status: 500 })
}
const upstream = await fetch("https://api.formatex.io/api/v1/compile", {
method: "POST",
headers: {
"X-API-Key": apiKey,
"Content-Type": "application/json",
},
body: JSON.stringify({ latex: source, engine }),
})
if (!upstream.ok) {
const err = await upstream.json().catch(() => ({ error: "compilation failed" }))
return Response.json(err, { status: upstream.status })
}
// Stream the PDF bytes directly to the client — no buffering in memory.
return new Response(upstream.body, {
headers: {
"Content-Type": "application/pdf",
"Content-Disposition": 'attachment; filename="document.pdf"',
},
})
}\subsection{Appeler la route}
Appelez /api/pdf depuis n'importe quel composant client ou server action. L'utilitaire ci-dessous déclenche un téléchargement dans le navigateur directement depuis le blob.
// Calling the route from a React component or server action
async function generatePdf(latexSource: string): Promise<void> {
const res = await fetch("/api/pdf", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ source: latexSource, engine: "pdflatex" }),
})
if (!res.ok) {
const { error } = await res.json()
throw new Error(error ?? "PDF generation failed")
}
// Trigger a browser download
const blob = await res.blob()
const url = URL.createObjectURL(blob)
const a = document.createElement("a")
a.href = url
a.download = "document.pdf"
a.click()
URL.revokeObjectURL(url)
}\section{Variables d'environnement}
Ajouter votre clé API à Vercel
Ouvrir les paramètres de votre projet
Rendez-vous sur vercel.com → votre projet → Settings → Environment Variables.
Ajouter FORMATEX_API_KEY
Définissez le nom sur FORMATEX_API_KEY et collez votre clé depuis le tableau de bord FormaTeX. Sélectionnez les environnements Production (et éventuellement Preview).
Redéployer
Les modifications des variables d'environnement prennent effet au déploiement suivant. Déclenchez un redéploiement depuis le tableau de bord Vercel ou en poussant un nouveau commit.
N'exposez jamais FORMATEX_API_KEY au navigateur. La variable n'est accessible que côté serveur, dans un Route Handler ou une Server Action : elle ne sera pas incluse dans le bundle client.
\section{Choix du runtime}
Runtime Edge ou Node.js
Runtime Edge
Déconseillé- Limite de 50 ms de CPU : insuffisant pour les documents complexes
- Limite de 4 Mo pour le corps de la réponse : peut tronquer les PDF volumineux
- Pas de modules natifs Node.js comme Buffer
Runtime Node.js
Recommandé- Jusqu'à 300 s d'exécution (offre Pro/Enterprise)
- Prise en charge complète du streaming du corps de la réponse
- Buffer et crypto standards de Node.js disponibles
Définissez export const runtime = "nodejs" en haut de votre fichier de route. Sans cela, Next.js peut utiliser par défaut le runtime Edge sur Vercel et le streaming du PDF échouera pour les documents volumineux.
\section{Guides associés}
Plus de guides pour votre pile
L'API FormaTeX est un simple point de terminaison HTTP. Accédez-y depuis n'importe quel langage ou plateforme.

