← SDKs
SDK de Ruby

majorsilence_reporting

Genera informes RDL en PDF, Excel, CSV y más desde Ruby — vía subproceso, un binario AOT, o FFI Fiddle en proceso. Ruby 3.0+. Sin dependencias de gemas en tiempo de ejecución.


Instalación

Todavía no hay ninguna gema publicada en RubyGems. Cárgala desde el código fuente usando $LOAD_PATH o require_relative:

# Añadir el directorio lib a la ruta de carga
$LOAD_PATH.unshift '/path/to/reporting-ruby/lib'

# Cargar las tres clases a la vez
require 'majorsilence_reporting'

# O cargar las clases individualmente
require 'majorsilence_reporting/report'
require 'majorsilence_reporting/report_aot'
require 'majorsilence_reporting/report_native'

Sin dependencias de gemas en tiempo de ejecución. El modo nativo FFI usa la biblioteca estándar integrada de Ruby Fiddle.


Modos de integración

ClaseMecanismoRequisito
ReportLanza dotnet RdlCmd.dll vía system().Runtime de .NET en el servidor.
ReportAotLanza un binario RdlCmd autocontenido compilado con AOT vía system().Binario AOT desplegado junto a la aplicación. No se necesita runtime de .NET.
ReportNativeCarga librdlnative.so en el proceso mediante Fiddle. Usa RdlLibrary.load() para obtener la tabla de funciones enlazada.Biblioteca nativa + archivos .so asociados en LD_LIBRARY_PATH antes de que arranque Ruby.

Report — subproceso (dotnet)

require 'majorsilence_reporting/report'

rpt = Report.new('/path/to/report.rdl', '/path/to/RdlCmd.dll')
rpt.set_connection_string('Data Source=/path/to/data.db')
rpt.set_parameter('StartDate', '2026-01-01')

# Guardar en disco
rpt.export('pdf', '/tmp/output.pdf')

# O bien obtener los bytes en memoria (por ejemplo para un controlador de Rails)
data = rpt.export_to_memory('pdf')
send_data data, type: 'application/pdf', disposition: 'inline'

ReportAot — binario AOT

Misma API que Report, pero apunta a un binario autocontenido. No se necesita runtime de .NET. Habilita formatos de exportación adicionales (xlsx_table, tifb, mht).

require 'majorsilence_reporting/report_aot'

rpt = ReportAot.new('/path/to/report.rdl', '/path/to/RdlCmd')
rpt.set_connection_string('Data Source=/path/to/data.db')

data = rpt.export_to_memory('xlsx_table')

# En una respuesta de Rack/Sinatra:
[200, { 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }, [data]]

ReportNative — Fiddle FFI

Carga librdlnative.so directamente en el proceso de Ruby mediante la biblioteca integrada Fiddle. No se genera ningún proceso hijo.

require 'majorsilence_reporting/report_native'

# Cargar una sola vez al iniciar. Precarga los archivos .so/.dylib asociados y define RDLNATIVE_LIB_DIR.
lib = RdlLibrary.load('/path/to/librdlnative.so')

rpt = ReportNative.new(lib, '/path/to/report.rdl')
rpt.set_connection_string('Data Source=/path/to/data.db')

data = rpt.export_to_memory('pdf')   # devuelve una String binaria
LD_LIBRARY_PATH debe incluir el directorio de la biblioteca nativa antes de que arranque Ruby. RdlLibrary.load() define ENV['RDLNATIVE_LIB_DIR'] y precarga bibliotecas asociadas con Fiddle.dlopen, pero no puede actualizar retroactivamente LD_LIBRARY_PATH para el proceso en ejecución.

API principal

Las tres clases comparten la misma interfaz:

MétodoDescripción
set_connection_string(cs)Establece la cadena de conexión a la base de datos. Llamar antes de export.
set_parameter(name, value)Define un parámetro de informe con nombre. Ambos argumentos son cadenas. Se puede llamar tantas veces como sea necesario.
export(type, path)Renderiza el informe y escribe la salida en path en disco.
export_to_memory(type)Renderiza y devuelve la salida como una String binaria (formatos binarios) o una String UTF-8 (formatos de texto como CSV, XML, HTML).

Conjuntos de datos en memoria

ReportNative permite suministrar datos completamente en memoria mediante add_data() — sin necesidad de conexión a una base de datos. Pasa un nombre de conjunto de datos y un array de hashes donde cada valor es una cadena.

rpt.add_data('SalesData', [
  { 'Product' => 'PDF Library Pro',  'Revenue' => '1200.00', 'Units' => '3' },
  { 'Product' => 'Report Designer',   'Revenue' => '250.00',  'Units' => '1' },
  { 'Product' => 'Support (12 mo.)',  'Revenue' => '500.00',  'Units' => '1' },
])

data = rpt.export_to_memory('pdf')
add_data() solo está disponible en ReportNative, no en Report ni ReportAot. Todos los valores de campo deben ser cadenas. El nombre del conjunto de datos debe coincidir con un conjunto de datos definido en el archivo .rdl.

Formatos de exportación

Cadena de formatoSalidaDisponible en
pdfPDFTodos los modos
csvTexto CSVTodos los modos
xlsxLibro de ExcelTodos los modos
xmlDatos XMLTodos los modos
rtfRich Text FormatTodos los modos
tifImagen TIFF (color)Todos los modos
htmlHTMLTodos los modos
xlsx_tableExcel (estilo tabla)Solo ReportAot + ReportNative
tifbImagen TIFF (blanco y negro)Solo ReportAot + ReportNative
mhtArchivo web MHTMLSolo ReportAot + ReportNative