IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 8
    Points
    8
    Par défaut 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
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 347
    Points : 136
    Points
    136
    Par défaut
    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
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    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
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    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
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 347
    Points : 136
    Points
    136
    Par défaut 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
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    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
    Inscrit en
    Juillet 2009
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 1
    Points : 1
    Points
    1
    Par défaut 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. #8
    Membre actif
    Homme Profil pro
    Consultant SAGE X3
    Inscrit en
    Mai 2008
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Consultant SAGE X3

    Informations forums :
    Inscription : Mai 2008
    Messages : 208
    Points : 249
    Points
    249
    Par défaut 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

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2011
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 39
    Points : 31
    Points
    31
    Par défaut
    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
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    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
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    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
    tff
    tff est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 22
    Points : 19
    Points
    19
    Par défaut 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 ?

Discussions similaires

  1. [CR XI] Afficher un état crystal report dans une page ASP sur windows 7
    Par regisyves dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 29/01/2012, 12h03
  2. Réponses: 0
    Dernier message: 22/02/2011, 14h18
  3. Protéger un pdf créé depuis un état Crystal Report
    Par ikritt2 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/12/2007, 10h34
  4. Réponses: 16
    Dernier message: 10/11/2006, 14h09
  5. Réponses: 1
    Dernier message: 31/10/2006, 12h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo