# Aplicativos em PHP/Recursos Extras/Geradores de Relatórios
## QueryToPDF - Editor PHP de Relatórios PDF utilizando a classe TCPDF.

O QueryToPDF é um Editor de relatórios de forma visual, os relatórios podem em HTML ou somente PHP.
O diferencial é que para desenvolver os relatórios não é preciso inclusão de códigos PHP.
LINK para Teste - http://sofman.com.br/querytopdf/app_Login/
Vídeo de exemplo - https://www.youtube.com/watch?v=iKDmqMtaxcY

## BIRT - Business Intelligence and Report Tools

O BIRT é um gerador de relatórios aos moldes do Crystal Report e do iReport, que inclusive tem integração com o PHP e outras linguagens server side.
Download - http://download.eclipse.org/birt/downloads/

### Criando um Novo Projeto do Tipo Relatório

- New - Project - Business Intelligence and Report Tools - Report Project
- Clicar sobre o nome do Projeto criado com o botão direito e New - Report

### 1 - Criando um relatório partindo de um blank report design

- Crie um novo projeto
- Crie um novo Relatório
- Em File name entre com clientes.rptdesign e Next
- Em Report template deixe Blank Report e finish
- Observe que a janela de Layout (ao centro e à direita) exibe o nome do relatório acima e seu conteúdo está vazio. À esquerda temos a Paleta de Ferramentas para o design do relatório. Logo à direita da Paleta temos a aba Data Explorer, para a conexão com bancos de dados.

### 2 - Adicionar um Data Source (Fonte de dados)

Do tipo JDBC do PostgreSQL, para usar um banco de dados no nosso relatório.
- Clicar na aba Data Explorer (à direita da Paleta)
- Clicar com botão direito - New DataSource
- Selecionar JDBC Data Source - Digitar um nome (Usuário) e Next
- Deve antes ter o jdbc para o postgreSQL em algun diretório
- Clicar em Manage Drivers
- Clicar em Add e indicar o driver jdbc do portgresql
- Selecionar e OK
- Em Driver Class selecionar o driver correto
- Em Database URL entre com algo como:
jdbc:postgresql://127.0.0.1:5432/db_usuario
- Digite username e password do postgresql
- Clique em Test Connection
- Se tudo ok clique em OK

### 3 - Criar um Data Set

- Clicar em Data Sets com o botão direito e New DataSet
- Em Data set name entre com um nome (Usuário Ceará)
- Em Data source aceite o default
- Em data set type também aceite o default e clique em Next
- Na caixa da direita clique após o select e digite "nome, email". Clique após o from e dê um duplo clique no nome da tabela. Ao invés de digitar os campos também podemos efetuar duplos clique nos mesmos.
Para ter uma consulta dinâmica adicione parâmetros assim: "select nome,email from public.usuario WHERE nome LIKE " + params["nome"]
- Clique em Finish. Apenas clique em OK.
- Duplo clique no data set clientesceara à esquerda e clique em Preview Results para visualizar os registros e se certificar de que está tudo ok.
Veja que também existe suporte a JOIN. Basta clicar com o botão direito sobre Data Sets e New Join Data Set

### 4 - Layout do relatório

Tabelas (tables) interagem com todos os registros retornados por um data set. Isto torna fácil a exibição de registros em forma de linhas e colunas.
- Arraste o controle Table da paleta e solte no editor de layout. Será perguntado sobre quantas colunas e quantos detalhes. Deixe com 2 e 1 e OK e feche o Data Explorer, pois usaremos somente os campos nome e email.
- No Data Explorer, expanda Data Sets, então expanda Usuário Ceará. As colunas especificadas na consulta aparecem abaixo de Usuário Ceará.
- Arraste "nome" para a primeira célula do detalhe. De forma que fique na segunda linha e apareça o label na primeira.
Para mudar a formatação de qualquer componente do relatório apenas selecione e clique no botão abaixo, em Properties - Font ou outra formatação.
Clique em Preview para ver como está.
Também para uma visualização profissional vá em File - View

### 5 - Ordenando registros

- Abra o report no layout editor e selecione abaixo properties. No editor clique em Table (abaixo e à esquerda da área da tabela).
- Ao mover o mouse por essa região aparece Table, então clique nesse botão Table. Abaixo aparecerão as propriedades da Tabela.
- Clique na Aba Sorting. Clique em Add para adicionar uma expressão. Em Key selecione "nome" e deixe Accendente.
- Execute o Preview para ver o resultado.
Observe que nomes iniciados com maiúsculas aparecem no início da lista. O BIRT ordena dados tipo string usando códigos UCS2. Em conjuntos de caracteres baseados em ASCII, as letras maiúsculas têm valor semelhante às minúsculas. Para ordenar case-insensitivamente usar:
row["nome"].toUpperCase( )
Na expressão para ordenar.

