How to get PHP variable in Ireport

1.3k Views Asked by At

I'm trying to generate a jasper report in my php application. I work on Symfony2. Actually I generate my report in my application but the problem is in Ireport, I didn't get the php variable I send from my php application. And my report is in Jasperserver when I'm done the report modification.

This is my action from my php application:

public function result_recherche_googleAction(){

    $em = $this->getDoctrine()->getManager ();

    $request = $this->getRequest();
    $id_pef = $request->request->get('id_pef');

    if ($request->isXmlHttpRequest()) {


       $jasperclient=new JasperClient();
       $lien=$jasperclient->getUrlManyParams($this->container,"RechercheGoogle",array("id_pef" => $id_pef));    


        return $this->get('templating')->renderResponse('gideBundle:Edition:res_edition_recherche_google.html.twig',array(
        //'trans'=>$pefs,
        'lien'=>$lien,
        ));
    //}
     }
    else {
        //return $this->feuillePEFAction();
        return new Response(json_encode($id_pef));
    }
}

This is the code from my report:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="RechercheGoogle" language="groovy" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="7e1de1d9-a08e-47ec-8af2-e93dbec288e7">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="id_pef" class="java.lang.Integer"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="270" splitType="Stretch">
            <staticText>
                <reportElement x="82" y="34" width="100" height="20" uuid="8969389a-851b-44e5-a88c-14a4b217fc47"/>
                <text><![CDATA[Coucou !!!]]></text>
            </staticText>
            <staticText>
                <reportElement x="252" y="21" width="240" height="58" uuid="1bebe360-cabf-485f-a158-befade8ee7a9"/>
                <textElement>
                    <font size="14"/>
                </textElement>
                <text><![CDATA[ID du PEF:  $P{id_pef}]]></text>
            </staticText>
            <textField>
                <reportElement x="322" y="125" width="100" height="20" uuid="eae36fce-573e-484c-8cca-e8b4007d5e2b"/>
                <textFieldExpression><![CDATA[$P{id_pef}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="224" y="109" width="100" height="20" uuid="2e2db24f-899b-45d0-9434-62cdd0f35171"/>
                <textFieldExpression><![CDATA[$P{id_pef}]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <pageHeader>
        <band height="35" splitType="Stretch"/>
    </pageHeader>
    <columnHeader>
        <band height="61" splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band height="125" splitType="Stretch"/>
    </detail>
    <columnFooter>
        <band height="45" splitType="Stretch"/>
    </columnFooter>
    <pageFooter>
        <band height="54" splitType="Stretch"/>
    </pageFooter>
    <summary>
        <band height="42" splitType="Stretch">
            <textField>
                <reportElement x="432" y="22" width="100" height="20" uuid="0d41b36b-f441-400c-af62-753fa3cb4b63"/>
                <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
            </textField>
        </band>
    </summary>
</jasperReport>

I hope I'm clear. I try everything and I search a lot but any information about my problem. I hope someone can help me because It's very important! If you want more information about my problem tell me.

EDIT:

This I put in symfony parameter.yml to make the link at jasperserver:

jasper:
hostname: localhost
tcpport: '8080'
parentfolder: reports/nightly
username: username
userpass: mdp
specialparams: '_flowId=viewReportFlow&standAlone=true&_datasource=nightlydatasource'

With a var_dump on my php variablre "*lien" i have this url:

string 'http://localhost:8080/jasperserver/flow.html?_flowId=viewReportFlow&standAlone=true&_datasource=nightlydatasource&ParentFolderUri=reports/nightly&j_username=username&j_password=mdp&reportUnit=%2freports/nightly%2fRechercheGoogle&id_pef=104039-01-01' (length=269)

And I call the report in my view. The report is call correctly but I didn't get my php variable in the report.

2

There are 2 best solutions below

4
On

You require a PHP library(third party) that generates PDF reports from the given jrxml document. this library can be downloaded from the following Git Repository https://github.com/chathurangat/PhpJasperLibrary

Once all the design is done, the it is time to integrate with your PHP application. make sure to download and import the PhpJasperLibrary in your PHP script. (copy both .jasper and .jrxml files into a same directory and give the reference in the PHP script)

<?php

//Import the PhpJasperLibrary
include_once('PhpJasperLibrary/tcpdf/tcpdf.php');
include_once("PhpJasperLibrary/PHPJasperXML.inc.php");


//database connection details

$server="192.168.0.11";
$db="lcs_ims";
$user="web";
$pass="abc123@#";
$version="0.8b";
$pgport=5432;
$pchartfolder="./class/pchart2";


//display errors should be off in the php.ini file
ini_set('display_errors', 0);

//setting the path to the created jrxml file
$xml =  simplexml_load_file("report/chathuReport.jrxml");

$PHPJasperXML = new PHPJasperXML();
//$PHPJasperXML->debugsql=true;
//$PHPJasperXML->arrayParameter=array("parameter1"=>1);
$PHPJasperXML->xml_dismantle($xml);

$PHPJasperXML->transferDBtoArray($server,$user,$pass,$db);
$PHPJasperXML->outpage("I");    //page output method I:standard output  D:Download file


?>

access the report_view.php file in your LAMP/WAMP server. yo will get the report in PDF format.

check link for more details

and if you want to get dynamic value then use sql function.


I generate my document well because in my application I call the Japer report and it appears correctly except on the parameter.

In Symfony I added in parameter.yml what allows me to connect to jasper like this:

jasper:
    hostname: localhost
    tcpport: '8080'
    parentfolder: reports/nightly
    username: username
    userpass: mdp
    specialparams: '_flowId=viewReportFlow&standAlone=true&_datasource=nightlydatasource'

Tien I have the url that you asked me. I got it by doing a var_dump of my link variable from the action of my controller like this:

$jasperclient=new JasperClient();
           $lien=$jasperclient->getUrlManyParams($this->container,"RechercheGoogle",array("id_pef" => $id_pef));   
           var_dump($lien); exit;

Here is the url:

string 'http://localhost:8080/jasperserver/flow.html?_flowId=viewReportFlow&standAlone=true&_datasource=nightlydatasource&ParentFolderUri=reports/nightly&j_username=username&j_password=mdp&reportUnit=%2freports/nightly%2fRechercheGoogle&id_pef=104039-01-01' (length=269)

I think this is execute on the jasper server. Because the application is used just under wamp server after the management of the reports it is the jasperserver that takes care of it And I forgot here is the view where I post the report:

<div>
    <div class="rech_form" style="width: 664px; height:100px; " >
        <input id="input_rech" 
                style="text-transform:uppercase; width: 512px; float: left;  height: 32px; border-radius: 0; border: none;  
                        background: url({{ asset('bundles/gide/images/input_rech.jpg') }}) ;
                        color: #92a4b0; font-family: 'Myriad Pro', Helvetica, Arial, sans-serif; font-size: 14px;" 
                        placeholder="Enter an EFP, TJ, Location ..." />

        <input type="button" value="{{ 'Recherche' }}"   id="bt_recherche_google"  onclick='recherche_google("{{ugpef}}")' />
       <!-- <button id="bt_rech">Research</button>-->
        <br />
        <div id="bloc_gauche" style="float:left;width:33%;"> 
            <input type="checkbox" id="choix_armoire" class="k-checkbox" />
            <label for="choix_armoire" class="k-checkbox-label"> Name Wardrobe </label>
            <br /><br />
            <input type="checkbox" id="choix_code_mire" class="k-checkbox" /> 
            <label for="choix_code_mire" class="k-checkbox-label"> Code Mire </label>
        </div>
        <div id="bloc_milieu" style="float:left;width:33%;margin-left:auto;">
            <input type="checkbox" id="choix_code_GMAO" class="k-checkbox" />
            <label for="choix_code_gmao" class="k-checkbox-label"> Code GMAO </label>
            <br /><br />       
            <input type="checkbox" id="choix_repere_depart" class="k-checkbox" /> 
            <label for="choix_repere_depart" class="k-checkbox-label"> Repère de Départ </label>
        </div>
        <div id="bloc droit" style="float:left;width:33%;margin-left:auto;">          
            <input type="checkbox" id="choix_libelle_appareil" class="k-checkbox" /> 
            <label for="choix_libelle_appareil" class="k-checkbox-label"> Device Label </label>
            <br /><br />    
            <input type="checkbox" id="choix_observation" class="k-checkbox" />
            <label for="choix_observation" class="k-checkbox-label"> Observation </label>
        </div>

    </div> 
         <!--<button class="buttonPro orange" id="bouton_close" onclick="closewindow();" type="button">Cancel</button>-->
    <div id="rapport_recherche_google"> </div>
 </div>        
<script>
  /*  var pef="{{ugpef}}";


$( document ).ready(function() {


    $('#bt_recherche_google').click(function() {
              alert(pef);
          });
});*/
function recherche_google(id_pef){
    alert(id_pef);

    $.ajax({
        type: 'POST',
        url : "{{ path('result_recherche_google')}}", 
        dataType : 'text', 
        data : {
            id_pef: id_pef // We give the typed string in the search field
                    },
        success : function(data){ // We prepare to return the data received thanks to the event of success
            console.log(data);
            $('#rapport_recherche_google').html(data);
        },
        error : function(erreur){
            alert("An error has occurred "+ erreur);
            console.log(erreur);
        }
    });
    }
</script>

As you could see I'm making an ajax call that sends what I typed into my input in my action (code given on my 1st message) and this call will incorporate this into a div (that's in j 'Really displays the jasper report):

<div style="width:100%;height: 780px;position:relative">
<div id="hider" style="background: url('/web/bundles/gide/images/banner_bkgd.png') repeat-x scroll 0 0 #2881BB;;display:block;position:absolute;top:2px;left:0;height: 26px; width: 100%;z-index: 10;"></div>
<iframe name="zone" id="zone"  src="{{lien}}" style=" height: 700px;width: 100%;position:absolute;left:0;top:0;"></iframe >
</div>

Here I hope to have given the right information if not the self.

0
On

In my report in JasperReports Server I just add an "input control" from iReport.

Look this is a view with JR Server from iReport (uou need to connect at JR Server in iReport):

jasperserver view from ireport

After I search my report in this view and I add and Input control in directory "Input Control" like this:

My report with input control

I just do right click in the directory "Input Control" and I click in "Create a local input control" and after I name my input control like my parameter from iReport and it's works.

Now I can send a php variable and I get this variable in my report.