← SDKs
SDK de PHP

majorsilence/reporting

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


Instalación

Instala vía Composer (se requiere PHP 8.1+):

composer require majorsilence/reporting

O clona el repositorio e incluye el autoloader manualmente:

require_once __DIR__ . '/vendor/autoload.php';

Sin dependencias de Composer en tiempo de ejecución. El modo nativo FFI requiere además ext-ffi y ffi.enable=true en php.ini.


Modos de integración

ClaseMecanismoRequisito
ReportLanza dotnet RdlCmd.dll vía proc_open.Runtime de .NET en el servidor.
ReportAotLanza un binario RdlCmd autocontenido compilado con AOT vía proc_open.Binario AOT desplegado junto a la aplicación. No se necesita runtime de .NET.
ReportNativeCarga librdlnative.so en el proceso mediante FFI de PHP. Usa RdlLibrary::load() para obtener la instancia FFI.ext-ffi, ffi.enable=true, y la biblioteca nativa en LD_LIBRARY_PATH.

Report — subproceso (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');

// Guardar en disco
$rpt->export('pdf', '/tmp/output.pdf');

// O transmitir al navegador
$data = $rpt->export_to_memory('pdf');
header('Content-Type: application/pdf');
header('Content-Disposition: inline; filename="report.pdf"');
echo $data;

ReportAot — binario AOT

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

use MajorsilenceReporting\ReportAot;

$rpt = new ReportAot(
    '/path/to/report.rdl',
    '/path/to/RdlCmd'   // binario autocontenido
);
$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

Carga librdlnative.so directamente en el proceso de PHP mediante FFI. No se genera ningún proceso hijo. Requiere ext-ffi y ffi.enable=true.

use MajorsilenceReporting\ReportNative;
use MajorsilenceReporting\RdlLibrary;

// Cargar la biblioteca nativa una sola vez. Define RDLNATIVE_LIB_DIR automáticamente.
$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 requiere extension=ffi y ffi.enable=true en php.ini. El directorio de la biblioteca nativa debe estar en LD_LIBRARY_PATH antes de que arranque PHP — RdlLibrary::load() define RDLNATIVE_LIB_DIR pero no puede actualizar retroactivamente LD_LIBRARY_PATH para el proceso en curso.

API principal

Las tres clases comparten la misma interfaz (espacio de nombres PSR-4 MajorsilenceReporting\):

MétodoDescripción
set_connection_string(string $cs)Establece la cadena de conexión a la base de datos. Llamar antes de export.
set_parameter(string $name, string $value)Define un parámetro de informe con nombre. Se puede llamar tantas veces como sea necesario.
export(string $type, string $path)Renderiza el informe y escribe la salida en $path en disco.
export_to_memory(string $type): stringRenderiza y devuelve la salida como una cadena binaria (para PDF, TIFF, RTF, XLSX) o una cadena UTF-8 (para 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 arrays asociativos 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. El nombre del conjunto de datos debe coincidir con un conjunto de datos definido en el archivo .rdl. Todos los valores de campo deben ser cadenas.

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