### 6 - Adicionando Título ao Relatório

Para isso usaremos um controle Text e tags HTML.
Selecione o controle Text na Paleta e arraste para cima da tabela.
Ao aparecer o diálogo digite:

## Utilizando o BIRT com PHP ou simplesmente via Web
### Tutorial de Instalação e uso do Tomcat e do BIRT

J2SE Download - http://java.sun.com/javase/downloads/index.jsp
Aqui para baixar somente o JDK (baixei o JDK 5.0 Update 9)
https://sdlc2d.sun.com/ECom/EComActionServlet;jsessionid=65966D4F31A5BD1A572B8A9AB6B2BBDB# (Windows)
https://sdlc2d.sun.com/ECom/EComActionServlet;jsessionid=65966D4F31A5BD1A572B8A9AB6B2BBDB# (Linux)
Tomcat Download - http://tomcat.apache.org/
Direto na versão 5.5.20 - http://tomcat.apache.org/download-55.cgi#5.5.20
http://mirrors.uol.com.br/pub/apache/tomcat/tomcat-5/v5.5.20/bin/apache-tomcat-5.5.20.tar.gz (Linux)
http://mirrors.uol.com.br/pub/apache/tomcat/tomcat-5/v5.5.20/bin/apache-tomcat-5.5.20.exe (Windows)
Caso sua versão do J2SE seja 1.4 baixar também o JDK 1.4 Compatability Package (duprtiot não precisa):
http://mirrors.uol.com.br/pub/apache/tomcat/tomcat-5/v5.5.20/bin/apache-tomcat-5.5.20-compat.tar.gz (Linux)
http://mirrors.uol.com.br/pub/apache/tomcat/tomcat-5/v5.5.20/bin/apache-tomcat-5.5.20-compat.zip (Windows)

### Instalação e Configuração do J2SE

Executar
Mover para o diretório /opt
sudo mv jdk-1_5_0_09-linux-i586.bin
chmod u+s
sudo ./jdk-1_5_0_09-linux-i586.bin
Editar seu script de inicialização para adicionar a variável de ambiente JAVA_HOME:
sudo gedit /etc/bash.bashrc
JAVA_HOME=/opt/jdk1.5.0_09
CLASSPATH=.:$JAVA_HOME/lib/tools.jar
CATALINA_HOME=/home/ribafs/prog/tomcat # antes e após o igual não pode haver espaços
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH CATALINA_HOME
Para surtir efeito restart o ambiente gráfico fazendo um logoff ou Ctrl+Alt+Backspace.

### Instalando e configurando o Tomcat

- Descompactar apache-tomcat-5.5.20.tar.gz
- Criar a variável de ambiente para o Tomcat:
- Descompactar o apache-tomcat-5.5.20-compat.tar.gz no raiz do diretório do tomcat /home/ribafs/prog/tomcat

### Testando o Tomcat

Apontar o browser para o endereço http://localhost:8080

### Administrando o Tomcat

No Windows a instalação via Installer já deixa pronto.
Edite o arquivo /home/ribafs/prog/tomcat/conf/tomcat-users.xml e adicionar última linha abaixo:
Com usuário e senha (admin para ambos)
Abrir no browser em http://127.0.0.1:8080/admin/
Entre com admin e admin

### Instalando e usando o Visualizador de Relatórios do BIRT

Download - http://download.eclipse.org/birt/downloads/ (procure por Birt Runtime correspondente à versão do seu BIRT):
http://www.eclipse.org/downloads/download.php?file=/birt/downloads/drops/M-R1-2.2M1-200610171021/birt-runtime-2.2M1.zip
Descompactar e copiar o subdiretório WebViewerExample para o diretório /home/ribafs/prog/tomcat/webapps.
Renomear o WebViewerExample para birt-viewer (opcionalmente)
Abra o link no browser http://localhost:8080/manager/html
Entre com admin e admin.
À esquerda clique em /birt-viewer e veja que abre-se o visualizador web de relatórios do BIRT.
Caso deseje abrir um relatório seu já criado, copie para /home/ribafs/prog/tomcat/webapps/birt-viewer e chame no browser assim:
http://localhost:8080/birt-viewer/frameset?__report=seurelatorio.rptdesign&parametro=valordoparametro

### Instalando o Driver JDBC do seu SGBD

Copie para a pasta:
birt-viewer/WEB-INF/platform/plugins/org.eclipse.birt.report.data.oda.jdbc_2.2.0.v20061009-0630/drivers
postgresql-8.1-407.jdbc3.jar (no meu caso)
Observe que "v20061009-0630" vai depender da sua versão.

### Abrindo Relatório de Script PHP

