Comment ouvrir un PDF dans une nouvelle fenêtre ?
Bonjour à tous,
J'ai un fichier PDF sur mon serveur et j'aimerais l'ouvrir (en code-behind) dans une nouvelle fenêtre.
J'ai réussi à ouvrir ce pdf
- dans la même fenêtre
- dans une nouvelle fenêtre MAIS après avoir choisi ouvrir parmis les choix proposés (ouvrir/enregistrer/annuler)...
J'aimerais que le pdf s'affiche dans une nouvelle fenêtre mais sans aucune intervention...
Comment faire ?
Par avance, merci.
En mixant un peu, on peut...
j'ai eu ce problème pour imprimer un PDF généré à partir d'un composant ReportViewer (le bouton Print ne s'affiche pas sous Chrome)...
Je ne sais pas du tout si c'est la meilleure solution, mais ça fonctionne... Si ça peut aider quelqu'un...:P
Côté formulaire ASP, création d'un bouton-Lien qui va permettre sur son évènement OnClientClick() d'appeler une fonction JavaScript, afin d'ouvrir la nouvelle page et sur son événement OnClick, en code-behind, d'instancier le flux du HttpContext.Current.Response...
exemple bouton :
<asp:Button runat="server" ID="btnLienPrint" OnClientClick="openInNewTab();" OnClick="btnLienPrint_OnClick" Visible="false" CssClass="btn_imprimer" Text="Impression PDF"></asp:Button>
script : (il n'est pas de moi : je l'ai copié-collé à partir d'un forum mais à la fin de mes recherches, je ne me souviens plus de l'auteur... désolée pour elle/lui et Merci !)
<script type="text/javascript"> function openInNewTab() { window.document.forms[0].target = '_blank'; setTimeout(function (){ window.document.forms[0].target = '';}, 0);} </script>
exemple code-behind sur le OnClick du 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 reste à l'identique sur 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();