我目前正在尝试解决以下问题:
var fileName = "monthly_report.pdf"
var document = new Document();
//DO SOME STUFF WITH THE DOCUMENT
MemoryStream stream = new MemoryStream();
doc.Save(stream, SaveFormat.Pdf);
byte[] bytes = stream.GetBuffer();
Response.Clear();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment; filename="+fileName);
Response.BinaryWrite(bytes);
Response.End();
基于此代码,我正在尝试显示 Aspose。Words 文档在浏览器中转换为 pdf / 尝试在浏览器中为所述文档创建下载对话框。
当我执行该操作时,没有错误消息。pdf 的内容随后会显示在 chrome 调试器的响应消息中。响应还具有适当的大小(pdf 为 60kb)。它根本不会开始下载或在浏览器中显示 pdf,我想知道为什么会这样。
我还尝试了 Aspose 提供的替代方案:
var resp = System.Web.HttpContext.Current.Response;
resp.Clear();
// Create Memory Stream Object
MemoryStream stream = new MemoryStream();
doc.Save(stream, SaveFormat.Pdf);
doc.Save(resp, fileName, ContentDisposition.Attachment, SaveOptions.CreateSaveOptions(
SaveFormat.Pdf));
resp.End();
这导致在响应中显示 pdf 而不是浏览器本身的结果完全相同。
执行此代码的控制器操作由 ajax 语句调用:
$("#btnReport").click(function () {
var datum = $("#hiddenDatum").val();
$.ajax({
type: "GET",
url: '@Url.Action("GenerateMonthlyReport", "Reporting")',
data: { datum: datum},
success: function (data) {
}
});
});
对我做错的任何建议将不胜感激。
编辑:我的研究表明 ajax 调用确实不起作用。如何根据我的控制器逻辑启动文件下载?