【问题标题】:Opening a PDF in browser instead of downloading it在浏览器中打开 PDF 而不是下载它
【发布时间】: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();

【问题讨论】:

    标签: c# asp.net pdf-generation


    【解决方案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";            
    

    我想它会帮助你...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-03
      • 2014-01-29
      • 1970-01-01
      • 2013-10-25
      相关资源
      最近更新 更多