使用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();
答案 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
参数,使其作为可下载文件打开。