Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

Afficher un état crystal report en PDF avec PHP


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Futur Membre du Club
    Afficher un état crystal report en PDF avec PHP
    Bonjour a tous

    j'ai conçu un état sous crystal report , j'utilise comme langage le PHP et Apache comme serveur web, j'arrive à exporter le document l'enregistrement sur disque dur, avec la méthode : $rpt_obj->Export(True);
    j'arrive à le sortir directement sur imprimante, avec la fonction : $rpt_obj->PrintOut();

    je veux savoir si je peut exporter l'etat directement en pdf et l'afficher , et es que je peut ouvrir l'etat dans ma page php ?

    voila , j'espère trouver une solution dans ce forum. merci et bonne journnée a tous.

  2. #2
    En attente de confirmation mail
    bonjour,

    es-tu en train de dire que tu as réussir à concevoir un état avec Crystal Reports (quelle version d'ailleurs), que tu l'as enregistrer et mis en ligne et que tu peux le vor via un site web ?

    je pensais que Crystal Reports avait abandonné le PHP au profit du .net ...

  3. #3
    Futur Membre du Club
    Bonjour USA Mike,

    je voulais dire que j'ai conçu un état en crystal reports j'ai reussit à l'aide de la fonction COM d'imprimer le rapport et aussi de l'enregistrer sur le disk mais sans afficher mon rapport.

    ce que je cherche maintenant c'est es possible d'afficher un etat dans une page web avec php ? ou es possible d'afficher l'etat en pdf a partir d'un code php toujours.?

    j'espère que c'est un peu claire, tu a dis que crystal a abondoné php pour .Net peut tu me donner plus de précisions sur ça.

    merci et bonne journnée .

  4. #4
    Futur Membre du Club
    Bonjour a tous,

    voila je voulez vous transmettre ce qui a été trouvé pour régler mon problème.
    le principe est de créer un etat en crystal reports , on l'enregistre puis on fait un passage de paramètre du php a crystal. enfin on creer le fichier pdf a partie de cet etat et on l'ouvre dans la page web.

    1. Ouverture du rapport

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    $app_obj = new COM("CrystalRuntime.Application") or Die ("Did not open");
    $etat="C:\...\nomEtat.rpt"; // donner le chemain du rapport
    $rpt_obj=$app_obj->OpenReport($etat);


    2. passage des paramètres

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    $rpt_obj->RecordSelectionFormula = "{nom_table.nom_du_champ1} =$varnum and {nom_table.nom_du_champ2}="."'". $var_string."'"....;

    3. Generer le fichier en pdf

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $rpt_obj->ExportOptions->DiskFileName="C:\...\nomFichier.pdf"; // chemain ou mettre le fichier pdf
    $rpt_obj->ExportOptions->PDFExportAllPages=true;
    $rpt_obj->ExportOptions->DestinationType=1; // Export to File
    $rpt_obj->ExportOptions->FormatType=31; // Type: PDF
    $rpt_obj->Export(false);
    $my_pdf="C:\...\nomFichier.pdf";


    3. ouverture du fichier pdf

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    header('Content-type: application/pdf');
    header('Content-Length: $len');
    //header('Content-Disposition: inline; filename="'.$my_pdf.'"');
    header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: pre-check=0, post-check=0, max-age=0');
    header('Pragma: anytextexeptno-cache', true);
    header('Cache-control: private');
    header('Expires: 0');
    header('Content-Disposition: inline; filename="'.$my_pdf.'"');
     
    readfile($my_pdf);

    ce code marche tres bien sur fire fox(je l'est testé) mais il y a un problème sur internet explorer. le ficher pdf ne s'affiche pas sur la page internet explorer ???!!! c'est comme si il n'arrive pas a lancer acrobat redaer .
    j'ai essayer de voir si dans acrobat reader l'option "display pdf in browser" elle est cochée ??!!!

    alors si une personne a une explication sur ça j'aimerai bien la connaitre .

    autre chose j'aimerai savoir comment faire un data grid en php ?

    bonne journée a tous.

  5. #5
    En attente de confirmation mail
    ok
    bonjour,

    Merci de ta réponse détaillée Sabrina ! c'est clair et rare.
    J'avais entendu parlé ya longtemps de cette solution en utilisant les objets COM comme tu fais
    $app_obj = new COM("CrystalRuntime.Application") or Die ("Did not open");
    .

    C'estle même principe que de réaliser un document avec Word, d'attaché de variable dedans pour le publipostage et de le faire ouvrir via ce procédé. Dans ce cas on peut que Word est aussi un outil dereporting :-)

    Par contre si je ne me trompe pas, ta soluition ne fonctionnera si le visiteur est sous Linux ou Mac. Car l'appel a COM est dédié à un nivaguateur fonctionnant sous windows (IE, FF, Opera). Je peux me tromper...
    En plus, peut-être qu'il faut avoir Crystal Report sur sa machine pour que ça fonctionne bien. as-tu essayé à partir de d'un poste où Crystal Reports n'est pas installé ?

    Pour ton problème sous IE je pense que ça marche pas à cause d'un truc de sécurité. Fouille dans les paramétres avancés (menu outils/option internet/onglet avancés) ou dans la gestions des plugins (outils/gérer les modules complémentaires).

    bonne continuation

  6. #6
    Futur Membre du Club
    Bonjour ,

    Merci pour ta réponse USA Mike, d'après ce que j'a lu sur ce lien http://www.php.net/manual/fr/intro.com.php je pense que tu a raison en disant que ça ne marchera pas peut etre pas sur des machine linux ou MAC... J'aimerais bien savoir quelle est la solution dans ce cas là ? encore une recherche .....

    pour ce qui est de crystal , ce n'est pas nécessaire de l'installer dans le poste client , j'ai testé ça.

    enfin il me reste toujours le problème de l'IE et du datagrid.......

    bonne journée.

  7. #7
    Nouveau Candidat au Club
    Résolution de l'affichage du pdf sur IE
    Pour tous ceux qui ont lu ce sujet et ne savent tjrs pas cmt afficher le pdf sour Internet Explorer, c'est simple.

    Placer les headers en début du code php.

    Pour ceux qui seront ennuyés par le fait qu'il en existe dans le code de Sabrina qui font appel à la variable $my_pdf, Sachez que vous pouvez omettre ces headers (du moins ça a marché chez moi)

    Et vous laissez juste la fonction readfile($my_pdf) en fin de fichier.

    Et voilà vous pouvez consulter vos états générés en format pdf, sous Internet Explorer également.

  8. ###raw>post.musername###
    Membre actif
    je vous donne la solution
    voila le code qui marchera sans posé de probleme sur IE
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
     
    ?php
    //Ouverture du rapport
    #######################################
    //merci futurist LOL
    #########################################
    //pour mis a jour de la base depuis crystal report
    //il faut mettre cela
    $db = 'intranet'; //nom de la base de données
    $host = 'localhost'; // nom de la machine hôte
    $user = 'root'; // nom de l'utilisateur
    $pwd = '';// mot de passe
     
    $dsn = "mysql:dbname=$db;host=$host";
    $app_obj = new PDO($dsn, $user, $pwd);
    ##################################
     
    $app_obj = new COM("CrystalRuntime.Application") or Die ("Did not open");
    $etat="C:\\wamp\\www\\requete\\utilisateur.rpt"; // donner le chemain du rapport
    $rpt_obj=$app_obj->OpenReport($etat);
     
     
    $rpt_obj->RecordSelectionFormula = "{nom_table.nom_du_champ1} =$varnum and {nom_table.nom_du_champ2}="."'". $var_string."'"....;
     
     
     
    $rpt_obj->ExportOptions->DiskFileName="C:\\wamp\\www\\requete\\nomFichier.pdf"; // chemain ou mettre le fichier pdf
    $rpt_obj->ExportOptions->PDFExportAllPages=true;
    $rpt_obj->ExportOptions->DestinationType=1; // Export to File
    $rpt_obj->ExportOptions->FormatType=31; // Type: PDF
    $rpt_obj->Export(false);
     
    ?>
     
     
    <?php /*
    header('Location:\requete\pdf.html');
    exit();*/
     
    // la fonction de redirection ------------ 
    function redir($url){ 
    echo "<script language=\"javascript\">"; 
    echo "window.location='$url';"; 
    //echo "window.open('$url','menuchd','toolbar=1, location=1, directories=0, status=0, scrollbars=1, resizable=1, copyhistory=0, menuBar=1, width=700, height=600, left=200, top=50');"; 
     
     
     
    echo "</script>"; 
    } 
    // Utiliser la redirection --------------- 
    redir("requete/\pdf2.html"); 
     
    ?>


    et dans la psge pdf2.html vous mettez
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    <html>
    <body>
     
    <META HTTP-EQUIV="Refresh" CONTENT="0;URL= http://localhost/requete/nomFichier.pdf"> 
     
     
     
     
    </body>
    </html>


    en fin trouvé lol
      0  0

  9. #9
    Nouveau membre du Club
    Bonjour,

    J'utilise Crystalreport dans PHP et mon problème est exactement en rapport avec le sujet de cette discussion alors je me permets de poster à la suite.

    Je souhaite afficher et imprimer des rapports en PDF dans une page web via PHP en utilisant Crystal report. Exactement comme dans l'exemple plus haut, je travaille sous ORACLE en SQL et j'utilise WAMp pour créer une interface PHP utilisateur à manier à interagir de simplement avec la BDD. Mais je rencontre une erreur PHP avec l'ouverture des rapports qui me bloque dans mon développement

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    set_time_limit(0);
    //Récupération du chemin de la page php en cours
    $path=$_SERVER['SCRIPT_FILENAME'];
    //echo $path;
    //echo '<br/>';
    //Transformation du chemin pour accéder au rapport
    $rpt=str_replace("Crystal.php", "Rapports/".$_GET['rap'].".rpt", $path);
    com_load_typelib("objectfactory.dll");
    $ObjectFactory= New COM("CrystalReports12.ObjectFactory.1");
    $crapp = $ObjectFactory->CreateObject("CrystalRunTime.Application");
    $creport = $crapp->OpenReport($rpt, 1);// on ouvre le rapport
    if ($creport->Database->Tables->Count>0)
    {//s'il contient des tables
    		$creport->Database->Tables->Item(1)->ConnectionProperties['User ID'] =  $_SESSION['login'];//on met les infos de connection
    		$creport->Database->Tables->Item(1)->ConnectionProperties['Password'] = $_SESSION['pass'];
    }
    if (trim($param)!="" && $creport->Database->Tables->Count>0)
    {//si on a une formule de selection d'enregistrements pour le rapport on l'insère dans le rapport
    	$creport->FormulaSyntax = 0;
    	if (trim($creport->RecordSelectionFormula)!="")
        {//si le rapport contient déja une formule on insère notre formule à la suite
    		$creport->RecordSelectionFormula=$creport->RecordSelectionFormula." and ".$param;
    	}


    Dans mon appli PHP quand je demande un raport sous crystal report j'obtient le code erreure suivant :
    Fatal error: Uncaught exception 'com_exception' with message '<b>Source:</b> Unknown<br/><b>Description:</b> Unknown' in C:\wamp\www\CG92\Crystal.php:39 Stack trace: #0 C:\wamp\www\CG92\Crystal.php(39): com->CreateObject('CrystalRunTime....') #1 {main} thrown in C:\wamp\www\CG92\Crystal.php on line 39
    Je ne comprend pas le problème, quand je lance directement les '.rpt' dans l'explorateur il se lance correctement avec crystal report. sa fait 3jours que je trouve pas la solution

    EDIT: la ligne 39 du code erreurs correspond a la ligne 11 dans l'extrait de code
    Merci

  10. #10
    Nouveau Candidat au Club
    Bonjour,

    J'utilise Crystal Reports XI R2, et je souhaite, comme la plupart d'entre vous, afficher et imprimer des états CR en PDF via PHP.

    J'arrive à générer des rapports en PDF, seulement j'ai un problème concernant le passage de paramètres : comment passer une date (au format YYYY/MM/JJ) en paramètre ?

    Voici une partie de mon script :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
     
    // Création de l'objet Crystal 
    $o_CrObjectFactory = new COM('CrystalReports115.ObjectFactory.1');
    $o_CrApplication = $o_CrObjectFactory->CreateObject("CrystalRunTime.Application");
    com_load_typelib('CrystalDesignRunTime.Application');
     
    // Chargement du rapport
    $o_CrReport = $o_CrApplication->OpenReport('C:\IntranetDev\usr\Intranet\Admin\Commande.rpt', 1);
     
    // Passage de paramètres au rapport
    try
    {
    	/*
    	$DDB = date('Y-n-d', mktime(0, 0, 0, 5, 18, 2011));
    	$DFN = date('Y-n-d', mktime(0, 0, 0, 5, 26, 2011));
    	*/
     
    	$DDB = '2011-5-16';
    	$DFN = '2011-5-26';
     
    	$o_CrReport->EnableParameterPrompting = 0;
    	$o_CrReport->ParameterFields(1)->AddCurrentValue($DDB);
    	$o_CrReport->ParameterFields(2)->AddCurrentValue($DFN);
     
    	echo "Parameters... done<br />";	
    }
    catch(Exception $e)
    {
    	echo 'Parameters error : '.$e->getMessage().'<br />';
            echo 'N° : '.$e->getCode().'<br />';
    }
     
    //  Sélection
    try
    {									
    	$o_CrReport->RecordSelectionFormula = "({Moyen.S17LIB} = 'ATR47'  
    OR {Moyen.S17LIB} = 'CRJ27' OR {Moyen.S17LIB} = 'CRJ71' 
    OR {Moyen.S17LIB} = 'ATR47' OR {Moyen.S17LIB} = 'FTD27-1' 
    OR {Moyen.S17LIB} = 'FTD27-2') 
    AND DATE({Liste_cour_salle.S31DTE}) >= DateValue('".$DDB."') 
    AND DATE({Liste_cour_salle.S31DTE}) <= DateValue('".$DFN."')";
    }
    catch(Exception $e)
    {
    	echo 'Selection formula error : '.$e->getMessage().'<br />';
            echo 'N° : '.$e->getCode().'<br />';
    }


    Lors de l'exécution du code, j'obtiens une erreur à la ligne 23 :
    Parameters error : Source: Unknown
    Description: Unknown
    N° : -2147352567
    Avez-vous une idée de la syntaxe à utiliser ? J'ai également ce problème de paramètre lorsque la valeur du paramètre se situe dans une liste déroulante.

    Autre question : comment récupérer la valeur de ces paramètres une fois qu'ils ont été renseignés ?

    Merci d'avance pour vos réponse !

    en3rgizR

  11. #11
    Membre émérite
    Citation Envoyé par en3rgizR Voir le message

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Chargement du rapport
    $o_CrReport = $o_CrApplication->OpenReport('C:\IntranetDev\usr\Intranet\Admin\Commande.rpt', 1);


    Lors de l'exécution du code, j'obtiens une erreur à la ligne 23 :
    moi j'aurai penché pour une erreur liée aux \ non échappés un peu avant...
    PHP fait nativement la validation d'adresse électronique .
    Celui qui a inventé mysql_connect(...) or die() est déjà mort plusieurs fois.

    Utilisez le bouton résolu!

  12. #12
    Membre à l'essai
    Une question complémentaire sur le runtime
    Bonjour,

    J'essaye également de lancer des rerports via PHP et bute dès le début.

    Que faut il installer sur la machine serveur Apache/Php, dans mon cas, easyphp ?

    Est que je dois installer Crystal Report Designer ou juste le Runtime ?

    J'ai installé un Runtime depuis cette adresse http://scn.sap.com/docs/DOC-7824/
    Mais j'ai le message d'erreur dans mon php suivant

    Uncaught exception 'com_exception' with message 'Failed to create COM object `CrystalRuntime.Application':

    J'ai oublié un composant ou je n'ai pas pris le bon runtime ?

###raw>template_hook.ano_emploi###