← SDK
SDK Ruby

majorsilence_reporting

Générez des rapports RDL en PDF, Excel, CSV et plus depuis Ruby — via sous-processus, un binaire AOT, ou une FFI Fiddle en processus. Ruby 3.0+. Aucune dépendance gem runtime.


Installation

Aucune gem n'est encore publiée sur RubyGems. Chargez depuis les sources via $LOAD_PATH ou require_relative :

# Ajouter le répertoire lib au chemin de chargement
$LOAD_PATH.unshift '/path/to/reporting-ruby/lib'

# Charger les trois classes d'un coup
require 'majorsilence_reporting'

# Ou charger les classes individuellement
require 'majorsilence_reporting/report'
require 'majorsilence_reporting/report_aot'
require 'majorsilence_reporting/report_native'

Aucune dépendance gem en runtime. Le mode natif FFI utilise la bibliothèque standard intégrée de Ruby Fiddle.


Modes d'intégration

ClasseMécanismePrérequis
ReportLance dotnet RdlCmd.dll via system().Runtime .NET sur le serveur.
ReportAotLance un binaire RdlCmd autonome compilé en AOT via system().Binaire AOT déployé aux côtés de l'application. Aucun runtime .NET requis.
ReportNativeCharge librdlnative.so en processus via Fiddle. Utilisez RdlLibrary.load() pour obtenir la table de fonctions liée.Bibliothèque native + fichiers .so associés sur LD_LIBRARY_PATH avant le démarrage de Ruby.

Report — sous-processus (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')

# Enregistrer sur le disque
rpt.export('pdf', '/tmp/output.pdf')

# Ou obtenir les octets en mémoire (par ex. pour un contrôleur Rails)
data = rpt.export_to_memory('pdf')
send_data data, type: 'application/pdf', disposition: 'inline'

ReportAot — binaire AOT

Même API que Report, mais cible un binaire autonome. Aucun runtime .NET requis. Débloque des formats d'export supplémentaires (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')

# Dans une réponse Rack/Sinatra :
[200, { 'Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }, [data]]

ReportNative — FFI Fiddle

Charge librdlnative.so directement dans le processus Ruby via la bibliothèque intégrée Fiddle. Aucun processus enfant n'est lancé.

require 'majorsilence_reporting/report_native'

# Charger une seule fois au démarrage. Précharge les fichiers .so/.dylib associés et définit 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')   # renvoie une String binaire
LD_LIBRARY_PATH doit inclure le répertoire de la bibliothèque native avant le démarrage de Ruby. RdlLibrary.load() définit ENV['RDLNATIVE_LIB_DIR'] et précharge les bibliothèques associées avec Fiddle.dlopen, mais ne peut pas modifier rétroactivement LD_LIBRARY_PATH pour le processus en cours.

API principale

Les trois classes partagent la même interface :

MéthodeDescription
set_connection_string(cs)Définit la chaîne de connexion à la base de données. À appeler avant export.
set_parameter(name, value)Définit un paramètre de rapport nommé. Les deux arguments sont des chaînes. Peut être appelée autant de fois que nécessaire.
export(type, path)Génère le rapport et écrit la sortie vers path sur le disque.
export_to_memory(type)Génère et renvoie la sortie sous forme de String binaire (formats binaires) ou String UTF-8 (formats texte tels que CSV, XML, HTML).

Jeux de données en mémoire

ReportNative permet de fournir des données entièrement en mémoire via add_data() — aucune connexion à une base de données requise. Passez un nom de jeu de données et un tableau de hash où chaque valeur est une chaîne.

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() n'est disponible que sur ReportNative, pas sur Report ni ReportAot. Toutes les valeurs de champs doivent être des chaînes. Le nom du jeu de données doit correspondre à un jeu de données défini dans le fichier .rdl.

Formats d'export

Chaîne de formatSortieDisponible dans
pdfPDFTous les modes
csvTexte CSVTous les modes
xlsxClasseur ExcelTous les modes
xmlDonnées XMLTous les modes
rtfRich Text FormatTous les modes
tifImage TIFF (couleur)Tous les modes
htmlHTMLTous les modes
xlsx_tableExcel (style tableau)ReportAot + ReportNative uniquement
tifbImage TIFF (noir & blanc)ReportAot + ReportNative uniquement
mhtArchive web MHTMLReportAot + ReportNative uniquement