使用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();

您需要一个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参数,它可以作为可下载文件打开。

最新更新