Roteiro
●

Introdução
–

Apresentação;

–

Bibliotecas para relatórios:
●

–

Bibliotecas para gráficos:
●

–

JPGraph, pC...
Apresentação
●

Clipper (1994-1998): comercial, bibliotecas, funções;

●

Delphi (1998-1999): automação, componentes;

●

...
Objetivo
●

O que não queremos:
–
–

●

Não queremos mini-curso de geração de relatórios;
Provavelmente a maioria já conhe...
Bibliotecas para relatórios
Relatórios em XLS
●

Bom para:
–
–

●

Relatórios tabulares (linhas, colunas);
Permite formatações, totalizações.

Spreads...
Relatórios em XLS
<?php
require_once 'Spreadsheet/Excel/Writer.php';
$workbook = new Spreadsheet_Excel_Writer('test.xls');...
Relatórios em XLS
<?php
require_once 'Spreadsheet/Excel/Writer.php';
$workbook = new Spreadsheet_Excel_Writer('test2.xls')...
Relatórios em PDF
●

Bom para:
–
–

Documentos (NFE, atestados, diplomas);

–
●

Quase qualquer coisa, relatórios tabulare...
Relatórios em PDF
<?php
require('fpdf/fpdf.php');
$pdf = new FPDF('P', 'pt', 'A4');
$pdf->AddPage();
$pdf->SetFont('Courie...
Relatórios em PDF
<?php
require('fpdf/fpdf.php');
$pdf = new FPDF('P', 'pt', 'A4');
$pdf->AddPage();
$pdf->SetFont('Arial'...
Relatórios em RTF
●

Bom para:
–
–

Documentos editáveis (contratos, cartas);

–

Trabalha com escrita de elementos de tex...
Relatórios em RTF
<?php
require 'PHPRtfLite/lib/PHPRtfLite.php';
PHPRtfLite::registerAutoloader();
$rtf = new PHPRtfLite;
...
Relatórios em RTF

Adianti Solutions Ltda © Pablo Dall'Oglio

Criando Relatórios com PHP

#14
Relatórios em RTF
<?php
require '...';
$dados
= array();
$dados[] = array( 1, 'Brazil', 'Ayrton Senna', 90);
$dados[] = ar...
Relatórios em RTF

Adianti Solutions Ltda © Pablo Dall'Oglio

Criando Relatórios com PHP

#16
Bibliotecas para gráficos
Gráficos
●

Algumas opções:
–

JpGraph (http://jpgraph.net/) - não ativa;
●

●

–

325Kb para gráfico de linhas, barras e ...
Gráficos com jpGraph
<?php
require_once ('jpgraph/src/jpgraph.php');
require_once ('jpgraph/src/jpgraph_line.php');
$dados...
Gráficos com jpGraph
<?php
require_once ('jpgraph/src/jpgraph.php');
require_once ('jpgraph/src/jpgraph_bar.php');
$dados ...
Gráficos com pChart
<?php
include 'pChart/class/pData.class.php';
// + pDraw e pImage
$dados = new pData;
$dados->addPoint...
Gráficos com pChart

Adianti Solutions Ltda © Pablo Dall'Oglio

Criando Relatórios com PHP

#22
Evolução
●

As bibliotecas evoluem constantemente;

●

Novas tecnologias surgem;

●

Nosso código não deve referenciar a b...
Acoplamento
Acoplamento
●

●

●

O acoplamento é quanto
um módulo (classe,
método) conhece e
depende de outro;
O objetivo é criar mode...
Acoplamento
●

É impossível criar um sistema com 0% de acoplamento.

●

Uma classe com BAIXO acoplamento:
–
–

●

Não depe...
Acoplamento
●

Acoplamento concreto:
–

RelatorioControl e FPDF estão fortemente acopladas;

–

RelatorioControl conhece m...
Acoplamento
●

●

●

●

●

Mas existem outra formas de dependências...
O objeto A envie uma mensagem para o objeto B sem t...
Acoplamento
Realização
<?php
interface IGenerator
{
function addPage();
function setFontColor($color);
function writeText(...
Acoplamento
Uso
<?php
class RelatorioControl
{
public function onGenerate(IGenerator $gen)
{
$gen->addPage();
$gen->setFon...
Acoplamento
●

●

Uma forma de diminuir o acoplamento é criando um
facade;
Oferece uma interface única para um conjunto de...
Acoplamento
<?php
class GraficoLinhas
{
public function __construct()
{
include 'class/pData.class.php';
include 'class/pI...
Implementações
Implementações
●

As interfaces das bibliotecas:
– PDF;
–
–

●

RTF;
HTML.

São muito diferentes entre si:
–

RTF é texto ...
Strategy
●

Permite a seleção de algoritmos durante a execução do sw;

●

Fornece um meio de declarar uma família de algor...
Table Writer's
●

Escritor de relatórios definido pela classe da esquerda;

contexto

Adianti Solutions Ltda © Pablo Dall'...
Table Writer's
<?php
// inclui as bibliotecas...
require_once 'app.reports/ITableWriter.iface.php';
$widths = array(70, 15...
Table Writer's
<?php
require_once 'app.reports/ITableWriter.iface.php';
// ...

Implementação

$widths = array(70, 150, 15...
Bridge
●

Separa uma abstração de sua implementação;

●

As duas podem variar de maneira independente;

●

Usa encapsulame...
Jeito tosco
●

Proliferação de níveis. Estrutura não-flexível;

●

Alto grau de acoplamento. O cliente especifica a classe...
Bridge
<?php
require_once 'app.reports/TChart.class.php';
require_once 'app.reports/TBarChart.class.php';
require_once 'ap...
Bridge
<?php
require_once 'app.reports/TChart.class.php';
require_once 'app.reports/TBarChart.class.php';
require_once 'ap...
Obrigado
●

Livro
–

●

Adianti Framework:
–

●

www.adianti.com.br/bkrpt
www.adianti.com.br/framework

Contato:
–

–

@pa...
Criando relatórios com PHP - PHP Conference Brasil 2013
Criando relatórios com PHP - PHP Conference Brasil 2013
Prochain SlideShare
Chargement dans…5
×

Criando relatórios com PHP - PHP Conference Brasil 2013

10 546 vues

Publié le

Publié dans : Technologie

Criando relatórios com PHP - PHP Conference Brasil 2013

  1. 1. Roteiro ● Introdução – Apresentação; – Bibliotecas para relatórios: ● – Bibliotecas para gráficos: ● – JPGraph, pChart; Desacoplamento: ● – XLS, PDF, RTF; A importância de desacoplar; Implementação: ● Strategy para relatórios; ● Bridge para gráficos. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #2
  2. 2. Apresentação ● Clipper (1994-1998): comercial, bibliotecas, funções; ● Delphi (1998-1999): automação, componentes; ● PHP (2000): SAGU (php+html+sql) ● PHP-GTK(2001): PHP só com classes; ● Agata Report (2001-2006); ● Design Patterns (2004): Aprendizado na Unisinos; ● PHP: Criando Aplicações Gráficas com PHP (2004); ● PHP: Programando com Orientação a Objetos (2007); ● Criando Relatórios com PHP (2011); ● Adianti Framework para PHP (2012). Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #3
  3. 3. Objetivo ● O que não queremos: – – ● Não queremos mini-curso de geração de relatórios; Provavelmente a maioria já conhece bem uma biblioteca; O que queremos: – Explorar várias bibliotecas e suas principais características; – Analisar boas formas de integrá-las em nossa aplicação; – Estudar padrões de projeto que podem ser utilizados para isso. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #4
  4. 4. Bibliotecas para relatórios
  5. 5. Relatórios em XLS ● Bom para: – – ● Relatórios tabulares (linhas, colunas); Permite formatações, totalizações. Spreadsheet Writer (304 Kb): – – Pequeno, funciona bem, mas sem novos releases; – ● http://pear.php.net/package/Spreadsheet_Excel_Writer Depende do pacote OLE, não gera XLSX (só XLS - BIFF). PHPExcel (4.3 Mb): – http://phpexcel.codeplex.com – Bastante ativo, maior, com muitas funcionalidades; – Trabalha com Open XML (XLSX). Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #6
  6. 6. Relatórios em XLS <?php require_once 'Spreadsheet/Excel/Writer.php'; $workbook = new Spreadsheet_Excel_Writer('test.xls'); // Cria uma planilha $worksheet = $workbook->addWorksheet('My first worksheet'); // escreve os dados $worksheet->write(0, $worksheet->write(0, $worksheet->write(1, $worksheet->write(1, $worksheet->write(2, $worksheet->write(2, $worksheet->write(3, $worksheet->write(3, 0, 1, 0, 1, 0, 1, 0, 1, 'Nome'); 'Idade'); 'Maria'); 30); 'Joao'); 31); 'Mariana'); 32); // Finaliza, gravando $workbook->close(); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #7
  7. 7. Relatórios em XLS <?php require_once 'Spreadsheet/Excel/Writer.php'; $workbook = new Spreadsheet_Excel_Writer('test2.xls'); $formato_bold = $workbook->addFormat(); $formato_bold->setBold(); $formato_title = $workbook->addFormat(); $formato_title->setBold(); $formato_title->setColor('white'); $formato_title->setPattern(1); $formato_title->setFgColor('gray'); $worksheet = $workbook->addWorksheet(); $worksheet->write(0, 0, "Titulo", $formato_title); $worksheet->write(1, 0, "Coluna 1", $formato_bold); $worksheet->write(1, 1, "Coluna 2", $formato_bold); $workbook->close(); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #8
  8. 8. Relatórios em PDF ● Bom para: – – Documentos (NFE, atestados, diplomas); – ● Quase qualquer coisa, relatórios tabulares; Posicionamento fixo dos objetos. FPDF (46k fpdf.php): – ● TCPDF (864k tcpdf.php): – ● http://www.fpdf.org (Bom, pequena, mas não ativa); http://www.tcpdf.org/ (Ativa, Grande, milhões de funcionalidades, baseada na FPDF, chars, codabar, forms); MPDF (1.3 Mb mpdf.php): – http://www.mpdf1.com/ (Ativa, Grande, Gera PDF baseado em HTML, boa com tables e formatações, FPDF based); Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #9
  9. 9. Relatórios em PDF <?php require('fpdf/fpdf.php'); $pdf = new FPDF('P', 'pt', 'A4'); $pdf->AddPage(); $pdf->SetFont('Courier', 'B', 16); $pdf->SetTextColor(50, 50, 100); $pdf->SetY(70); $pdf->SetX(260); // não desloca o cursor $pdf->Write(30, 'Titulo'); $pdf->Ln(30); // Espaçamento $txt = str_repeat('write ', 30); $pdf->SetX(200); // altera a posição X $pdf->SetTextColor(100, 50, 50); // tom de vermelho $pdf->SetFont('Times', 'B', 14); $pdf->Write(20, $txt); $pdf->Output('test.pdf'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #10
  10. 10. Relatórios em PDF <?php require('fpdf/fpdf.php'); $pdf = new FPDF('P', 'pt', 'A4'); $pdf->AddPage(); $pdf->SetFont('Arial','B',16); $pdf->Cell(510, 20, 'Titulo com borda', 1, 1, 'C'); $pdf->Ln(20); $pdf->SetFillColor(255,120,120); $pdf->Cell(170, 30,'Alinhado a esquerda', 1, 0, 'L', TRUE); $pdf->SetFillColor(170,255,120); $pdf->Cell(170, 30,'Alinhado ao centro', 1, 0, 'C', TRUE); $pdf->SetFillColor(100,100,255); $pdf->Cell(170, 30,'Alinhado a direita', 1, 1, 'R', TRUE); $pdf->Output('test2.pdf'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #11
  11. 11. Relatórios em RTF ● Bom para: – – Documentos editáveis (contratos, cartas); – Trabalha com escrita de elementos de texto e tabelas; – ● Relatórios tabulares; Abre bem no Word e LibreOffice. PhpRtfLite(372 Kb): – sf.net/projects/phprtf/ – Pequeno; – Funciona bem; – Ativa. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #12
  12. 12. Relatórios em RTF <?php require 'PHPRtfLite/lib/PHPRtfLite.php'; PHPRtfLite::registerAutoloader(); $rtf = new PHPRtfLite; $secao = $rtf->addSection(); // adiciona seção $fontTitulo = new PHPRtfLite_Font(16, 'Arial'); $fontTitulo->setBold(); $fontTitulo->setUnderline(); $secao->writeText('Título', $fontTitulo, new PHPRtfLite_ParFormat('center')); $texto = 'Texto c/<b>negrito</b>,<i>italico</i>, <u>sublinhado</u>. '; $secao->writeText(str_repeat($texto, 12), new PHPRtfLite_Font(12), new PHPRtfLite_ParFormat('justify')); $rtf->save('test.rtf'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #13
  13. 13. Relatórios em RTF Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #14
  14. 14. Relatórios em RTF <?php require '...'; $dados = array(); $dados[] = array( 1, 'Brazil', 'Ayrton Senna', 90); $dados[] = array( 2, 'France', 'Alain Prost', 87); // ... $rtf = new PHPRtfLite; $table = $rtf->addSection()->addTable(); $table->addColumn(3); // larguras $table->addColumn(5); // ... $row = 1; foreach($dados as $linha) { $table->addRow(0.5); $col = 1; foreach ($linha as $coluna) { $table->writeToCell($row, $col, $coluna, $fonte, ...); $col++; } $row ++; } $rtf->save('test2.rtf'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #15
  15. 15. Relatórios em RTF Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #16
  16. 16. Bibliotecas para gráficos
  17. 17. Gráficos ● Algumas opções: – JpGraph (http://jpgraph.net/) - não ativa; ● ● – 325Kb para gráfico de linhas, barras e pizza; Interface das classes mais clean; PChart (http://www.pchart.net/) - não ativa; ● 692Kb no total. ● Interface mais fragmentada, gráficos mais bonitos; ● Geração em formato de imagem em desuso (HTML5, canvas); ● Outras opções: – Highcharts (http://www.highcharts.com/); – PHPChart (http://phpchart.net/). Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #18
  18. 18. Gráficos com jpGraph <?php require_once ('jpgraph/src/jpgraph.php'); require_once ('jpgraph/src/jpgraph_line.php'); $dados = array(100, 300, 200, 500, 200, 400, 300); $graph = new Graph(400,250); $graph->SetScale('textlin'); $graph->SetMargin(40,20,40,40); $graph->title->Set('Título do gráfico'); // Cria uma plotagem linear $lineplot = new LinePlot($dados); $lineplot->SetColor( 'maroon' ); $lineplot->SetWeight( 2 ); // espessura $lineplot->mark->SetType(MARK_FILLEDCIRCLE); $lineplot->mark->SetColor('blue'); $lineplot->mark->SetFillColor('red'); $lineplot->value->Show(); $graph->Add($lineplot); // adiciona a plotagem $graph->Stroke('j1.png'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #19
  19. 19. Gráficos com jpGraph <?php require_once ('jpgraph/src/jpgraph.php'); require_once ('jpgraph/src/jpgraph_bar.php'); $dados = array(120,80,170,40,100); $graph = new Graph(400,250); $graph->SetScale("textlin"); $graph->SetMargin(40,20,40,40); $graph->title->Set('Vendas por mes'); $barplot = new BarPlot($dados); $barplot->SetFillColor('orange'); $barplot->value->Show(); $barplot->value->SetColor("blue"); $graph->Add($barplot); $graph->Stroke('j2.png'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #20
  20. 20. Gráficos com pChart <?php include 'pChart/class/pData.class.php'; // + pDraw e pImage $dados = new pData; $dados->addPoints(array(23, 21, 14, 12, 8, 6),'Chile'); $dados->addPoints(array( 4, 10, 12, 14, 20, 23),'Canadá'); $dados->addPoints(array('Janeiro','Fevereiro','Março',...); $dados->setAbscissa('Meses'); $imagem = new pImage(700, 330, $dados); // borda $imagem->drawRectangle(0, 0, 699, 329,array('R'=>0,'G'=>0,'B'=>0)); $imagem->setFontProperties(array('FontName'=>'verdana',...)); $imagem->setGraphArea(60,40,650,280); $scaleSettings = array('XMargin'=>10,'YMargin'=>10); $imagem->drawScale($scaleSettings); // escala $imagem->drawLineChart(array('DisplayValues'=>TRUE)); $imagem->render('c1.png'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #21
  21. 21. Gráficos com pChart Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #22
  22. 22. Evolução ● As bibliotecas evoluem constantemente; ● Novas tecnologias surgem; ● Nosso código não deve referenciar a biblioteca utilizada; ● Devemos separar nosso código do código de terceiros; ● Isso tudo, para facilitar o reuso e a evolução. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #23
  23. 23. Acoplamento
  24. 24. Acoplamento ● ● ● O acoplamento é quanto um módulo (classe, método) conhece e depende de outro; O objetivo é criar modelos com baixo acoplamento; O alto acoplamento diminui a reusabilidade de objetos porque objetos não podem ser usados sozinhos. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #25
  25. 25. Acoplamento ● É impossível criar um sistema com 0% de acoplamento. ● Uma classe com BAIXO acoplamento: – – ● Não depende de muitas outras e facilita a manutenção; Evita que as modificações produzam efeitos colaterais; Uma classe com ALTO acoplamento: – É menos inteligível isoladamente e menos reutilizável; – É mais sensível a mudanças nas classes da qual ela depende. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #26
  26. 26. Acoplamento ● Acoplamento concreto: – RelatorioControl e FPDF estão fortemente acopladas; – RelatorioControl conhece muito sobre FPDF. <?php class RelatorioControl { public function onGenerate() { $pdf = new FPDF('P', 'pt', 'A4'); $pdf->AddPage(); $pdf->SetFont('Courier', 'B', 16); $pdf->SetTextColor(50, 50, 100); $pdf->SetY(70); $pdf->SetX(260); $pdf->Write(30, 'Titulo'); $pdf->Output('test.pdf'); } } ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #27
  27. 27. Acoplamento ● ● ● ● ● Mas existem outra formas de dependências... O objeto A envie uma mensagem para o objeto B sem ter conhecimento da verdadeira classe desse último; Essa forma de dependência corresponde ao que chamamos de acoplamento abstrato; A acoplamento abstrato é preferível ao concreto. Classes abstratas e interfaces permitem implementar o acoplamento abstrato. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #28
  28. 28. Acoplamento Realização <?php interface IGenerator { function addPage(); function setFontColor($color); function writeText($height, $text); function setFontFace($font, $style, $size); function saveFile($path); } class PDFGenerator implements IGenerator { //... } class RTFGenerator implements IGenerator { //... } ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #29
  29. 29. Acoplamento Uso <?php class RelatorioControl { public function onGenerate(IGenerator $gen) { $gen->addPage(); $gen->setFontFace('Courier', 'B', 16); $gen->setFontColor('#FF0000'); $gen->writeText(30, 'Titulo'); $gen->saveFile('test.pdf'); } } ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #30
  30. 30. Acoplamento ● ● Uma forma de diminuir o acoplamento é criando um facade; Oferece uma interface única para um conjunto de interfaces de um subsistema. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #31
  31. 31. Acoplamento <?php class GraficoLinhas { public function __construct() { include 'class/pData.class.php'; include 'class/pImage.class.php'; } Mas e se quiséssemos Tornar a biblioteca Intercambiável? public function addSerie($legend, $data) … public function setTitle($title, $font) … public function draw() … } ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #32
  32. 32. Implementações
  33. 33. Implementações ● As interfaces das bibliotecas: – PDF; – – ● RTF; HTML. São muito diferentes entre si: – RTF é texto fluído; – PDF é por posicionamento fixo; – HTML é por marcação. ● Para usar todas elas de maneira intercalada... ● É necessário criar uma camada de compatibilização. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #34
  34. 34. Strategy ● Permite a seleção de algoritmos durante a execução do sw; ● Fornece um meio de declarar uma família de algoritmos; ● ● Permite encapsular estes algoritmos como um objeto, e torná-los intercambiáveis; Evita-se a criação de mega-classes com N métodos. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #35
  35. 35. Table Writer's ● Escritor de relatórios definido pela classe da esquerda; contexto Adianti Solutions Ltda © Pablo Dall'Oglio implementação Criando Relatórios com PHP #36
  36. 36. Table Writer's <?php // inclui as bibliotecas... require_once 'app.reports/ITableWriter.iface.php'; $widths = array(70, 150, 150, 100); $tr = new TTableWriterPDF($widths); $tr->addStyle('title', 'Arial', '10', 'B', '#ffffff', '#737373'); $tr->addStyle('data', 'Arial', '10', '', '#000000', '#ffffff'); $tr->addRow(); $tr->addCell('Código', 'left', 'title'); $tr->addCell('Nome', 'left', 'title'); $tr->addRow(); $tr->addCell('001', 'left', $tr->addCell('Ayrton Senna da Silva', 'left', 'data'); 'data'); $tr->addRow(); // ... $tr->save("saida1.pdf"); // salva ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #37
  37. 37. Table Writer's <?php require_once 'app.reports/ITableWriter.iface.php'; // ... Implementação $widths = array(70, 150, 150, 100); $tr = new TTableWriterPDF($widths); // cria os estilos $tr->addStyle('title', 'Arial', '12', 'B', '#ffffff', '#733131'); // atribui o escritor ao relatório $sr = new TSimpleReport; $sr->setReportWritter($tr); Contexto // adiciona as colunas do relatório $sr->addColumn('id', 'Código', 'center'); $sr->addColumn('nome', 'Nome', 'left'); // define o banco de dados e a consulta $sr->setDatabase('exemplos'); $sr->setQuery('SELECT id, nome, telefone, endereco from ...'); $sr->generate(); // gera o relatório $sr->save('saida4.pdf'); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #38
  38. 38. Bridge ● Separa uma abstração de sua implementação; ● As duas podem variar de maneira independente; ● Usa encapsulamento, agregação e herança para separar responsabilidades. Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #39
  39. 39. Jeito tosco ● Proliferação de níveis. Estrutura não-flexível; ● Alto grau de acoplamento. O cliente especifica a classe; ● Quantas novas classes para novo tipo de gráfico (gauge)? Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #40
  40. 40. Bridge <?php require_once 'app.reports/TChart.class.php'; require_once 'app.reports/TBarChart.class.php'; require_once 'app.reports/TPieChart.class.php'; // ... $data['maria'] = array( 1, 2, 3, 4, 5, 6, 7); $data['pedro'] = array(12, 3, 12, 4, 12, 4, 2); $data['joao'] = array( 9, 8, 7, 6, 5, 4, 3); $chart = new TBarChart(new TPChartDesigner); $chart->setTitle('Título do gráfico', NULL, NULL); $chart->setSize(500, 300); $chart->setXLabels(array('a', 'b', 'c', 'd', 'e', 'f', 'g')); $chart->setYLabel('label do eixo Y'); $chart->setOutputPath('tmp/teste.png'); $chart->addData('maria', $data['maria']); $chart->addData('pedro', $data['pedro']); $chart->addData('joao', $data['joao']); $chart->generate(); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #42
  41. 41. Bridge <?php require_once 'app.reports/TChart.class.php'; require_once 'app.reports/TBarChart.class.php'; require_once 'app.reports/TPieChart.class.php'; // ... // cria um gráfico de pizza usando a JPGraph $chart = new TPieChart(new TJPGraphDesigner); $chart->setTitle('Título do gráfico', NULL, NULL); $chart->setSize(500, 300); $chart->setOutputPath('tmp/teste2.png'); $chart->addData('maria', 40); $chart->addData('pedro', 30); $chart->addData('joao', 30); $chart->generate(); ?> Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #43
  42. 42. Obrigado ● Livro – ● Adianti Framework: – ● www.adianti.com.br/bkrpt www.adianti.com.br/framework Contato: – – @pablodalloglio – ● www.dalloglio.net fb.com/pablodalloglio Não esquecer de falar do Sorteio! Adianti Solutions Ltda © Pablo Dall'Oglio Criando Relatórios com PHP #44

×