a2insights/jxrml-template-engine

Framework-agnostic JRXML template rendering engine.

Maintainers

Package info

github.com/a2insights/jxrml-template-engine

pkg:composer/a2insights/jxrml-template-engine

Transparency log

Fund package maintenance!

Nfse Nacional

Statistics

Installs: 10

Dependents: 1

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-07-26 18:25 UTC

This package is not auto-updated.

Last update: 2026-07-27 13:41:00 UTC


README

Engine PHP para renderizar templates JRXML sem dependência de Filament, Eloquent ou de uma aplicação específica.

Instalação

composer require a2insights/jxrml-template-engine

Em aplicações Laravel, o provider e a facade são descobertos automaticamente.

Uso

Um template pode ser acompanhado por um arquivo JSON:

{
    "parameters": [
        {
            "name": "NUMERO_NFSE",
            "source": "numero"
        },
        {
            "name": "PRESTADOR_NOME",
            "source": "prestador.nome",
            "default": ""
        }
    ],
    "datasource": {
        "type": "array",
        "source": "itens"
    }
}

Renderização:

use A2Insights\JxrmlTemplateEngine\JxrmlTemplateEngine;

$pdf = app(JxrmlTemplateEngine::class)->render(
    template: resource_path('templates/danfse.jrxml'),
    config: resource_path('templates/danfse.json'),
    source: $nfse,
);

Parâmetros informados diretamente têm precedência sobre os produzidos pelo mapper:

$pdf = $engine->render(
    template: $template,
    source: $nfse,
    config: $config,
    parameters: ['PRESTADOR_NOME' => 'Nome substituído'],
);

Mapper customizado

O mapper padrão aceita arrays, objetos, ArrayAccess e caminhos com pontos. Um consumidor pode alterar apenas parâmetros específicos:

use A2Insights\JxrmlTemplateEngine\Mappers\ConfigurableTemplateDataMapper;

final class DanfseTemplateMapper extends ConfigurableTemplateDataMapper
{
    protected function mapParameter(
        string $name,
        mixed $value,
        mixed $source,
        array $config,
    ): mixed {
        return match ($name) {
            'VALOR_TOTAL' => number_format((float) $value, 2, ',', '.'),
            default => $value,
        };
    }
}

$pdf = $engine->render(
    template: $template,
    config: $config,
    source: $nfse,
    mapper: new DanfseTemplateMapper,
);

Para controle completo, implemente A2Insights\JxrmlTemplateEngine\Contracts\TemplateDataMapper.

Configuração Laravel

php artisan vendor:publish --tag="jxrml-template-engine-config"

O arquivo publicado permite configurar um diretório de fontes e uma implementação customizada do processador JasperPHP:

return [
    'font_directory' => storage_path('app/fonts'),
    'processor' => App\Jasper\PdfProcessor::class,
];

Testes

composer test
composer analyse