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();
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.
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">
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 ...