Usa Majorsilence Reporting
desde cualquier lenguaje
Los wrappers de Python, PHP y Ruby te permiten renderizar informes RDL a PDF, Excel, CSV, HTML y más, sin escribir ningún código .NET. Cada lenguaje incluye tres modos de integración para adaptarse a tus restricciones de despliegue.
Python 3.10+. subprocess, binario AOT, o FFI ctypes en proceso. Renderizado real en búfer en memoria en modo nativo.
Leer la documentación → PHPPHP 8.1+. Paquete de Composer. Modos nativos de subproceso proc_open y PHP FFI. Funciona con Laravel, Symfony o PHP puro.
Leer la documentación → RubyRuby 3.0+. Cero dependencias de gemas en tiempo de ejecución. Fiddle FFI para renderizado nativo en proceso. Funciona con Rails, Sinatra o Ruby puro.
Leer la documentación → RustEdición Rust 2021. Solo FFI con libloading, sin modo de subproceso. Handle Arc seguro para hilos. Búfer real en memoria. Los 10 formatos. Una sola dependencia.
Leer la documentación →Modos de integración
Cada binding de lenguaje incluye tres clases que cubren distintos escenarios de despliegue:
| Modo | Cómo funciona | Cuándo usarlo |
|---|---|---|
| Report | Lanza dotnet RdlCmd.dll como un proceso hijo a través del shell del sistema. Requiere que el runtime de .NET esté instalado en el servidor. |
Configuración más sencilla: útil para desarrollo o cuando .NET ya está instalado en la máquina. |
| ReportAot | Lanza un binario autocontenido compilado con AOT (RdlCmd). No requiere en absoluto el runtime de .NET: el binario incluye todo. |
Despliegues de producción donde no puedes instalar el runtime de .NET. Copia el binario junto a tu aplicación. |
| ReportNative | Carga librdlnative.so en proceso mediante FFI nativo (ctypes / PHP FFI / Fiddle). No se genera ningún proceso hijo. |
Menor latencia, mayor rendimiento. Necesario para renderizado en memoria sin escribir archivos temporales (por ahora, solo en Python). |
Comparación de funciones
| Función | Python | PHP | Ruby | Rust |
|---|---|---|---|---|
| Versión mínima del lenguaje | 3.10+ | 8.1+ | 3.0+ | 1.65+ |
| Gestor de paquetes | pip | Composer | aún sin gem | aún sin crate |
| Dependencias en tiempo de ejecución | ninguna | ninguna | ninguna | libloading |
| Modo subproceso (dotnet) | ✓ | ✓ | ✓ | – |
| Modo binario AOT | ✓ | ✓ | ✓ | – |
| Modo FFI nativo | ✓ | ✓ | ✓ | ✓ único |
Conjuntos de datos en memoria con add_data() | solo nativo | solo nativo | solo nativo | ✓ |
| Búfer real en memoria (sin archivo temporal) | ✓ nativo | – | – | ✓ |
| Handle de librería seguro para hilos | – | – | – | respaldado por Arc |
| Formatos xlsx_table, tifb, mht | AOT + nativo | AOT + nativo | AOT + nativo | todos los modos |
Formatos de exportación admitidos
Los tres bindings de lenguaje admiten las mismas cadenas de formato principales, pasadas a export() / export_to_memory():
| Cadena de formato | Salida | Disponible en |
|---|---|---|
pdf | Todos los modos | |
csv | Texto CSV | Todos los modos |
xlsx | Libro de Excel | Todos los modos |
xml | Datos XML | Todos los modos |
rtf | Rich Text Format | Todos los modos |
tif | Imagen TIFF (color) | Todos los modos |
html | HTML | Todos los modos |
xlsx_table | Excel (estilo tabla) | Solo AOT + Nativo (Python/PHP/Ruby); todos los modos (Rust) |
tifb | Imagen TIFF (blanco y negro) | Solo AOT + Nativo (Python/PHP/Ruby); todos los modos (Rust) |
mht | Archivo web MHTML | Solo AOT + Nativo (Python/PHP/Ruby); todos los modos (Rust) |