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(2mo ago)0100↓64.3%1MITPHP

Since Feb 5Pushed 2mo agoCompare

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

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

38

—

LowBetter than 83% of packages

Maintenance85

Actively maintained with recent releases

Popularity12

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity39

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

75d 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

[kimai/kimai

Kimai - Time Tracking

4.8k9.4k1](/packages/kimai-kimai)[maatwebsite/excel

Supercharged Excel exports and imports in Laravel

12.7k162.0M969](/packages/maatwebsite-excel)[rap2hpoutre/fast-excel

Fast Excel import/export for Laravel

2.3k27.7M55](/packages/rap2hpoutre-fast-excel)[yajra/laravel-datatables-export

Laravel DataTables Queued Export Plugin.

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

The easy like Crud'it Bundle.

1617.3k16](/packages/2lenet-crudit-bundle)[abydahana/aksara

Aksara is a modern, developer-friendly framework and CMS built on CodeIgniter 4, featuring rapid CRUD development, modular architecture, smart routing, flexible access control, API integration, and an AI assistant to make content management faster and smarter.

1141.2k](/packages/abydahana-aksara)

PHPackages © 2026

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