none
Site Asp.net et report server en local RRS feed

  • Question

  • Bonjour a tous.

    Je viens de finir un site en asp. j'avai crée un rapport avec reporting services mais mon patron ne veut pas de cette solution. Il prèfère un rapport intégré. j'ai donc obtempérer et j'ai intégréer un report viewer à une page du site. Cela fonctionne mais j'ai un soucis.

    Je voudrais au lieu d'afficher mon rapport le telecharger (ou l'ouvrir en pdf). Lors de mes recherches, j'ai vu qu'un rapport en mode local était afficher en html par défaut. je suis donc obliger de choisir "PDF" dans une liste et de cliquer "Exportation". j'aimerai dès que je clique sur mon lien, obternir mon rapport en pdf. Sur mon serveur de rapport, c'était assez simple, je faisais :

    Code :
    Response.Redirect("http://MelchiorServer/ReportServer/Pages/ReportViewer.aspx?%2fCram&rs:Command=Render&rs:Format=HTML4.0&rc:Toolbar=false&IdCollaborator=" + id + "&SelectedDate=01/" + date + "");

    Pour accedder a mon rapport local je tape :

    Code :
    Response.Redirect("cram.aspx?rs:Format=pdf&rc:Toolbar=true");

    Mais il m'affiche toujours le rapport en mode Html.

    Quelqu'un aurait t'il une astuce ??

    merci
    dimanche 22 avril 2007 18:16

Réponses

  • Bonjour, 

    Même si cette demande est tombée aux oubliettes depuis le temps, je partage la solution que j'ai mis en place... (c'est grâce aux différents forums mettant en partage leurs connaissances que je mets ici ce petit récapitulatif !)

    Cela permet d'ouvrir sous format PDF dans un nouvel onglet du navigateur, un rapport généré et affiché dans le composant ReportViewer.

    • Sur mon formulaire ASP de départ (là où est affiché mon composant ReportViewer), ajout d'un bouton

    <asp:Button runat="server" ID="btnLien" OnClientClick="openInNewTab();" OnClick="btnLien_OnClick" Visible="false" CssClass="btn_imprimer"  Text="Impression PDF"></asp:Button>  

    et du script appelé sur l'évènement OnClientClick de ce bouton...

    <script type="text/javascript">
            function openInNewTab() {  
                window.document.forms[0].target = '_blank';
                setTimeout(function (){ window.document.forms[0].target = '';}, 0);
            }
        </script>

    • Dans la partie code-behind, le code appelé sur l'évènement OnClick de mon bouton...
     // variables de travail
                Warning[] warnings;
                string[] streamids;
                string mimeType, encoding, extension;
                //composant reportViewer : 
                //récupération des paramètres necessaires
                ReportViewer rp = this.rpvReportViewer;          
                rp.ProcessingMode = ProcessingMode.Remote;  
                byte[] bytes = rp.ServerReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamids, out warnings);
                // construction du PDF
                string pdfPath = Server.MapPath("~") + "pdf." + extension;            
                FileStream pdfFile = new FileStream(pdfPath, FileMode.Create);
                pdfFile.Write(bytes, 0, bytes.Length);
                pdfFile.Close();
                //paramétrage du fux de la réponse Http et mise en mémoire (le contexte est la nouvelle page, ouverte par le script ASP, sur le OnClientClick() du bouton)
                HttpContext.Current.Response.Buffer = true;
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.ContentType = mimeType; // ici : "application/pdf";
                HttpContext.Current.Response.BufferOutput = true;   
                HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=" + pdfFile.Name);
                HttpContext.Current.Response.BinaryWrite(bytes);
                HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
                HttpContext.Current.Response.Flush();

    mercredi 24 avril 2019 10:28