MVC&;PDFSharp生成的pdf赢得';t下载
本文关键字:赢得 pdf 下载 amp PDFSharp MVC | 更新日期: 2025-01-25 12:47:42
我有一个pdfExport类,我在其中生成一个pdf。在这个类中,我有一个方法
public MemoryStream returnPDF()
{
using (MemoryStream stream = new MemoryStream())
{
pdfRenderer.PdfDocument.Save(stream, false);
return stream;
}
}
我的控制器看起来如下
[AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult Contingency_Report(List<int> ids)
{
pdfExport pdf = new pdfExport(ids);
MemoryStream stream = new MemoryStream();
stream = pdf.returnPDF();
return File(stream.ToArray(), "application/pdf", "contingency.pdf");
}
正如我在Chrome中看到的(按下F12键),响应返回pdf(响应选项卡),但该文件无法下载。在"响应"选项卡中看到结果之前,什么都不会发生。如何使其可供下载?我想让浏览器询问在哪里保存文件。
我解决了我的问题。如果有人需要帮助,那就是我所做的
视图:
$(function () {
$("#btnCont").click(function () {
var idsToSend = [];
var grid = $("#grid_Edit").data("kendoGrid");
var ds = grid.dataSource.view();
for (var i = 0; i < ds.length; i++) {
var row = grid.table.find("tr[data-uid='" + ds[i].uid + "']");
var checkbox = $(row).find(".checkbox");
if (checkbox.is(":checked")) {
idsToSend.push(ds[i].ID);
}
}
// alert(idsToSend);
// $.post("/Contigency/Contingency_Report", { ids: idsToSend});
var url = "";
url = server;
var getUrl = '@Url.Action("Download_Report", "Contigency")';
$.ajax({
url: url + "/Contigency/Contingency_Report",
type: 'post',
contentType: 'application/json',
data: JSON.stringify({
ids: idsToSend
}),
success: function (d) {
if (d.success) {
window.location = getUrl + "?fName="+ d.fName;
}
},
error: function () {
}
})
})
}
);
以及张贴和获取方法
public ActionResult Contingency_Report(List<int> ids)
{
MemoryStream workStream = new MemoryStream();
pdfExport pdf = new pdfExport(ids);
workStream = pdf.returnPDF();
workStream.Position = 0;
var fName = string.Format("Contingency-{0}", DateTime.Now.ToString("s"));
Session[fName] = workStream;
return Json(new { success = true, fName }, JsonRequestBehavior.AllowGet);
}
public ActionResult Download_Report(string fName)
{
var cd = new System.Net.Mime.ContentDisposition
{
FileName = fName+".pdf",
Inline = false,
};
var stream = Session[fName] as MemoryStream;
if (stream == null)
return new EmptyResult();
Session[fName] = null;
Response.AppendHeader("Content-Disposition", cd.ToString());
return File(stream, System.Net.Mime.MediaTypeNames.Application.Pdf);
}
就是这样!