function formatDollars($row, $report, $column, $level, $value) { return '$' . number_format($value, 2); } // -------------------------------- // Report Column Definitions // -------------------------------- $reportColumns = array(new ReportColumn(array('name' => 'clientId', 'heading' => 'Client Id', 'align' => 'right', 'format' => 'number', 'decimalPlaces' => 0, 'relativeWidth' => 10)), new ReportColumn(array('name' => 'clientName', 'heading' => 'Client Name', 'align' => 'left', 'format' => 'string', 'relativeWidth' => 30)), new ReportColumn(array('name' => 'saleDate', 'heading' => 'Sale Date', 'align' => 'left', 'format' => 'string', 'relativeWidth' => 10)), new ReportColumn(array('name' => 'productId', 'heading' => 'Product Id', 'align' => 'right', 'format' => 'number', 'decimalPlaces' => 0, 'relativeWidth' => 10)), new ReportColumn(array('name' => 'productDescription', 'heading' => 'Product Description', 'align' => 'left', 'format' => 'string', 'relativeWidth' => 30)), new ReportColumn(array('name' => 'quantity', 'heading' => 'Quantity', 'align' => 'right', 'format' => 'number', 'decimalPlaces' => 0, 'relativeWidth' => 10, 'outputTotalsAtLevels' => array('grand', 'client', 'saleDate'))), new ReportColumn(array('name' => 'unitPrice', 'heading' => 'Unit Price', 'align' => 'right', 'format' => 'number', 'decimalPlaces' => 2, 'relativeWidth' => 10, 'formatCallback' => 'formatDollars')), new ReportColumn(array('name' => 'totalPrice', 'heading' => 'Total Price', 'align' => 'right', 'format' => 'number', 'decimalPlaces' => 2, 'relativeWidth' => 10, 'outputTotalsAtLevels' => array('grand', 'client', 'saleDate'), 'valueCalcCallback' => 'calcTotalPrice', 'formatCallback' => 'formatDollars'))); // -------------------------------- // Report Level Definitions // -------------------------------- $reportLevels = array(new ReportLevel(array('name' => 'grand', 'uniqueIdColumnNames' => array(), 'totalsDescription' => 'Grand Totals', 'totalsDescriptionLeftColumnName' => 'saleDate', 'totalsDescriptionColumnSpan' => 2)), new ReportLevel(array('name' => 'client', 'uniqueIdColumnNames' => array('clientId', 'clientName'), 'totalsDescription' => 'Client Totals', 'totalsDescriptionLeftColumnName' => 'saleDate', 'totalsDescriptionColumnSpan' => 2, 'reOutputHeadingAfterEachLevelTotal' => false)), new ReportLevel(array('name' => 'saleDate', 'uniqueIdColumnNames' => array('saleDate'), 'totalsDescription' => 'Date Totals', 'totalsDescriptionLeftColumnName' => 'saleDate', 'totalsDescriptionColumnSpan' => 2))); // -------------------------------- // Report Output Definitions // -------------------------------- $outputter = new ReportOutputter(); ///$outputter->setOutputFormat('html'); $outputter->setOutputFormat('pdf'); if ($outputter->outputFormat == 'xls') { $outputter->setWorkbookFilename('/tmp/x.xls'); } if ($outputter->outputFormat == 'pdf') { $outputter->setPDFFilename('/tmp/x.pdf'); } $report = new Report($reportColumns, $reportLevels, $outputter, 'Client Purchases by Date'); foreach ($rows as &$row) { $report->outputRow($row); } $report->finish(); $outputter->finish(); echo "{$outputter->output}\n";