0 évaluation0% ont trouvé ce document utile (0 vote)
120 vues8 pages
O documento descreve como usar o iReport e PHPJasperXML para gerar relatórios em PHP. O iReport é usado para criar layouts de relatórios e PHPJasperXML converte os arquivos JRXML do iReport em PDF. Um exemplo mostra como conectar um banco de dados, criar um relatório no iReport e gerar o PDF usando PHPJasperXML.
Description originale:
Titre original
Usando o iReport como gerador de relatórios para PHP.docx
O documento descreve como usar o iReport e PHPJasperXML para gerar relatórios em PHP. O iReport é usado para criar layouts de relatórios e PHPJasperXML converte os arquivos JRXML do iReport em PDF. Um exemplo mostra como conectar um banco de dados, criar um relatório no iReport e gerar o PDF usando PHPJasperXML.
O documento descreve como usar o iReport e PHPJasperXML para gerar relatórios em PHP. O iReport é usado para criar layouts de relatórios e PHPJasperXML converte os arquivos JRXML do iReport em PDF. Um exemplo mostra como conectar um banco de dados, criar um relatório no iReport e gerar o PDF usando PHPJasperXML.
29 de janeiro de 2010 por Marcus Vincius Souza Costa Veremos hoje uma soluo para utilizar um gerador de relatrios para a linguagem PHP. Consiste no uso do trabalho em conjunto de relatrios JasperReports e o pacote PHPJasperXML. O que me motivou a buscar esta soluo foi a procura por um gerador de relatrios para PHP, na grande maioria das vezes com insucesso. A linguagem PHP extremamente flexvel e muitos desenvolvedores que a utilizam, quando necessitam desenvolver relatrios, fazem seu prprio cdigo, desenvolvendo suas prprias quebras de linha etc. S que o uso de softwares geradores de relatrios, os chamados reports generators, trazem inmeras vantagens ao desenvolvedor. Alm de ser mais profissional o uso destes softwares, pois poupa tempo de desenvolvimento por serem muito mais fceis de confeccionar do que se elaborar um cdigo para esta finalidade, tambm til quando se necessita de suporte, pois diversos usurios do mundo inteiro utilizam desses softwares. iReport O iReport um desenhador de layouts para JasperReports. muito utilizado por desenvolvedores da linguagem Java, sendo uma alternativa livre ao excelente Crystal Reports. Neste link o download pode ser feito, alm de conter tutoriais. necessrio ter a sute JDK j instalada para fazer a instalao do iReport. No o foco do artigo a explicao de como utilizar o iReport. Alm de ser muito intuitivo e de fcil uso, til em praticamente todas as necessidades na confeco de um relatrio. Traz diversas opes como uso de cdigo de barras, sub-relatrios e etc. O iReport permite que os relatrios sejam gerados em XML, PDF, HTML, DOCX, ODT, dentre outros formatos. Ao inserir as informaes de conexo com o banco de dados (o iReport traz diversas opes como JDBC, Conexo com Hibernate, XML e etc), processo que pode ser visto aqui, gerado um arquivo de extenso jrxml. Ao ser compilado, um arquivo de extenso jasper tambm gerado (arquivo executvel do relatrio). Faz analogia linguagem Java, que tem o cdigo residente nos arquivos de extenso JAVA (no caso do iReport, extenso jrxml). Depois de compilados so gerados arquivos de extenso CLASS (no iReport, jasper). PHPJasperXML O PHPJasperXML possibilita a leitura de arquivos jrxml, feitos utilizando o iReport, para transform-los em relatrios no formato PDF, com o auxlio da classe FPDF. escrito em PHP e muito fcil de ser configurado. tambm uma soluo alternativa ao PHP/Java Bridge. Na pgina do projeto possvel fazer o download do cdigo. Alm de conter tutoriais. Para seu uso necessrio basicamente editar o arquivo setting.php, que contm as variveis indicativas da conexo com banco de dados. O arquivo PHPJasperXML.inc contm a classe PHPJasperXML, que faz todo o trabalho pesado de conectar com o banco de dados (vem configurada para MySQL), ler o contedo arquivo jrxml e junto com a classe FPDF, gerar o relatrio em PDF. Exemplo de utilizao Irei exemplificar o uso do iReport com a classe PHPJasperXML. Para nosso exemplo necessrio ter o SGBD MySQL instalado. Crie o banco de dados com os seguintes comandos: CREATE DATABASE ProjetoPHP;
USE ProjetoPHP;
CREATE TABLE usuarios (
id INT(11) NOT NULL AUTO_INCREMENT, nome VARCHAR(50),
PRIMARY KEY (id)
);
INSERT INTO usuarios (nome) VALUES ('PHP'), ('MySQL'), ('JasperReports'), ('PHPJasperXML'); Aps criar nosso banco de dados, chamado ProjetoPHP, o momento de elaborar o relatrio. Para nosso exemplo, o relatrio ser chamado de phpjasperxml.jrxml. A conexo com o banco de dados que criamos dever ser feita no iReport (esse processo exemplificado em um link no texto introdutrio do iReport, acima). Aps criada a conexo, vamos inserir a seguinte query no Report Query do relatrio (para ver como inserir queries no iReport, confira aqui): SELECT * FROM usuarios; Esta query nos retornar dois fields (id e nome) que devero estar no relatrio. Finalizando nosso relatrio, dever ser inserido um parmetro chamado descricao. Para saber como adicionar parmetros em um relatrio com o iReport, confira aqui. Depois de feito o download do PHPJasperXML, basta extrair a pasta class e o arquivo setting.php para a pasta de seu projeto. A figura abaixo mostra a elaborao deste relatrio no iReport:
Figura 1: Elaborao do relatrio no iReport. Para nosso exemplo, o projeto ser chamado relatorioPHP. No arquivo setting.php, voc deve informar o caminho para seu banco de dados, como a seguir: <?php
$server="localhost";
$db="phpjasperxml";
$user="root";
$pass="phpmaster";
$version="0.6d";
?> A varivel $version no precisa ser editada. Voc pode criar um arquivo que ir instanciar a classe PHPJasperXML. Vamos chamar este arquivo de exemplo.php e seu contedo descrito abaixo: <?php
include_once('class/fpdf/FPDF.php');
include_once("class/PHPJasperXML.inc");
include_once ('setting.php');
$xml = simplexml_load_file("phpjasperxml.jrxml"); //informe onde est seu arquivo jrxml
$PHPJasperXML = new PHPJasperXML();
$PHPJasperXML->debugsql=false;
$descricao=$_GET["descricao"]; //recebendo o parmetro descrio
$PHPJasperXML->arrayParameter=array("descricao"=>$descricao); //passa o parmetro cadastrado no iReport
?> Agora vamos testar nossa aplicao. Basta ir ao browser e digitar http://localhost/relatorioPHP/exemplo.php?descricao=HelloWord Se tudo ocorrer como o esperado, ser exibido o relatrio em PDF, de acordo com a figura 2:
Figura 2: Relatrio gerado O parmetro passado pelo mtodo GET e tratado no nosso arquivo exemplo.php. Como este parmetro j esperado pelo relatrio, definido em sua criao, repassado pela classe PHPJasperXML ao nosso relatrio. Uma observao que no momento da elaborao do iReport, no se deve colocar nenhum objeto (Fields, parmetros, Labels e etc) nas bandas Title e Column Header do relatrio. Isso porque a classe PHPJasperXML no trata essas bandas e os objetos contidos nela simplesmente no so exibidos no relatrio. Essa observao s vale caso voc queira utilizar o iReport com a classe PHPJasperXML, que o nosso caso. Nos relatrios gerados pelo iReport (e no pela classe PHPJapserXML), os elementos contidos nestas bandas so exibidos normalmente. Como foi dito, PHPJasperXML vem configurado para um conexo com MySQL. Para o que precisei foi necessrio adaptar esta classe ao PostgreSQL. Meu amigo Ronaldo Meneguite disponibilizou em seu site, em artigo publicado tambm por ele, a classe modificada, que pode ser vista aqui. * Gostaria de agradecer colega de trabalho, Jssica Boalente Carvalho, pela ajuda na procura desta soluo e na utilizao da mesma. Ao amigo Ronaldo Louro Meneguite, por postar em seu site a classe PHPJasperXML que modifiquei aos moldes do PostgreSQL e pela troca de experincias sobre o assunto. DB.PHP <?php $mysql_hostname = "localhost"; $mysql_user = "root"; $mysql_password = ""; $mysql_database = "web"; $bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Can't connect to database"); mysql_select_db($mysql_database, $bd) or die("Opps some thing went wrong"); ?>
LOGIN.PHP <?php include("db.php"); session_start(); if($_SERVER["REQUEST_METHOD"] == "POST") { // username and password sent from Form $username=mysql_real_escape_string($_POST['username']); $password=mysql_real_escape_string($_POST['password']); $password=md5($password); // Encrypted Password $sql="SELECT id FROM admin WHERE username='$username' and passcode='$password'"; $result=mysql_query($sql); $count=mysql_num_rows($result);
// If result matched $username and $password, table row must be 1 row if($count==1) { session_register("username"); $_SESSION['login_user']=$username;
public function getConn(){ return $this->_conn; } /* $bd = mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Can't connect to database"); mysql_select_db($mysql_database, $bd) or die("Opps some thing went wrong"); */ } ?>
//any space or new lines here ( before the open PHP tag ) will prevent the redirect <?php ini_set('display_errors', 1); //turn on error reporting when developing include("db.php"); session_start(); if($_SERVER["REQUEST_METHOD"] == "POST"){ $DB = new DB();
// username and password sent from Form $username = $_POST['username']; $password = $_POST['password']; $password = md5($password); // Encrypted Password - update this as others have stated $sql="SELECT id FROM admin WHERE username = ? and passcode = ?"; //http://php.net/manual/en/pdo.prepare.php $stmt = $DB->getConn()->prepare($sql); //http://php.net/manual/en/pdostatement.execute.php $stmt->execute( array( $username, $password ) ); //http://php.net/manual/en/pdostatement.fetchall.php $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
// If result matched $username and $password, table row must be 1 row if(count( $results ) ){ //session_register("username"); this is deprecated $_SESSION['login_user']=$username;
header("location: welcome.php"); exit(); //add exit here }else { $error="Your Login Name or Password is invalid"; } } ?> <form action="login.php" method="post"> <label>UserName :</label> <input type="text" name="username"/><br /> <label>Password :</label> <input type="password" name="password"/><br/> <input type="submit" value=" Login "/><br /> </form>