\usepackage{ruby}

API de LaTeX a PDF para Ruby

Compile LaTeX a PDF desde Ruby con la API REST de FormaTeX. Con el Net::HTTP estándar: sin gemas y sin necesidad de instalar TeX Live.

Also available in:Python·Node.js·Go·PHP·Ruby·Rust·cURL|Full API reference

\section{Por qué Ruby}

Por qué Ruby + FormaTeX

No se necesitan gemas

La API de FormaTeX es un endpoint HTTPS sencillo. Use la biblioteca estándar de Ruby: sin httparty, sin faraday y sin nada que añadir a su Gemfile.

Rails-ready

Incluya una sola acción de controlador en su aplicación Rails para enviar PDF directamente al navegador; no se necesita un trabajo en segundo plano para documentos pequeños.

Sin binarios que empaquetar

Olvídese de añadir TeX Live al buildpack de Heroku o a su imagen de Docker. FormaTeX se encarga por completo de la infraestructura de compilación.

\section{Inicio rápido}

Inicio rápido

El siguiente ejemplo compila un documento LaTeX mínimo y escribe el PDF resultante en disco con el Net::HTTP integrado de Ruby. Sustituya FORMATEX_API_KEY por una clave de su panel .

compile.rb
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{Integración con Rails}

Controlador de Rails

Añada un DocumentsController a su aplicación Rails. La acción compile acepta un cuerpo JSON con los campos source y, opcionalmente, engine, y devuelve el PDF compilado mediante send_data.

app/controllers/documents_controller.rb
# 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}

Configuración de la variable de entorno

Guarde su clave de API en el entorno; nunca la incluya en el control de versiones. Use ENV.fetch para que su aplicación genere un error al iniciar si falta la clave:

API_KEY = ENV.fetch( 'FORMATEX_API_KEY' )

Shell / .env

export FORMATEX_API_KEY=fmtx_…

Credenciales de Rails

rails credentials:edit

Heroku

heroku config:set FORMATEX_API_KEY=fmtx_…

\section{Engines}

Selección del motor

MotorIdeal para
pdflatexPredeterminado. Rápido, ampliamente compatible y adecuado para la mayoría de los documentos
xelatexTexto Unicode, fuentes de sistema personalizadas, escrituras árabe/CJK
lualatexTipografía avanzada, scripts con Lua, documentos grandes
latexmkEjecuta automáticamente el número correcto de pasadas para las referencias cruzadas

\section{Reference}

Referencia de la API

CampoTipoObligatorioDescripción
latexstringSíCódigo fuente LaTeX completo como cadena de texto
enginestringNoMotor que se usará. Valor predeterminado: "pdflatex". Opciones: pdflatex, xelatex, lualatex, latexmk

POST https://api.formatex.io/api/v1/compile — Devuelve bytes de PDF sin procesar si tiene éxito ( 200), o un error JSON si falla (422/ 401).

\section{Gestión de errores}

Gestión de errores

Compruebe response.code antes de leer el cuerpo. La API devuelve códigos de estado HTTP estándar:

  • → 200 — bytes de PDF sin procesar. Léalos con response.body .
  • → 422 — error de compilación de LaTeX. El cuerpo JSON contiene un campo error con un extracto del registro de TeX.
  • → 401 — clave de API no válida o ausente.

\end{ruby}

Empiece a compilar LaTeX desde Ruby

Obtenga su clave de API y tenga PDF desde Ruby en minutos, sin necesidad de TeX Live.