Precisamos fazer isso melhorar!

Suponha que você tem um cabeçalho na página do seu relatório, como exemplo, John Doe Enterprises, Sales Report. Precisaremos de um elemento page (página), com 25 linhas, borda de 1 pixel, largura de 500 pixels, sem espaço entre as células, com um preenchimento interno de 5 pixels na célula, com header (cabeçalho) e footer (rodapé), e a cada página eu quero ver a soma do campo value (valor).
O arquivo novo XML, sales2.xml, vai ser assim:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<REPORT>
   <TITLE>Sales Report</TITLE>
   <BACKGROUND_COLOR>#FFFFFF</BACKGROUND_COLOR>
   <PAGE BORDER="1" SIZE="25" CELLSPACING="0" CELLPADDING="5" WIDTH="500">
      <HEADER>
         <ROW>
            <COL COLSPAN="5">John Doe Enterprises</COL>
         </ROW>
         <ROW>
            <COL COLSPAN="5">Sales Report</COL>
         </ROW>
      </HEADER>		
      <FOOTER>
         <ROW>
            <COL ALIGN="RIGHT" COLSPAN="4">page total</COL>
            <COL ALIGN="LEFT" NUMBERFORMATEX="2" TYPE="EXPRESSION">$this->getSum("value")</COL>
         </ROW>
      </FOOTER>		
   </PAGE>
   <GROUPS>
      <GROUP NAME="maingroup">
         <FIELDS>
            <ROW>
               <COL TYPE="FIELD">id</COL>
               <COL TYPE="FIELD">name</COL>
               <COL TYPE="FIELD">city</COL>
               <COL TYPE="FIELD">product</COL>
               <COL TYPE="FIELD">value</COL>
            </ROW>
         </FIELDS>
      </GROUP>
   </GROUPS>
</REPORT>
Crie um arquivo similar ao sales.php e altere $oRpt->setXML("sales.xml") to $oRpt->setXML("sales2.xml") (ou você pode usar o mesmo arquivo, é sua escolha) e rode o no navegador. Desta vez vai se parecer com isso:

sales.xml result file

Melhor, hein? Mas onde estão as cores ... espere! Precisamos fazer algumas explicações sobre as coisas novas antes de ir adiante.
Dê uma olhada no elemento PAGE. Ele tem alguns atributos como SIZE (tamanho da página - em números de linhas), CELLPADDING (espaço interno de cada célula), CELLSPACING (espaço entre as células) e WIDTH (comprimento).
A maior parte dos elementos do PHPReports tem um monte de atributos, mas um jeito legal de aprender sobre eles é lendo o manual PDF e o arquivo DTD.
O arquivo DTD é um arquivo de validação onde você pode submeter seu arquivo de layout XML para validação, checar se tudo está ok. Você precisa colocar uma linha como essa no seu arquivo XML para fazer isso:
<!DOCTYPE REPORT SYSTEM "PHPReport.dtd">
				
logo após a primeira linha, a linha de versão xml blá blá blá. Isso vai permitir o programa de validação usar, nesse caso, o arquivo PHPReport.dtd para validar o seu arquivo XML. Acredite, quando você faz arquivos XML (de qualquer tamanho), isso é muito útil para validar antes de mandar para o navegador.
Você pode usar uma ferramenta como o RXP para validar seu arquivo XML, a sintaxe é a seguinte:
rxp -V -o 0 <file.xml>
Uma coisa importante que aconteceu no arquivo XML acima é uma instrução no elemento PAGE FOOTER:
$this->getSum("value"). O que isso significa?
Significa que a instrução é parte de alguns métodos chamados métodos de agrupamento, que são métodos que você pode usar para pegar um resultado do grupo em processamento corrente. Resultados como soma, valor mínimo, valor máximo, média ... esses métodos são mais detalhados no manual PDF. Você precisa usar a referência $this-> antes do nome do método, para apontar para o grupo corrente.

Uma regra importante é quet toda vez que você usa uma função de agrupamento, o elemento COL deve ter um atributo TYPE="EXPRESSION". Desse modo o PHPReports vai avaliar tudo o que você tem no elemento COL e inserir o resultado lá. Você pode usar o atributo TYPE="EXPRESSION" para fazer alguns "hacks" também como por exemplo

<COL TYPE="EXPRESSION">"a data corrente é ".date("d/m/Y")</COL>

vai inserir a string com a data corrente e colocar o valor no elemento COL.