关于HTML代码,点击PDF下载是直接打开,而不是下载,怎么办?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于HTML代码,点击PDF下载是直接打开,而不是下载,怎么办?相关的知识,希望对你有一定的参考价值。

如何实现在点击PDF下载链接时,直接弹出一个下载的窗口.而不是在新的窗口打开这个PDF,
我写代码是<a href="../PDF/1DB.pdf" target="_new">
应该怎么写?

参考技术A <a href="路径/文件名.pdf" target=“_blank”>点击下载 文件名.pdf</a> 参考技术B html控制不了,需要服务器端脚本比如 php 的支持。本回答被提问者采纳 参考技术C 一般 直接<a></a>中如果是txt,pdf之类的会自动打开,不会出现下载的内容。
像word文档就可以试想这个功能!
参考技术D 这个html自己是实现不了的啊!需要程序来实现的!

在浏览器中打开 PDF 而不是下载它

【中文标题】在浏览器中打开 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 按钮而不是 &lt;a/&gt; 标签 你必须像这样使用anchor tag &lt;a&gt;&lt;img /&gt;&lt;/a&gt; 的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";            

我想它会帮助你...

【讨论】:

以上是关于关于HTML代码,点击PDF下载是直接打开,而不是下载,怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

如何打开放置在iframe html中直接访问阻止目录中的pdf文件

怎样让 pdf 文件直接下载而非在浏览器里打开

能把网页中打开的pdf文件直接保存下来而不使用下载吗?

在浏览器中打开 PDF 而不是下载它

在浏览器中打开 PDF 而不是下载它

强制浏览器下载 PDF 文档而不是打开它