\usepackage{ruby}
Compilez du LaTeX en PDF depuis Ruby avec l'API REST FormaTeX. Net::HTTP standard : aucun gem requis, aucune installation de TeX Live nécessaire.
\section{Pourquoi Ruby}
L'API FormaTeX est un simple point de terminaison HTTPS. Utilisez la bibliothèque standard de Ruby : pas de httparty, pas de faraday, rien à ajouter à votre Gemfile.
Ajoutez une seule action de contrôleur à votre application Rails pour envoyer les PDF directement au navigateur, sans tâche en arrière-plan pour les petits documents.
Oubliez l'ajout de TeX Live à votre buildpack Heroku ou à votre image Docker. FormaTeX gère entièrement l'infrastructure de compilation.
\section{Démarrage rapide}
L'exemple ci-dessous compile un document LaTeX minimal et écrit le PDF obtenu sur disque avec le Net::HTTP intégré de Ruby. Remplacez FORMATEX_API_KEY par une clé de votre tableau de bord .
require 'net/http'
require 'json'
require 'uri'
API_KEY = ENV.fetch('FORMATEX_API_KEY')
API_URL = URI.parse('https://api.formatex.io/api/v1/compile')
def compile_latex(source, engine: 'pdflatex')
http = Net::HTTP.new(API_URL.host, API_URL.port)
http.use_ssl = true
request = Net::HTTP::Post.new(API_URL.path)
request['X-API-Key'] = API_KEY
request['Content-Type'] = 'application/json'
request.body = { latex: source, engine: engine }.to_json
response = http.request(request)
raise "API error #{response.code}: #{response.body}" unless response.code == '200'
response.body
end
latex = <<~'LATEX'
\documentclass{article}
\usepackage{amsmath}
\begin{document}
Hello from Ruby! $E = mc^2$
\end{document}
LATEX
pdf = compile_latex(latex)
File.binwrite('output.pdf', pdf)
puts 'PDF saved to output.pdf'\section{Intégration Rails}
Ajoutez un DocumentsController à votre application Rails. L'action compile accepte un corps JSON avec les champs source et engine (facultatif), puis renvoie le PDF compilé en flux avec send_data.
# app/controllers/documents_controller.rb
require 'net/http'
require 'json'
require 'uri'
class DocumentsController < ApplicationController
FORMATEX_URL = URI.parse('https://api.formatex.io/api/v1/compile').freeze
# POST /documents/compile
def compile
source = params.require(:source)
engine = params.fetch(:engine, 'pdflatex')
pdf_bytes = call_formatex(source, engine)
send_data pdf_bytes,
type: 'application/pdf',
disposition: 'inline',
filename: 'document.pdf'
rescue => e
render json: { error: e.message }, status: :unprocessable_entity
end
private
def call_formatex(source, engine)
http = Net::HTTP.new(FORMATEX_URL.host, FORMATEX_URL.port)
http.use_ssl = true
http.open_timeout = 5
http.read_timeout = 60
req = Net::HTTP::Post.new(FORMATEX_URL.path)
req['X-API-Key'] = ENV.fetch('FORMATEX_API_KEY')
req['Content-Type'] = 'application/json'
req.body = { latex: source, engine: engine }.to_json
res = http.request(req)
raise "FormaTeX error #{res.code}: #{res.body}" unless res.code == '200'
res.body
end
end\section{Authentication}
Stockez votre clé API dans l'environnement et ne la versionnez jamais. Utilisez ENV.fetch pour que votre application lève une erreur au démarrage si la clé est absente :
API_KEY = ENV.fetch( 'FORMATEX_API_KEY' )
Shell / .env
export FORMATEX_API_KEY=fmtx_…Identifiants Rails
rails credentials:editHeroku
heroku config:set FORMATEX_API_KEY=fmtx_…\section{Engines}
| Moteur | Idéal pour |
|---|---|
| pdflatex | Par défaut. Rapide, largement compatible, adapté à la plupart des documents |
| xelatex | Texte Unicode, polices système personnalisées, écritures arabe/CJK |
| lualatex | Typographie avancée, scripts en Lua, documents volumineux |
| latexmk | Exécute automatiquement le bon nombre de passes pour les références croisées |
\section{Reference}
| Champ | Type | Requis | Description |
|---|---|---|---|
| latex | string | Oui | Code source LaTeX complet sous forme de chaîne |
| engine | string | Non | Moteur à utiliser. Par défaut : "pdflatex". Options : pdflatex, xelatex, lualatex, latexmk |
POST https://api.formatex.io/api/v1/compile : renvoie les octets bruts du PDF en cas de succès ( 200), ou une erreur JSON en cas d'échec (422/ 401).
\section{Gestion des erreurs}
Vérifiez response.code avant de lire le corps. L'API renvoie des codes de statut HTTP standard :
200 : octets bruts du PDF. À lire avec response.body .422 : erreur de compilation LaTeX. Le corps JSON contient un champ error avec un extrait du journal TeX.401 : clé API invalide ou absente.\end{ruby}
Obtenez votre clé API et générez des PDF depuis Ruby en quelques minutes, sans TeX Live.