我使用iTextSharp生成了一个pdf,当它创建时,它会自动保存在我的代码中提供的位置,而不是在客户端的服务器上,当然也没有告诉用户任何东西.
我需要将它发送给客户端,我需要提示一个对话框询问用户他想要保存他的pdf的位置.
我该怎么办?
这是我的pdf代码:
using (MemoryStream myMemoryStream = new MemoryStream())
{
Document document = new Document();
PdfWriter PDFWriter = PdfWriter.GetInstance(document, myMemoryStream);
document.AddHeader("header1", "HEADER1");
document.Open();
//..........
document.Close();
byte[] content = myMemoryStream.ToArray();
// Write out PDF from memory stream.
using (FileStream fs = File.Create(HttpContext.Current.Server.MapPath("~\\report.pdf")))
{
fs.Write(content, 0, (int)content.Length);
}
Run Code Online (Sandbox Code Playgroud)
编辑
这是我想要http://examples.extjs.eu/?ex=download的结果示例
感谢您的回复,我修改了我的代码:
HttpContext.Current.Response.ContentType = "application/pdf";
HttpContext.Current.Response.AppendHeader( "Content-Disposition", "attachment; filename=test.pdf");
using (MemoryStream myMemoryStream = new MemoryStream())
{
Document document = new Document();
PdfWriter PDFWriter = PdfWriter.GetInstance(document, myMemoryStream);
document.AddHeader("Content-Disposition", "attachment; filename=wissalReport.pdf");
document.Open(); …Run Code Online (Sandbox Code Playgroud) 我有一个包含各种文本字段和两个按钮的表单 - 导出到Excel并导出为CSV.
用户可以将值提供给表单中的不同字段,然后单击其中一个按钮.
预期的行为是应该触发Ajax请求,并将字段值作为参数,并且应该下载所选文件(按钮点击的Excel/CSV)(我没有提交表单,因为需要在提交前的值).
我一直在使用以下代码成功下载Ajax请求的代码:
result = Ext.decode(response.responseText);
try {
Ext.destroy(Ext.get('testIframe'));
}
catch(e) {}
Ext.core.DomHelper.append(document.body, {
tag: 'iframe',
id:'testIframe',
css: 'display:none;visibility:hidden;height:0px;',
src: result.filename,
frameBorder: 0,
width: 0,
height: 0
});
Run Code Online (Sandbox Code Playgroud)
在文件是在服务器上物理创建的情况下,上面的代码工作正常.但是在我当前的项目中,文件不是在服务器上创建的,而是使用正确的标题将内容流式传输到浏览器.
因此,当文件在服务器上不存在时,有没有办法使用Ajax下载文件?只是补充一点,我有一长串参数需要发送到服务器,因此无法将它们全部添加到iframe的src中.
任何人都可以指导这个吗?
在此先感谢您的帮助.