在浏览器中打开 PDF 而不是下载它
Posted
技术标签:
【中文标题】在浏览器中打开 PDF 而不是下载它【英文标题】:Opening a PDF in browser instead of downloading it 【发布时间】:2012-08-18 15:44:05 【问题描述】:我正在使用 iTextSharp 在单击按钮时将面板打印到 PDF 中。单击按钮后,PDF 正在下载到客户的计算机上。而不是这个,我需要在浏览器中打开 PDF 而不是下载。用户可以通过浏览器将 PDF 下载到他的 PC。
我正在使用以下代码:
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
。
你的 sn-p 的第二行将是
Response.AddHeader("content-disposition", "inline;filename=" + filename + ".pdf");
更多详情请参阅Content-Disposition:What are the differences between "inline" and "attachment"?。
【讨论】:
谢谢它帮助了我。你能帮我吗? applying-styles-in-pdf-gridview-using-itextsharp @KrishnaThota 我很乐意,但不幸的是我没有那个答案。 面板内有一个标签,我将其制作为 PDF,但标签未在 PDF 中显示,您能帮帮我吗? 如何在新选项卡中打开 Pdf 文件,而不是在同一个选项卡中打开它? 正如另一个答案中提到的,为了在另一个选项卡/窗口中打开 PDF,您必须将链接的目标设置为"_blank"
。【参考方案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">
【讨论】:
content-dispositon
不应该是inline
吗?
我应该在哪里写@Html。东西?
我使用的是 asp:image 按钮而不是 <a/>
标签
你必须像这样使用anchor tag
<a><img /></a>
的asp 的insted 图像按钮
我没接你href="GeneratePdf.ashx?somekey=10"
这是什么行?我不是从 ashx 文件生成 pdf 的!我正在从同一页面生成 pdf【参考方案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 中的文件将流转换为字节数组然后填充内容
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";
我想它会帮助你...
【讨论】:
以上是关于在浏览器中打开 PDF 而不是下载它的主要内容,如果未能解决你的问题,请参考以下文章