Открытие PDF файла в браузере вместо его загрузки
Я использую iTextSharp для печати панели в PDF при нажатии кнопки. После нажатия на кнопку PDF загружается на клиентский компьютер. Вместо этого мне нужно, чтобы PDF файл открывался в браузере вместо загрузки. В браузере пользователь сможет загрузить PDF на свой компьютер.
Я использую следующий код:
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();
Ответы
Ответ 1
Измените content-disposition
на inline
вместо attachment
.
Вторая строка вашего фрагмента будет
Response.AddHeader("content-disposition", "inline;filename=" + filename + ".pdf");
См. Content-Disposition: Каковы различия между "inline" и "и" вложение" для более подробной информации.
Ответ 2
Попробуйте этот код:
Действие:
Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".pdf");
Открыть в новой вкладке/окне:
@Html.ActionLink("view pdf", "getpdf", "somecontroller", null,
new { target = "_blank" })
ИЛИ
<a href="GeneratePdf.ashx?somekey=10" target="_blank">
Ответ 3
Вы должны посмотреть заголовок Content-Disposition; например, установка "Content-Disposition" на "attachment; filename = FileName.pdf" подскажет пользователю (обычно) диалоговое окно "Сохранить как: FileName.pdf", а не открывает его. Это, однако, должно исходить от запроса, который выполняет загрузку, поэтому вы не можете сделать это во время перенаправления. Однако ASP.NET предлагает Response.TransmitFile для этой цели. Например (если вы не используете MVC, у которого есть другие предпочтительные параметры):
Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=FileName.pdf");
Response.TransmitFile(Server.MapPath("~/folder/Sample.pdf"));
Response.End();
Если вы попытаетесь открыть файл в apicontroller, переведите поток в файл bytesarray и затем заполните
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";
Я думаю, это поможет вам...