iTextSharp:创建 PDF 文件时显示“打开/保存”对话框

Posted

技术标签:

【中文标题】iTextSharp:创建 PDF 文件时显示“打开/保存”对话框【英文标题】:iTextSharp: Display "Open/Save" dialog box when PDF file is created 【发布时间】:2013-08-23 04:03:46 【问题描述】:

我正在使用 iTextSharp 创建 PDF 文件(我使用 C#)。该文件创建良好;但是,它保存在一个文件夹中。该文件是响应链接按钮单击而创建的,我想显示“打开/保存”对话框,而不是将文件保存在文件夹中。 我使用以下内容:

using(MemoryStream ms = new MemoryStream())

    Document doc1 = new Document();
    PdfWriter pdfw = PdfWriter.GetInstance(doc1, ms);
    doc1.open();
    string sPath = Server.MapPath("PDF/");
    string sFileName = "Something.PDF";

    // create the PDF content

    doc1.Close();
    byte[] content = ms.ToArray();
    using (FileStream fs = FileStream.Create(sPath + sFileName))
    
        fs.Write(content, 0, (int)content.Length);
    

我做错了吗?它创建文件并将其保存在“blahblah/PDF”文件夹中,但不显示打开/保存对话框 bx。

【问题讨论】:

您没有标记此 ASP.Net,所以您是在使用桌面应用程序吗? 这是一个网络应用程序(.Net 3.5,C# 2.0) 【参考方案1】:

如果您已经拥有该文件,请使用Response.TransmitFile 方法将其刷新到用户的浏览器中。

Response.Clear(); 
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=buylist.pdf");
Response.TransmitFile(Server.MapPath("~/myfile.pdf"));

【讨论】:

感谢瓦希德。有没有办法在不先将文件保存到文件夹的情况下做到这一点?我想知道如果 100 个用户同时点击链接创建 PDF 文件,使用不同的标准生成数据会发生什么。 您可以使用 Response.BinaryWrite() 代替 Response.TransmitFile() 并将您的字节数组直接传递给它。 太棒了!那解决了它。它显示打开/保存,而无需先将文件写入文件夹。 Vahid 的建议为我指明了正确的方向,您更改完成。

以上是关于iTextSharp:创建 PDF 文件时显示“打开/保存”对话框的主要内容,如果未能解决你的问题,请参考以下文章

iTextSharp 创建带有空白页的 PDF

为啥PDF文件在AI里编辑保存PDF时显示出现未知错误

csharp 使用iTextSharp库根据文本框中的信息创建一个简单的PDF文件。

iTextSharp 正在生成损坏的 PDF

itextsharp利用模板生成pdf文件笔记

用Itextsharp 组件导出PDF 的文档的方法