PHPackages                             hqsoft/reportkit - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [PDF &amp; Document Generation](/categories/documents)
4. /
5. hqsoft/reportkit

ActiveLibrary[PDF &amp; Document Generation](/categories/documents)

hqsoft/reportkit
================

Framework para generar reportes y documentos en PDF, Excel y CSV mediante un layout de 24 columnas.

1.0.4(4w ago)081↓70%1MITPHP

Since Feb 5Pushed 4w agoCompare

[ Source](https://github.com/hugoquijada/report-kit)[ Packagist](https://packagist.org/packages/hqsoft/reportkit)[ RSS](/packages/hqsoft-reportkit/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (6)Versions (6)Used By (1)

Report Kit
==========

[](#report-kit)

Librería PHP para definir documentos una sola vez mediante una estructura neutral basada en filas, columnas y celdas, y luego renderizarlos en múltiples formatos. El namespace principal del proyecto se mantiene como `hqsoft\reportkit`.

Actualmente incluye renderers para HTML, PDF, Spreadsheet y CSV, con una arquitectura pensada para seguir creciendo hacia Word / DOCX sin acoplar el documento a una librería específica.

Instalación
-----------

[](#instalación)

```
composer require hqsoft/report-kit
```

Uso Básico
----------

[](#uso-básico)

La clase principal es `Document`, donde defines la estructura de tu reporte mediante filas (`Row`) y columnas (`Column`) sobre un grid configurable de 24 columnas.

```
use hqsoft\reportkit\document\Document;

// Crear un documento nuevo
$doc = new Document();

// Agregar un título (fila de ancho completo)
$doc->row(function($row) {
    $row->col(24)->text('Mi Reporte Mensual')->align('center'); // 24 columnas es el ancho total por defecto
});

// Agregar encabezados
$doc->header(function($row) {
    $row->col(8)->text('Producto', true);
    $row->col(8)->text('Cantidad', true);
    $row->col(8)->text('Precio', true);
});

// Agregar datos
$doc->row(function($row) {
    $row->col(8)->text('Laptop');
    $row->col(8)->text('10');
    $row->col(8)->text('1500.00');
});
```

Renderizado
-----------

[](#renderizado)

Una vez definido el documento, puedes usar diferentes "Renderers" para generar la salida deseada.

### HTML

[](#html)

Genera una tabla HTML con estilos en línea, ideal para vistas previas o correos.

```
use hqsoft\reportkit\renderers\html\HtmlRenderer;

$renderer = new HtmlRenderer();
echo $renderer->render($doc);
```

### Spreadsheet (Excel)

[](#spreadsheet-excel)

Genera un archivo `.xlsx` nativo. Requiere `phpoffice/phpspreadsheet`.

```
use hqsoft\reportkit\renderers\spreadsheet\SpreadsheetRenderer;

$renderer = new SpreadsheetRenderer();
$content = $renderer->render($doc); // Retorna el contenido binario del archivo
file_put_contents('reporte.xlsx', $content);
```

### CSV

[](#csv)

Exportación rápida a formato CSV.

```
use hqsoft\reportkit\renderers\csv\CsvRenderer;

$renderer = new CsvRenderer();
echo $renderer->render($doc);
```

### Word / DOCX

[](#word--docx)

Genera un archivo `.docx` básico sin depender de una librería adicional.

```
use hqsoft\reportkit\renderers\docx\DocxRenderer;

$renderer = new DocxRenderer();
$content = $renderer->render($doc);
file_put_contents('reporte.docx', $content);
```

Estilos (`CellStyle`)
---------------------

[](#estilos-cellstyle)

Puedes aplicar estilos detallados a tus celdas usando la clase `CellStyle`.

```
use hqsoft\reportkit\document\CellStyle;

$estiloResaltado = CellStyle::create()
    ->bold()
    ->background('#FFFF00')
    ->color('#FF0000')
    ->align('center')
    ->border('bottom', 'thin', '#000000');

$doc->row(function($row) use ($estiloResaltado) {
    $row->col(12)->text('¡Importante!')->style($estiloResaltado);
});
```

### Capacidades de Estilo

[](#capacidades-de-estilo)

- **Texto**: `bold()`, `italic()`, `decoration('underline')`, `decoration('line-through')`
- **Fuente**: `fontFamily('Arial')`, `fontSize(14)`
- **Color**: `color('#333')`, `background('#f0f0f0')`
- **Alineación**: `align('center')`, `valign('middle')`
- **Bordes**: `border('all', 'thin', '#000')`
- **Espaciado**: `padding(10)` (se convierte a indentación en Excel)
- **Dimensiones**: `width(200)` (ancho de columna), `height(50)` (alto de fila)

Formatos de Datos
-----------------

[](#formatos-de-datos)

Puedes especificar el tipo de dato de una columna para asegurar que se formatee correctamente en Excel y HTML (ej. moneda, fechas).

```
use hqsoft\reportkit\document\Column;

$doc->row(function($row) {
    // Moneda
    $row->col(6)->text('12500.50')->format(Column::FORMAT_CURRENCY);

    // Porcentaje
    $row->col(6)->text('0.15')->format(Column::FORMAT_PERCENTAGE);

    // Fecha (entrada YYYY-MM-DD -> salida DD/MM/YYYY)
    $row->col(6)->text('2026-02-03')->format(Column::FORMAT_DATE);

    // Número con separadores
    $row->col(6)->text('1000000')->format(Column::FORMAT_NUMBER);
});
```

Estilos Nombrados
-----------------

[](#estilos-nombrados)

Para evitar repetir definiciones, puedes registrar estilos en el documento:

```
$doc->addStyle('titulo', CellStyle::create()->fontSize(20)->bold());

// Usar por nombre
$doc->row(function($row) {
    $row->col(24)->text('Mi Título')->style('titulo');
});
```

Plantillas dinámicas
--------------------

[](#plantillas-dinámicas)

`ReportKit` ahora incluye una capa de plantillas híbridas bajo `hqsoft\reportkit\template`. Su objetivo es expandir una plantilla PHP a un `Document` neutral antes de renderizar.

Capacidades de esta primera versión:

- placeholders con sintaxis `{{ruta.valor}}`
- texto mixto dentro de una misma celda
- loops de bloques estructurados
- reutilización de estilos, formatos, imágenes y layout actuales

Ejemplo básico:

```
use hqsoft\reportkit\document\Column;
use hqsoft\reportkit\template\TemplateDocument;

$template = TemplateDocument::create();

$template->row(function($row) {
    $row->col(24)->text('Comparece {{cliente.nombre}} con domicilio en {{cliente.direccion}}.');
});

$template->loop('conceptos', function($section) {
    $section->row(function($row) {
        $row->col(18)->text('{{descripcion}}');
        $row->col(6)->format(Column::FORMAT_CURRENCY)->text('{{monto}}');
    });
});

$doc = $template->expand([
    'cliente' => [
        'nombre' => 'María Pérez',
        'direccion' => 'Av. Reforma 123',
    ],
    'conceptos' => [
        ['descripcion' => 'Honorarios', 'monto' => '1500'],
        ['descripcion' => 'Gastos', 'monto' => '300'],
    ],
]);
```

Notas de diseño:

- Los loops repiten bloques completos, no fragmentos arbitrarios de texto.
- Si una variable no existe, se reemplaza por cadena vacía.
- Si un loop no encuentra una colección iterable, el bloque se omite.
- La salida oficial de la plantilla siempre es un `Document`.

###  Health Score

40

↑

FairBetter than 86% of packages

Maintenance94

Actively maintained with recent releases

Popularity12

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity38

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~30 days

Total

5

Last Release

29d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9c5fbeb5f4ae9bd16df30b20e1bea1f8447d4c2ba8a8f796e07dbc3cce24bbb4?d=identicon)[hquijada](/maintainers/hquijada)

---

Top Contributors

[![hugoquijada](https://avatars.githubusercontent.com/u/2067204?v=4)](https://github.com/hugoquijada "hugoquijada (7 commits)")

---

Tags

phppdfexcelcsvlayoutreportes

### Embed Badge

![Health badge](/badges/hqsoft-reportkit/health.svg)

```
[![Health](https://phpackages.com/badges/hqsoft-reportkit/health.svg)](https://phpackages.com/packages/hqsoft-reportkit)
```

###  Alternatives

[maatwebsite/excel

Supercharged Excel exports and imports in Laravel

12.9k157.3M893](/packages/maatwebsite-excel)[kimai/kimai

Kimai - Time Tracking

4.8k9.0k1](/packages/kimai-kimai)[yajra/laravel-datatables-export

Laravel DataTables Queued Export Plugin.

362.2M4](/packages/yajra-laravel-datatables-export)[2lenet/crudit-bundle

The easy like Crud'it Bundle.

1616.4k14](/packages/2lenet-crudit-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
