使用iTextSharp打开另存为窗口

时间:2013-11-27 15:42:13

标签: c# asp.net asp.net-mvc asp.net-mvc-4 itextsharp

使用iTextSharp将网页保存为PDF时,有没有办法打开另存为窗口?现在我只是将它保存到一个设置文件中。

var pdfDoc = new Document();

const string folderPath = "C:\\SG-ListingPDFs\\";

bool isExists = Directory.Exists(folderPath);

if (!isExists)
    Directory.CreateDirectory(folderPath);

var writer = PdfWriter.GetInstance(pdfDoc, new FileStream("C:\\SG-ListingPDFs\\" + detailsViewModel.ListingNumber + ".pdf", FileMode.Create));
pdfDoc.Open();

....Code Here

pdfDoc.Add(table);

TempData["SavedPdF"] = true;
pdfDoc.Close();

2 个答案:

答案 0 :(得分:1)

您需要使用ActionResult方法返回文件并设置相应的请求标头。

public ActionResult Pdf()
{
    Response.AddHeader("Content-Disposition", "attachment;filename=YourFile.pdf");
    return File(yourPdfFile, "application/octet-stream");
}

File()有一些重载需要byte[]System.IO.Stream或磁盘上实际文件的路径。我对iTextSharp并不太熟悉,所以我无法帮助你,但这应该会让你走上正轨。

如果我的记忆对我有用,那么在特定的浏览器中需要标题(我在想IE)以获取弹出的保存对话框。

答案 1 :(得分:0)

我会将流创建为引用变量,即

var aFileName = string.Format("{0}.{1}", detailsViewModel.ListingNumber + "pdf";
var aStream =  new FileStream("C:\\SG-ListingPDFs\\" + aFileName);

然后将其传递到get实例中,如下所示:

var writer = PdfWriter.GetInstance(pdfDoc, aStream , FileMode.Create));

然后从你的控制器返回像FileResult这样的流。

public ActionResult SaveFile()
{   
    // processing to get the file etc....

    return File(filePath, aStream , aFileName);
}

上面的重要部分是aFileName参数,这是fileNameDownload参数,使其作为可下载文件打开。