Supondo que deseje abrir o relatório "rpt_produtos.rptdesign" na web. Depois de tudo pronto e de ter copiado o relatório para a pasta birt-viewer, basta chamar assim:
<a href=http://localhost:8080/birt_viewer/frameset?__report=rpt_produtos.rptdesign>Relatório</a>
Se preferir formas mais sofisticadas veja estas sugeridas na documentação do BIRT:

### Parâmetros de formulários

Deally, we could use PHP to create a UI form that prompts for the report parameters. The BIRT viewer creates this form in Java using information in the report design. Unfortunately, at present, there is no way to retrieve the raw parameter descriptions from the BIRT viewer using a URL. Instead, there are two alternatives we can use.
First, if we know the parameters ahead of time, we can design a custom form in PHP that prompts the user for them. This works if we have a small number of reports, or if we need to create a specialized parameter page for each report anyway.
Second, we can let the BIRT viewer display the parameter page using the frameset URL. Generating Reports Dynamically
Finally, PHP provides one additional BIRT integration option: the ability to generate report designs dynamically for a specific task. For example, suppose you have a bug tracking system, and you'd like your user to create their own reports via the web. You can ask the user for the columns to display, then use PHP to create a BIRT report design customized to display those columns. PHP is ideal for this: it allows us to insert scripting directly into HTML. Since a BIRT design is XML, and XML is close enough to HTML for PHP, we can "trick" PHP into generating a BIRT report design instead of an HTML page.
To generate a report design, do the following:
* Create a BIRT report design typical of the kind of report you want to create.
* Create a PHP template file that contains this design. Insert the contents of the design file in place of the HTML you'd usually put into a PHP file.
* Redirect PHP's output from the template file into a report design file.
* Use PHP to generate BIRT XML for the table headings and cells the user wants. Use your report design as a template for what is needed. Consult the ROM spec for details on various elements and properties.
* Within the data set in your template, create an SQL query that fetches the required columns. (Works with other data set types as well.)
* Use the code above to redirect the browser to run that report using the BIRT viewer.
The following PHP code redirects the output of a PHP page, template.inc, into a report design called temp.rptdesign:

### Opções avançadas

http://localhost:8080/birt-viewer/run?__report=report%5CSalesInvoice.rptdesign&OrderNumber=10010
List of Options
The available viewer options include:
Veja os originais para maiores detalhes:
http://www.eclipse.org/birt/phoenix/deploy/viewerSetup.php
http://www.eclipse.org/birt/phoenix/deploy/usingPHP.php
http://www.eclipse.org/birt/phoenix/deploy/viewerUsage.php

## Gerador de Relatório iReport

Site oficial - http://jasperforge.org/sf/projects/ireport

### Ótimo tutorial sobre o iReport, inclusive com o acesso via web (com java)

www.furutani.eti.br/tutoriais/Mini-Tutorial_Relatorios_Java_JasperReports_e_iReport.pdf

### Tutorial de iReport

http://www.javafree.org/javabb/viewtopic.jbb?t=3154

### Starting with JasperReports by Gregory Beumer

http://technology.amis.nl/blog/index.php?p=346

### Manual do iReport

http://jasperforge.org/sf/wiki/do/viewPage/projects.ireport/wiki/IReportManualV1.2.1

### iReport Documentação

http://jasperforge.org/sf/wiki/do/viewPage/projects.ireport/wiki/HomePage

### Tutorial JasperReports - IReports

HTML - http://web.archive.org/20070922150803/br.geocities.com/robertofurutani/java/Tutorial_JasperReports/
PDF - http://www.furutani.eti.br/tutoriais/Tutorial_Sub_Relatorio_ArrayList.pdf
Fontes - http://web.archive.org/20091027015822/br.geocities.com/robertofurutani/java/Tutorial_JasperReports/Tutorial.zip

### Outro tutorial em português

http://www.livramento.yu.com.br/tutoriais/ireport.html

### A Tutorial on Generating Reports by iReport

http://www.cise.ufl.edu/~otopsaka/CIS4301/ReportDemo/

## Gerando relatórios em PHP com fPDF

Site oficial - http://www.fpdf.org
Download - http://fpdf.org/en/download.php
Exemplos diversos - http://fpdf.org/en/script/index.php
Tutoriais - http://fpdf.org/en/tutorial/index.php
Manual em Pt_BR - http://fpdf.org/en/dl.php?id=90
Assistente em JavaScript para ajudar com o fPDF - http://sourceforge.net/projects/fpdfgenerator
Exemplo de uso com acesso ao SGBD PostgreSQL:
Este exemplo encontra-se em - http://fpdf.org/en/script/script11.php

### Tutorial muito bom - PDF Generation With PHP

http://www.devshed.com/c/a/PHP/PDF-Generation-With-PHP/

### Gerando Documentos PDF com PHP (fPDF)

http://www.unisinos.br/seminario/sdsl/_arquivos/Gerando_documentos_PDF_com_PHP.pdf