Pdf example

This example shows how to built the report as PDF file, to retrieve the data from the global array and to use the columnset feature to align each column.

The PHP script

<?php
/*
* test 20: pdf and columnset
*
* It show how to build a report about the product sold over two year
*/


require_once(
'../sptpl.php');
require_once(
'../sptpl.inc');


$t=new sptpl();
$t->LoadTemplate('test20.xml');

// test data
$ProdArray=array( array('year' => '2002',
                      
'period' => 'Q1',
                      
'prodA' => 10,
                      
'prodB' => 5),
                array(
'year' => '2002',
                      
'period' => 'Q2',
                      
'prodA' => 20,
                      
'prodB' => 9),
                array(
'year' => '2002',
                      
'period' => 'Q3',
                      
'prodA' => 30,
                      
'prodB' => 3),
                array(
'year' => '2002',
                      
'period' => 'Q4',
                      
'prodA' => 14,
                      
'prodB' => 5),
                array(
'year' => '2003',
                      
'period' => 'Q1',
                      
'prodA' => 12,
                      
'prodB' => 9),
                array(
'year' => '2003',
                      
'period' => 'Q2',
                      
'prodA' => 27,
                      
'prodB' => 8),
              );
$GLOBALS['ProdArray']=$ProdArray;
$t->SetVar("RepTitle","Product sold");
$t->run("test20.pdf");
?>

Second step, write the configuration file test20.xml

<?xml version='1.0' encoding='iso-8859-1' ?>

<template>

<!-- enable the Pdf output -->
<pagemanager>CPagePdf</pagemanager>

<!-- Notice, the font face is the font filename -->
<font id='title' face='Helvetica.afm' size='20' bold='y'/>
<font id='description' face='Courier.afm' size='14' />
<font id='tableHeader' face='Courier.afm' size='14' bold='y'/>
<font id='datum' face='Helvetica.afm' size='12'/>
<report>
  <!-- page size A5 -->
  <pagesize>
   <pageformat>A5</pageformat> <!-- only CPagePdf -->
  </pagesize>
  
  <!-- set a new columnset -->
  <columnset id='test1'>
   <column  leftpos='80' Width='100' align='left' />
   <column  leftpos='170' Width='70' align='left' />
   <column  leftpos='240' Width='70' align='left' />
  </columnset>

  <!-- Start the report contents, the title -->
  <beginreport fontid='title' align='center'>
   {$RepTitle}
  </beginreport>

  <row  fontid='description' vpos='relative' rowpos='20'>
  Product sold over two year
  </row>

  <block id='Sold' columnset='test1'>
   <!-- data from the GLOBAL array ProdArray -->
   <datasource>
    <varname>ProdArray</varname>
   </datasource>

   <counter name='TotalA' field='$prodA' />
   <counter name='TotalB' field='$prodB' />
   <counter name='NoItems' autoincrement='y' />

   <!-- one table each year -->
   <group key='year' level='1' name='YearGrouping'>
      <row vpos='relative' rowpos='20' column='1'>Year: {$year}</row>
      <row  />
      <counter name='TotalYearA' field='$prodA' />
      <counter name='TotalYearB' field='$prodB' />
      <counter name='NoRows' autoincrement='y' />
   </group>

   <body>
    <!-- table header -->
    <header fontid='tableHeader' column='1' vpos='relative' rowpos='20'>Period</header>
    <header fontid='tableHeader' column='2'>ProdA</header>
    <header fontid='tableHeader' column='3'>ProdB</header>
    <header fontid='tableHeader' column='1'>-------</header>
    <header fontid='tableHeader' column='2'>-----</header>
    <header fontid='tableHeader' column='3'>-----</header>
    
    <!-- table contents -->
    <row column='1'>{$period}</row>
    <row column='2'>{$prodA}</row>
    <row column='3'>{$prodB}</row>
   </body>

   <!-- totals for each year -->
   <endgroup name='YearGrouping'>
      <row column='1'>---------</row>
      <row column='2'>-------</row>
      <row column='3'>-------</row>
      <row column='1'>Total</row>
      <row column='2'>{$TotalYearA}</row>
      <row column='3'>{$TotalYearB}</row>
      <row column='1' vpos='relative' rowpos='20'>N.Rows:   {$NoRows}</row>
   </endgroup>
  </block>

  <row vpos='relative' rowpos='40' />
  <closereport>
Product A sold: {$TotalA}
Product B sold: {$TotalB}
Total Items:    {$NoItems}
  </closereport>
  <closepage>
   Sales Dep. - 10/02/2004
  </closepage>
</report>


</template>

And here you may see the output