ASP.NET向用户显示PDF文件而不是“另存为”对话框

时间:2010-10-05 06:50:29

标签: asp.net pdf

我的ASP.NET应用程序使用以下代码将PDF文件返回给用户

Context.Response.Clear();
Context.Response.ContentType = "application/pdf";
Context.Response.TransmitFile(optionEntityCmd.PathToSave);
Context.Response.End();

此代码显示“另存为”浏览器对话框,是否可以在浏览器中直接加载PDF文件而不是“另存为”对话框?

3 个答案:

答案 0 :(得分:5)

您可以附加Content-Disposition标题:

Context.Response.AppendHeader(
    "Content-Disposition", 
    "inline; filename=foo.pdf"
);

答案 1 :(得分:0)

它是动态创建的文件吗?如果没有,你可以只是超链接或Response.Redirect我相信。

答案 2 :(得分:0)

我不确定经典的asp.net,但使用mvc,将其流式传输给用户可以做到你想要的:

MemoryStream stream = PDF.GeneratePDFByStream();
stream.Flush(); //Always catches me out
stream.Position = 0; //Not sure if this is required
return stream;

public static MemoryStream GeneratePDFByStream() {
    var doc1 = new Document();
    //use a variable to let my code fit across the page...
    string path = AppDomain.CurrentDomain.BaseDirectory + "PDFs";
    MemoryStream stream = new MemoryStream();
    PdfWriter writer = PdfWriter.GetInstance(doc1, stream);
    writer.CloseStream = false;

    // Actual Writing
    doc1.Open();
    // writing comes here, you will probably just load the PDF in a stream?
    doc1.Close();

    return stream;
}

你的MVC控制器会返回类似

的内容
return File(GetPDFStream(id), "application/pdf");

所以,我知道这不是您正在寻找的确切答案,但也许您应该尝试将您的PDF 流式传输给用户,因为它会在新的标签页中打开它曾经测试过它。

从我的头脑中,你应该得到类似的东西:

Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.OutputStream.Write( objMemoryStream.ToArray(), 0,        
Convert.ToInt32(objMemoryStream.Length)); 
Response.Flush(); 
try { Response.End(); } catch{}