PHPJasper
, (*1)
Nota para servidores Linux, (*2)
Não esqueça de fornecer permissão 777 para o diretório /vendor/i4n/phpjasper/src/JasperStarter/bin e o arquivo binário jasperstarter, (*3)
Resolver problemas com fontes Windows
apt-get install ttf-mscorefonts-installer, (*4)
Introdução
Este pacote é a solução perfeita para compilar e processar relatórios Jasper (.jrxml & .jasper) com PHP puro ou através do Laravel Framework., (*5)
Por quê preciso do PHPJasper?
Alguma vez você precisou de um relatório complexo em PHP para seu sistema web?, (*6)
Eu já precisei e fui em busca de algumas soluções, a maioria delas é complexa e você precisa escrever HTML + CSS para gerar um PDF, isso não faz sentido, além de ser muito trabalhoso :), (*7)
Apresento para vocês JasperReports a melhor solução open source que existe para relatórios., (*8)
Texto tirado do site JasperSoft:, (*9)
A biblioteca JasperReports é o mecanismo de geração de relatórios de código aberto mais popular do mundo. É inteiramente escrito em Java e é capaz de usar dados provenientes de qualquer tipo de fonte de dados e gerar documentos perfeitos que podem ser visualizado, impressom ou exportadom em uma variedade de formatos de documentos, incluindo HTML, PDF, Excel, OpenOffice e Word ., (*10)
Exemplos do que você pode fazer:, (*11)
- Faturas
- Relatórios
- Listas
Requisitos
Notas sobre o Java
Verifique se o Java está instalado executando o comando:, (*12)
$ java -version
java version "1.8.0_101"
Java(TM) SE Runtime Environment (build 1.8.0_101-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.101-b13, mixed mode)
Se você obter esse retorno:, (*13)
command not found: java
Instale o java no: (Ubuntu/Debian), (*14)
$ sudo apt-get install default-jdk
Para instalar no: (centOS/Fedora), (*15)
# yum install java-1.8.0-openjdk.x86_64
Para o windows siga o link-> JDK e procure a versão mais apropriada para seu Sistema Operacional., (*16)
Execute o novamente o comando java -version e verifique se a saída está ok., (*17)
Instalação
- Instale o Composer se você ainda não possui e então rode o comando:
composer require i4n/phpjasper
Crie um arquivo 'composer.json' e escreva o seguinte código:, (*18)
{
"require": {
"i4n/phpjasper": "1.*"
}
}
Rode o comando:, (*19)
composer install
Você acaba de instalar PHPJasper, (*20)
Exemplos
O exemplo Hello World.
Vá para o diretório de exemplos na raiz do repositório (vendor/i4n/phpjasper/examples).
Abra o arquivo hello_world.jrxml com o JasperStudio ou seu editor favorito e dê uma olhada no código., (*21)
Compilando
Primeiro precisamos compilar o arquivo com a extensão .JRXML em um arquivo binário do tipo .JASPER, (*22)
Nota: Caso você não queira usar Jaspersoft Studio. É possivel compilar o seu arquivo .jrxml da seguinte forma:, (*23)
require __DIR__ . '/vendor/autoload.php';
use JasperPHP\JasperPHP;
$input = __DIR__ . '/vendor/i4n/phpjasper/examples/hello_world.jrxml';
$jasper = new JasperPHP;
$jasper->compile($input)->execute();
Esta comando compila o arquivo fonte hello_world.jrxml em um arquivo hello_world.jasper, (*24)
Processing
Agora vamos processar o nosso relatório:, (*25)
require __DIR__ . '/vendor/autoload.php';
use JasperPHP\JasperPHP;
$input = __DIR__ . '/vendor/i4n/phpjasper/examples/hello_world.jasper';
$output = __DIR__ . '/vendor/i4n/phpjasper/examples';
$jasper = new JasperPHP;
$jasper->process(
$input,
$output,
array("pdf", "rtf")
)->execute();
Agora olhe a pasta examples! :) Ótimo trabalho? Você tem 2 arquivos, hello_world.pdf e hello_world.rtf., (*26)
Check the API of the compile and process functions in the file src/JasperPHP/JasperPHP.php file., (*27)
Listando parâmetros
Consultando o arquivo jasper para examinar os parâmetros disponíveis no relatório:, (*28)
require __DIR__ . '/vendor/autoload.php';
use JasperPHP\JasperPHP;
$input = __DIR__ . '/vendor/i4n/phpjasper/examples/hello_world_params.jrxml';
$jasper = new JasperPHP;
$output = $jasper->list_parameters($input)->execute();
foreach($output as $parameter_description)
print $parameter_description . '
<
pre>';
Relatórios a partir de um banco de dados
Adicione os parâmetros específicos para seu banco de dados, (*29)
require __DIR__ . '/vendor/autoload.php';
use JasperPHP\JasperPHP;
$input = __DIR__ . '/vendor/i4n/phpjasper/examples/hello_world.jrxml';
$output = __DIR__ . '/vendor/i4n/phpjasper/examples';
$jasper = new JasperPHP;
$jasper->process(
$input,
$output,
array("pdf", "rtf"),
array("php_version" => phpversion()),
array(
'driver' => 'postgres',
'username' => 'vagrant',
'host' => 'localhost',
'database' => 'samples',
'port' => '5432',
), 'pt_BR' //locale
)->execute();
- Instale o Composer
composer require i4n/phpjasper
Crie um arquivo 'composer.json':, (*30)
{
"require": {
"i4n/phpjasper": "1.*"
}
}
-
Rode:, (*31)
composer update, (*32)
-
Adicione o provider ao array providers em config/app.php:, (*33)
JasperPHP\JasperPHPServiceProvider::class,, (*34)
-
Crie a pasta /report em /public directory, (*35)
-
Copie o arquivo hello_world.jrxml em /vendor/i4n/phpjasper/examples para a pasta: /public/report, (*36)
-
Rode php artisan serve, (*37)
-
Acesse localhost:8000/reports, (*38)
-
Verifique a pasta /public/report. Você tem 3 arquivos, hello_world.pdf, hello_world.rtf e hello_world.xml., (*39)
Copie o código abaixo para seu arquivo route.php, (*40)
use JasperPHP\JasperPHP;
Route::get('/reports', function () {
$output = public_path() . '/report/'.time().'_hello_world';
$report = new JasperPHP;
$report->process(
public_path() . '/report/hello_world.jrxml',
$output,
array('pdf', 'rtf', 'xml'),
array(),
array(),
'pt_BR' //locale
)->execute();
});
Neste exemplo nós geramos 3 arquivos: pdf, rtf and xml., (*41)
Relatórios a partir de um xml em PHP/Laravel 5.*
Veja como é fácil gerar um relatório com uma origem de um arquivo XML, (*42)
use JasperPHP\JasperPHP;
public function xmlToPdf()
{
$output = public_path() . '/report/'.time().'_CancelAck';
$ext = "pdf";
$data_file = public_path() . '/report/CancelAck.xml';
$driver = 'xml';
$xml_xpath = '/CancelResponse/CancelResult/ID';
$php_jasper = new JasperPHP;
$php_jasper->process(
public_path() . '/report/CancelAck.jrxml',
$output,
array($ext),
array(),
array('data_file' => $data_file, 'driver' => $driver, 'xml_xpath' => $xml_xpath))->execute();
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.time().'_CancelAck.'.$ext);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Length: ' . filesize($output.'.'.$ext));
flush();
readfile($output.'.'.$ext);
unlink($output.'.'.$ext);
}
Nota:, (*43)
Para usar os exemplos acima você precisa de uma cópia dos arquivos localizados em:, (*44)
\vendor\i4n\phpjasper\examples\CancelAck.jrxml
e
\vendor\i4n\phpjasper\examples\CancelAck.xml
para a pasta:
\public\report, (*45)
Relatórios a partir de um arquivo JSON em PHP/Laravel 5.*
Veja como é fácil gerar um relatório com uma fonte de um arquivo JSON:, (*46)
use JasperPHP\JasperPHP;
public function jsonToPdf()
{
$output = public_path() . '/report/'.time().'_Contacts';
$ext = "pdf";
$driver = 'json';
$json_query= "contacts.person";
$data_file = public_path() . '/report/contacts.json';
$php_jasper = new JasperPHP;
$php_jasper->process(
public_path() . '/report/json.jrxml',
$output,
array($ext),
array(),
array('data_file' => $data_file, 'driver' => $driver, 'json_query' => $json_query))->execute();
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.time().'_Contacts.'.$ext);
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Length: ' . filesize($output.'.'.$ext));
flush();
readfile($output.'.'.$ext);
unlink($output.'.'.$ext);
}
Nota:, (*47)
Para usar os exemplos acima você precisa de uma cópia dos arquivos localizados em:, (*48)
\vendor\i4n\phpjasper\examples\json.jrxml
e
\vendor\i4n\phpjasper\examples\contacts.json
para a pasta:
\public\report, (*49)
MySQL
Nós incluimos MySQL connector (v5.1.39) na pasta /src/JasperStarter/jdbc/, (*50)
PostgreSQL
Nós incluimos PostgreSQL (v9.4-1203) na pasta/src/JasperStarter/jdbc/, (*51)
MSSQL
Microsoft JDBC Drivers 6.0, 4.2, 4.1, and 4.0 for SQL Server
., (*52)
Varia de acordo com o tamanho do seu relatório, (*53)
Agradecimentos
A Cenote GmbH por JasperStarter., (*54)
A JetBrains pelo PhpStorm e todas as ótimas soluções., (*55)
Dúvidas?
Abra uma Issue, ou pesquise por Issues antigas., (*56)
Licença
MIT, (*57)
Contribuição
Contribua com a comunidade PHP e Laravel, fique a vontade para fazer um fork!!!, (*58)