majorsilence/reporting
Générez des rapports RDL en PDF, Excel, CSV et plus depuis PHP — via sous-processus, un binaire AOT, ou une FFI PHP en processus. PHP 8.1+. Aucune dépendance runtime Composer.
Installation
Installez via Composer (PHP 8.1+ requis) :
composer require majorsilence/reporting
Ou clonez le dépôt et incluez l'autoloader manuellement :
require_once __DIR__ . '/vendor/autoload.php';
Aucune dépendance Composer en runtime. Le mode natif FFI nécessite en plus ext-ffi et ffi.enable=true dans php.ini.
Modes d'intégration
| Classe | Mécanisme | Prérequis |
|---|---|---|
| Report | Lance dotnet RdlCmd.dll via proc_open. | Runtime .NET sur le serveur. |
| ReportAot | Lance un binaire RdlCmd autonome compilé en AOT via proc_open. | Binaire AOT déployé aux côtés de l'application. Aucun runtime .NET requis. |
| ReportNative | Charge librdlnative.so en processus via PHP FFI. Utilisez RdlLibrary::load() pour obtenir l'instance FFI. | ext-ffi, ffi.enable=true, et la bibliothèque native sur LD_LIBRARY_PATH. |
Report — sous-processus (dotnet)
use MajorsilenceReporting\Report; $rpt = new Report( '/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 diffuser vers le navigateur $data = $rpt->export_to_memory('pdf'); header('Content-Type: application/pdf'); header('Content-Disposition: inline; filename="report.pdf"'); echo $data;
ReportAot — binaire AOT
Même API que Report, mais pointe vers un binaire autonome. Aucun runtime .NET requis. Débloque aussi des formats d'export supplémentaires (xlsx_table, tifb, mht).
use MajorsilenceReporting\ReportAot; $rpt = new ReportAot( '/path/to/report.rdl', '/path/to/RdlCmd' // binaire autonome ); $rpt->set_connection_string('Data Source=/path/to/data.db'); $data = $rpt->export_to_memory('xlsx_table'); header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); echo $data;
ReportNative — PHP FFI
Charge librdlnative.so directement dans le processus PHP via FFI. Aucun processus enfant n'est lancé. Nécessite ext-ffi et ffi.enable=true.
use MajorsilenceReporting\ReportNative; use MajorsilenceReporting\RdlLibrary; // Charger la bibliothèque native une seule fois. Définit RDLNATIVE_LIB_DIR automatiquement. $lib = RdlLibrary::load('/path/to/librdlnative.so'); $rpt = new ReportNative($lib, '/path/to/report.rdl'); $rpt->set_connection_string('Data Source=/path/to/data.db'); $data = $rpt->export_to_memory('pdf'); header('Content-Type: application/pdf'); echo $data;
extension=ffi et ffi.enable=true dans php.ini. Le répertoire de la bibliothèque native doit être présent dans LD_LIBRARY_PATH avant le démarrage de PHP — RdlLibrary::load() définit RDLNATIVE_LIB_DIR 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 (espace de noms PSR-4 MajorsilenceReporting\) :
| Méthode | Description |
|---|---|
| set_connection_string(string $cs) | Définit la chaîne de connexion à la base de données. À appeler avant export. |
| set_parameter(string $name, string $value) | Définit un paramètre de rapport nommé. Peut être appelée autant de fois que nécessaire. |
| export(string $type, string $path) | Génère le rapport et écrit la sortie vers $path sur le disque. |
| export_to_memory(string $type): string | Génère et renvoie la sortie sous forme de chaîne binaire (pour PDF, TIFF, RTF, XLSX) ou de chaîne UTF-8 (pour 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 tableaux associatifs 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. Le nom du jeu de données doit correspondre à un jeu de données défini dans le fichier .rdl. Toutes les valeurs de champs doivent être des chaînes.
Formats d'export
| Chaîne de format | Sortie | Disponible dans |
|---|---|---|
pdf | Tous les modes | |
csv | Texte CSV | Tous les modes |
xlsx | Classeur Excel | Tous les modes |
xml | Données XML | Tous les modes |
rtf | Rich Text Format | Tous les modes |
tif | Image TIFF (couleur) | Tous les modes |
html | HTML | Tous les modes |
xlsx_table | Excel (style tableau) | ReportAot + ReportNative uniquement |
tifb | Image TIFF (noir & blanc) | ReportAot + ReportNative uniquement |
mht | Archive web MHTML | ReportAot + ReportNative uniquement |