使用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();
您需要一个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)中需要标题才能弹出另存为对话框。
我会将流创建为引用变量,即
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
参数,它可以作为可下载文件打开。