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

ASP.NET Discussion :

[ASP.NET 2.0][C#] Comment exporter en PDF un etat CrystalReport par programmation ?


Sujet :

ASP.NET

  1. #1
    Nouveau membre du Club Avatar de Louisa
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 36
    Points
    36
    Par défaut [ASP.NET 2.0][C#] Comment exporter en PDF un etat CrystalReport par programmation ?
    Bonjour

    Je crée des états avec CrystalReport
    Je cherche à exporter sous PDF des états d'impression sans passer par l'apercu avant impression et sans utiliser le bouton de la toolbar du CrystalReportViewer1.

    Je voudrai juste un bouton que lorsqu'on clique dessus , on a tout de suite l'export vers PDF qui s'effectue.

    Merci

  2. #2
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Voici une façon de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    ReportDocument _objReport = new ReportDocument();
    _objReport.FileName = ReportFileName;
     
    _objReport.SetDataSource(_reportDataSource);
     
    MemoryStream m_stream = (MemoryStream)_objReport.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
     
    Response.Clear();
    Response.Buffer = true;
    Response.ContentType = "application/pdf";
    m_stream.WriteTo(Response.OutputStream);
    Response.End();
    Le code ici, te génère le pdf et l'envoie au navigateur.
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  3. #3
    Nouveau membre du Club Avatar de Louisa
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Merci pour ton exemple de code mais je n'arrive pas à le faire fonctionner
    J'ai une erreur sur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        MemoryStream m_stream = (MemoryStream)_objReport.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
    En fait, je connais pas cette classe : MemoryStream
    et comment l'intégrer à mon projet web

    Merci d'avance

  4. #4
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    MemoryStream représente un flux en mémoire..

    Il faut faire un using de System.IO pour que cela fonctionne.
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  5. #5
    Nouveau membre du Club Avatar de Louisa
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Effectivement il fallait ajouter : using System.IO;
    Mais j'avoue que j'ai tjs un problème

    Load report failed.
    j'ai pourtant completer FileName et Set Datasource :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    _objReport._objReport.FileName = "Minute.rpt";
    _objReport.SetDataSource(CrystalReportSource1);

  6. #6
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Citation Envoyé par Louisa Voir le message
    Effectivement il fallait ajouter : using System.IO;
    Mais j'avoue que j'ai tjs un problème



    j'ai pourtant completer FileName et Set Datasource :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    _objReport._objReport.FileName = "Minute.rpt";
    _objReport.SetDataSource(CrystalReportSource1);
    Je pense que c'est parce qu'il ne trouve pas le fichier... essaye avec ceci :
    Server.MapPath("Minute.rpt");
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  7. #7
    Nouveau membre du Club Avatar de Louisa
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Ca fonctionne : Server.MapPath("Minute.rpt");

    mais nouvelle erreur sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :_objReport.SetDataSource(CrystalReportSource1);
    The data source object is invalid.

  8. #8
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    A quoi correspond-il ce CrystalReportSource1 ??
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  9. #9
    Nouveau membre du Club Avatar de Louisa
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Ca sert à connecter une source de données à un CrystalReport
    Qu'es ce que je dois y mettre sinon ?

  10. #10
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Je me suis mal exprimé...

    Tu dois fournir comme DataSource un accès vers les données qui te serviront pour générer le Rapport.

    Bien souvent, il s'agit d'une ou plusieurs tables dans un Dataset..

    Ce que je voulais savoir, c'est ce qu'il masque dans ton Code ? Une DataTable, un DataSet, ???
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  11. #11
    Nouveau membre du Club Avatar de Louisa
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Mon CrystalReportSource1 masque un dataset qui contient plusieurs tables

  12. #12
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Je pense qu'il faut vérifier que le DataSource est bien chargé... Tu l'initialise comment, via le code ou par le Designer ?
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  13. #13
    Nouveau membre du Club Avatar de Louisa
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Je l'ai tester avec le designer
    J'ai crée un CrystalReportViewer et cela fonctionne dedans, je vois bien mon impression.... mais ce n'est pas but l'apercu avant impression ...

  14. #14
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Ok, au moins c'est que ça fonctionne...

    Et si tu essayes, juste après ceci :
    _objReport.SetDataSource(CrystalReportSource1)

    de faire _objReport.DataBind();

    Ca donne quoi ?
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  15. #15
    Nouveau membre du Club Avatar de Louisa
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    y a pas de _objReport.DataBind();
    Ca n'existe pas

  16. #16
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Ha oui, juste...

    Heu.. tu ne saurais pas poster un bout de code pour que j'y vois un peu plus clair ?
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  17. #17
    Nouveau membre du Club Avatar de Louisa
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    RE

    J'ai tout d'abord une erreur sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _objReport.SetDataSource(CrystalReportSource1);
    The data source object is invalid.
    Il aime pas mon "CrystalReportSource1" ....

  18. #18
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Le tout est de trouver pourquoi.. mais sans code, ce n'est pas évident
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  19. #19
    Nouveau membre du Club Avatar de Louisa
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    54
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2006
    Messages : 54
    Points : 36
    Points
    36
    Par défaut
    Mon bouton

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    protected void Button1_Click(object sender, EventArgs e)
        {
            ReportDocument _objReport = new ReportDocument();
            _objReport.FileName = Server.MapPath("Minute.rpt");;
            _objReport.SetDataSource(CrystalReportSource1);
            _objReport.Refresh();
            MemoryStream m_stream = (MemoryStream)_objReport.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
            Response.Clear();
            Response.Buffer = true;
            Response.ContentType = "application/pdf";
            m_stream.WriteTo(Response.OutputStream);
            Response.End();
        }

    Et mon designer

    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
       <asp:Label ID="Labelidorder" runat="server" OnInit="InitLabel"></asp:Label>
        <asp:Label ID="LabelIdTopProject" runat="server" OnInit="InitLabel"></asp:Label>
        <asp:Label ID="Label1" runat="server" OnInit="InitLabel"></asp:Label>&nbsp;
        <CR:CrystalReportSource ID="CrystalReportSource1" runat="server">
            <Report FileName="Minute.rpt">
                <Parameters>
                    <CR:ControlParameter ControlID="Labelidorder" ConvertEmptyStringToNull="False" DefaultValue=""
                        Name="idorder" PropertyName="Text" ReportName="" />
                    <CR:ControlParameter ControlID="LabelIdTopProject" ConvertEmptyStringToNull="False"
                        DefaultValue="" Name="idTopProject" PropertyName="Text" ReportName="" />
                    <CR:ControlParameter ControlID="Label1" ConvertEmptyStringToNull="False" DefaultValue=""
                        Name="idmarket" PropertyName="Text" ReportName="" />
                </Parameters>
                <DataSources>
                    <CR:DataSourceRef DataSourceID="SqlDataSourceIVAssist" TableName="IVAssist" />
                    <CR:DataSourceRef DataSourceID="SqlDataSourceC" TableName="Customer" />
                    <CR:DataSourceRef DataSourceID="SqlDataSourceTC" TableName="TenderCustomer" />
                    <CR:DataSourceRef DataSourceID="SqlDataSourceFC1" TableName="FinalCustomer1" />
                    <CR:DataSourceRef DataSourceID="SqlDataSourceFC2" TableName="FinalCustomer2" />
                    <CR:DataSourceRef DataSourceID="SqlDataSourcecde" TableName="Cde" />
                    <CR:DataSourceRef DataSourceID="SqlDataSourceProduct" TableName="Product" />
                    <CR:DataSourceRef DataSourceID="SqlDataSourceCFC1" TableName="ContactFinalCustomer1" />
                    <CR:DataSourceRef DataSourceID="SqlDataSourceCFC2" TableName="ContactFinalCustomer2" />
                    <CR:DataSourceRef DataSourceID="SqlDataSourceCC" TableName="ContactCustomer" />
                    <CR:DataSourceRef DataSourceID="SqlDataSourceCTC" TableName="ContactTenderCustomer" />
                </DataSources>
            </Report>
        </CR:CrystalReportSource>
        &nbsp;&nbsp;<br />
        &nbsp;&nbsp; <a href="App_Code/Cde.xsd"></a>
        <CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true"
            ReportSourceID="CrystalReportSource1" BestFitPage="False" DisplayGroupTree="False" 
            EnableDatabaseLogonPrompt="False" EnableDrillDown="False" EnableParameterPrompt="False" 
            EnableTheming="False" EnableToolTips="False" HasCrystalLogo="False" HasDrillUpButton="False" 
            HasGotoPageButton="False" HasSearchButton="False" HasToggleGroupTreeButton="False" 
            HasViewList="False" Height="1121px" Width="767px" 
            style="border-right: gray 1px solid; border-top: gray 1px solid; border-left: gray 1px solid; border-bottom: gray 1px solid" 
            ReuseParameterValuesOnRefresh="True" />

  20. #20
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Ok, je comprends mieux maintenant...

    En fait, tu peux remplacer ton code dans le clic du bouton par ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    
    MemoryStream m_stream = (MemoryStream)CrystalReportSource1.ReportDocument.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
            Response.Clear();
            Response.Buffer = true;
            Response.ContentType = "application/pdf";
            m_stream.WriteTo(Response.OutputStream);
            Response.End();
    A la base, le code que je t'ai donné permet de générer un Report directement depuis le code.. En fait, toi, le report est déjà défini dans le designer, et tu lui donnais comme source, lui-même, ce pourquoi il ralait
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [ASP.NET 2.0][C#] Comment écrire dans un fichier Excel ?
    Par Louisa dans le forum Accès aux données
    Réponses: 8
    Dernier message: 19/12/2012, 18h43
  2. Réponses: 3
    Dernier message: 16/09/2008, 15h28
  3. Réponses: 2
    Dernier message: 04/08/2008, 11h13
  4. Réponses: 6
    Dernier message: 18/10/2007, 15h09
  5. Réponses: 3
    Dernier message: 08/03/2007, 17h12

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