我的ASP.NET应用程序使用以下代码将PDF文件返回给用户
Context.Response.Clear();
Context.Response.ContentType = "application/pdf";
Context.Response.TransmitFile(optionEntityCmd.PathToSave);
Context.Response.End();
此代码显示“另存为”浏览器对话框,是否可以在浏览器中直接加载PDF文件而不是“另存为”对话框?
答案 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{}