Aplicativos em PHP/Recursos Extras/Geradores de Relatórios

QueryToPDF - Editor PHP de Relatórios PDF utilizando a classe TCPDF. editar

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:

<CENTER><B><span style="font-size: larger"> Relatório de Usuários do DNOCS </B></span><BR> 

<FONT size="small">Somente para uso interno</FONT><BR><BR> Relatório Gerado em <VALUE-OF>new Date( )</VALUE-OF></CENTER><BR><BR>


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:

<?xml version='1.0' encoding='utf-8'?>
<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="role1" password="tomcat" roles="role1"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="admin" password="admin" fullName="Tomcat Administrator" roles="admin,manager"/>
</tomcat-users>

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:

<?php
$fname = "./clientes.rptdesign";
// Redirect browser
$dest = "http://localhost:8080/birt-viewer/run?__report=";
$dest .= urlencode( realpath( $fname ) );
header("Location: $dest" );
?>


Passando parâmetros

<?php
$fname = "./clientes.rptdesign";
// Redirect browser
$dest = "http://localhost:8080/birt-viewer/run?__report=";
$dest .= ";sample=" . urlencode( $paramValue );
$dest .= urlencode( realpath( $fname ) );
header("Location: $dest" );
?>

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:

ob_start( );
require "template.inc";
$page = ob_get_contents( );
ob_end_clean( );
$fw = fopen( "temp.rptdesign", "w" );
fputs( $fw, $page, strlen( $page ) );
fclose( $fw ); 


Opções avançadas

http://localhost:8080/birt-viewer/run?__report=report%5CSalesInvoice.rptdesign&OrderNumber=10010

List of Options

The available viewer options include:

Option 	Description 	Values 	Default 	frameset 	run
__format 	The output format 	html or pdf 	html 	N 	Y
__isnull 	Identifies that a report parameter has a null value 	Parameter name 	None. Required. 	N 	Y
__locale 	Report locale 	Java locale value such as en, en-us or ch-zh. 	JVM locale 	Y 	Y
__report 	The path to the report design. 	  	None. Required. 	Y 	Y
__document 	The path to the report document. 	  	None. Required. 	Y 	N
reportParam 	Report parameter. 	As specified in the report design. 	As specified in the report design. 	Y 	Y

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

<?php
//Example FPDF script with PostgreSQL
//Ribamar FS - ribafs@dnocs.gov.br

define('FPDF_FONTPATH','font/');
require('fpdf.php');

$pdf=new FPDF();
$pdf->Open();
$pdf->AddPage();
$pdf->SetTitle('Exemplo de Relatório em PDF via PHP');

//Set font and colors
$pdf->SetFont('Arial','B',16);
$pdf->SetFillColor(255,0,0);
$pdf->SetTextColor(255);
$pdf->SetDrawColor(128,0,0);
$pdf->SetLineWidth(.3);

//Table header
$pdf->Cell(20,10,'SIAPE',1,0,'L',1);
$pdf->Cell(50,10,'Nome',1,1,'L',1);

//Restore font and colors
$pdf->SetFont('Arial','',10);
$pdf->SetFillColor(224,235,255);
$pdf->SetTextColor(0);

//Connection and query
$str_conexao='dbname=contabilidade port=5432 user=postgres password=postgres';
$conexao=pg_connect($str_conexao) or die('A conexão ao banco de dados falhou!');
$consulta=pg_exec($conexao,'select * from conveniologin');
$numregs=pg_numrows($consulta);

//Build table
$fill=0;
$i=0;
while($i<$numregs)
{
    $siape=pg_result($consulta,$i,'siape');
    $nome=pg_result($consulta,$i,'nome');
    $pdf->Cell(20,10,$siape,1,0,'R',$fill);
    $pdf->Cell(50,10,$nome,1,1,'L',$fill);
    $fill=!$fill;
    $i++;
}

//Add a rectangle, a line, a logo and some text
$pdf->Rect(5,5,170,80);
$pdf->Line(5,90,90,90);
$pdf->Image('mouse.jpg',185,5,10,0,'JPG','http://www.dnocs.gov.br');
$pdf->SetFillColor(224,235);
$pdf->SetFont('Arial','B',8);
$pdf->SetXY(5,95);
$pdf->Cell(170,5,'PDF gerado via PHP acessando banco de dados - Por Ribamar FS',1,1,'L',1,'mailto:ribafs@dnocs.gov.br');

$pdf->Output();
?>

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