web-dev-qa-db-fra.com

Ouverture d'un PDF dans le navigateur au lieu de le télécharger

J'utilise iTextSharp pour imprimer un panneau en PDF lors d'un clic sur un bouton. Après avoir cliqué sur le bouton, le PDF est en cours de téléchargement sur l'ordinateur du client. Au lieu de cela, il faut que le PDF soit ouvert dans un navigateur au lieu d'être téléchargé. Depuis le navigateur, l’utilisateur pourra télécharger le PDF sur son PC.

J'utilise le code suivant:

Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
pnl_print.RenderControl(hw);

StringReader sr = new StringReader(sw.ToString());
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
htmlparser.Parse(sr);
pdfDoc.Close();
Response.Write(pdfDoc);
Response.End();

sr.Close();
hw.Close();
sw.Close();
14
Krishna Thota

Changez le content-disposition en inline au lieu de attachment

La deuxième ligne de votre extrait serait alors 

Response.AddHeader("content-disposition", "inline;filename=" + filename + ".pdf");

Voir Contenu-Disposition: Quelles sont les différences entre "en ligne" et "pièce jointe"? pour plus de détails.

20
Alexis Pigeon

Essayez ce code:

Action:

Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".pdf");

Pour ouvrir dans un nouvel onglet/fenêtre:

@Html.ActionLink("view pdf", "getpdf", "somecontroller", null, 
                  new { target = "_blank" })

OR

<a href="GeneratePdf.ashx?somekey=10" target="_blank">
3
Krunal Mevada

Vous devriez regarder l'en-tête "Content-Disposition"; Par exemple, définir "Content-Disposition" sur "attachment; nomfichier = NomFichier.pdf" invitera l'utilisateur (généralement) avec une boîte de dialogue "Enregistrer sous: NomFichier.pdf" plutôt que de l'ouvrir. Ceci, cependant, doit provenir de la demande qui effectue le téléchargement, vous ne pouvez donc pas le faire pendant une redirection. ASP.NET offre cependant Response.TransmitFile à cette fin. Par exemple (en supposant que vous n'utilisez pas MVC, qui a d'autres options préférées):

Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=FileName.pdf");
Response.TransmitFile(Server.MapPath("~/folder/Sample.pdf"));
Response.End(); 

Si vous essayez d’ouvrir le fichier dans apicontroller, convertissez le flux en octets, puis remplissez le contenu.

HttpResponseMessage result = null;
result = Request.CreateResponse(HttpStatusCode.OK);
FileStream stream = File.OpenRead(path);
byte[] fileBytes = new byte[stream.Length];
stream.Read(fileBytes, 0, fileBytes.Length);
stream.Close();           
result.Content = new ByteArrayContent(fileBytes);
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = "FileName.pdf";            

Je pense que cela vous aidera ...

0
Skull