← SDK
SDK PHP

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

ClasseMécanismePrérequis
ReportLance dotnet RdlCmd.dll via proc_open.Runtime .NET sur le serveur.
ReportAotLance 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.
ReportNativeCharge 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;
PHP FFI nécessite 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éthodeDescription
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): stringGé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 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