2017 © Pedro PelĂĄez
 

library jasperphp

Pure PHP library to read JRXML files made with 'JasperSoft Studio' and generate reports in PDF

image

rctnet/jasperphp

Pure PHP library to read JRXML files made with 'JasperSoft Studio' and generate reports in PDF

  • Friday, June 1, 2018
  • by RogerioCastro
  • Repository
  • 2 Watchers
  • 1 Stars
  • 33 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 2 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

alt text, (*1)

JasperPHP

Library to generate reports created with the JasperSoft Studio application
Pure PHP library, without a java server or Jasper Server, (*2)

Please, consider donating funds to support us Donate, (*3)

See more blog, documentation, and more on https://jasperphp.net, (*4)

Export formats

PDF
XLS, (*5)

Supported tags/components

TAG/component Status TAG/component Status
Basic elements
Text Field OK Static Text OK
Image OK Break OK
Rectangle OK Line OK
SubReport* OK Barcode OK
Composite elements
Page Number OK Total Pages OK
Current Date OK Page X of Y OK
Bands
Title OK Page Header OK
Group OK Detail OK
Column Header OK Column Footer OK
Page Footer OK Sumary OK
Background OK Style OK
Frame OK dynamic table OK
  • Subreports are supported recursively and unlimited

Other features

  • sum, average,minimum, max of variables
  • read and calculate subreport variables
  • array of objects as input data
  • textfield with html render with data replacement
  • active record
  • Conditional styles ready too
  • support for Laravel DB Facade adding tag property name="net.sf.jasperreports.data.adapter" value="laravel.sqlsrv" on jrxml files or edit Default data adapter on report properties on JasperSoft Studio

  • , (*6)

    Generic sample

    
     * @version  2018.10.15
     * @access   restrict
     * 
     * 2015.03.11 -- create
     * 2018.10.15 -- revision and internationalize, add TLogger classes
     * */
    class TJasper {
    
        private $report;
        private $type;
        private $param;
    
        /**
         * method __construct()
         * 
         * @param $jrxml = a jrxml file name
         * @param $param = a array with params to use into jrxml report
         */
        public function __construct($jrxml, array $param) {
            $GLOBALS['reports'] = array();
            $xmlFile = $jrxml;
            $this->type = (array_key_exists('type', $param)) ? $param['type'] : 'pdf';
            //error_reporting(0);
            $this->param = $param;
            $this->report = new JasperPHP\Report($xmlFile, $param); // $GLOBALS['reports'][$xmlFile];
            switch ($this->type) {
                case 'pdf':
                    JasperPHP\Instructions::prepare($this->report);
                    break;
                case 'xls':
                    JasperPHP\Instructions::setProcessor('\JasperPHP\XlsProcessor');
                    JasperPHP\Instructions::prepare($this->report);
                    break;
                case 'xlsx':
                    //Process use 'PHPOffice/PhpSpreadsheet' 
                    JasperPHP\Instructions::setProcessor('\JasperPHP\XlsxProcessor');
                    JasperPHP\Instructions::prepare($this->report);
                    break;
            }
        }
    
        public function outpage($type = 'pdf') {
            $this->report->generate();
            $this->report->out();
            switch ($this->type) {
                case 'pdf':
                    $pdf = JasperPHP\Instructions::get();
                    $pdf->Output('report.pdf', "I");
                    break;
                case 'xls':
                    header('Content-Type: application/vnd.ms-excel');
                    header('Content-Disposition: attachment;filename="01simple.xls"');
                    header('Cache-Control: max-age=0');
                    // If you're serving to IE 9, then the following may be needed
                    header('Cache-Control: max-age=1');
                    // If you're serving to IE over SSL, then the following may be needed
                    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
                    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
                    header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
                    header('Pragma: public'); // HTTP/1.0
                    $objWriter = PHPExcel_IOFactory::createWriter(JasperPHP\Instructions::$objOutPut, 'Excel5');
                    $objWriter->save('php://output');
                    break;
                case 'xlsx':
                    header('Content-Type: application/vnd.ms-excel');
                    header('Content-Disposition: attachment;filename="01simple.xls"');
                    header('Cache-Control: max-age=0');
                    // If you're serving to IE 9, then the following may be needed
                    header('Cache-Control: max-age=1');
                    // If you're serving to IE over SSL, then the following may be needed
                    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
                    header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified
                    header('Cache-Control: cache, must-revalidate'); // HTTP/1.1
                    header('Pragma: public'); // HTTP/1.0
                    $objWriter = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx(JasperPHP\Instructions::$objOutPut);
                    $objWriter->save('php://output');
                    break;
            }
        }
    
        public function setVariable($name, $value) {
            $this->report->arrayVariable[$name]['initialValue'] = $value;
        }
    
    }
    
    require('autoloader.php');
    require('../../tecnickcom/tcpdf/tcpdf.php'); // point to tcpdf class previosly instaled , (probaly in composer instalations)
    require('../../phpoffice/phpexcel/Classes/PHPExcel.php'); // point to tcpdf class previosly instaled , (probaly in composer instalations)
    //require('../TCPDF/tcpdf.php'); // point to tcpdf class previosly instaled , (probaly in stand alone instalations)
    // on production using composer instalation is not necessaty
    
    //Assuming the 'xlsx' format use the 'phpoffice/phpspreadsheet' lib installation via 'composer require phpoffice/phpspreadsheet'
    
    $report_name = isset($_GET['report']) ? $_GET['report'] : 'testReport.jrxml';  // sql into testReport.txt report do not select any table.
    TTransaction::open('dev');
    TTransaction::setLogger(new TLoggerHTML('log.html'));
    $jasper = new TJasper($report_name, $_GET);
    $jasper->outpage();
    ?>
    
    

    Requirements

    • PHP 5.2+
    • "tecnickcom/tcpdf":"6.2.*"
    • "PHPOffice/PHPExcel" only of XLS export
    • "PHPOffice/PhpSpreadsheet" only of XLSX export

    How to use this sample

    Define database conections params into file config\dev.ini
    View file src\ado\TConection.php to define database type
    Sample URL:
    http://localhost/vendor/quilhasoft/JasperPHP/TJasper.class.php?param1=foo&param2=bar
    URL params passed into URL are the params defined into xmlr file.
    , (*7)

    Using composer

    Add "quilhasoft/jasperphp":"dev-master" into your composer config file and update/install, (*8)

    License

    • MIT License

    The Versions

    01/06 2018

    dev-master

    9999999-dev

    Pure PHP library to read JRXML files made with 'JasperSoft Studio' and generate reports in PDF

      Sources   Download

    The Requires

     

    by Rogerio Muniz de Castro

    pdf report relatĂłrio jaspersoft jrxml