放置生成的pdf文件而不将其保存在服务器上

时间:2011-11-09 09:56:28

标签: c# asp.net pdf-generation itextsharp

我有代码(在.ashx文件中),可以从PDF模板生成PDF文件。生成的pdf通过名称和代码进行个性化。我使用iTextSharp来执行此操作。

这是代码:

using (var existingFileStream = new FileStream(fileNameExisting, FileMode.Open))
    using (var newFileStream = new FileStream(fileNameNew, FileMode.Create))
    {
        var pdfReader = new PdfReader(existingFileStream);
        var stamper = new PdfStamper(pdfReader, newFileStream);

        var form = stamper.AcroFields;
        var fieldKeys = form.Fields.Keys;

        form.SetField("Name", name);
        form.SetField("Code", code);

        stamper.FormFlattening = true;

        stamper.Close();
        pdfReader.Close();
    }

context.Response.AppendHeader("content-disposition", "inline; filename=zenith_coupon.pdf");
context.Response.TransmitFile(fileNameNew);
context.Response.ContentType = "application/pdf";

这样可行,但它会将文件保存在服务器上。我不想这样做,因为会有很多人下载PDF文件,服务器很快就会满了。

所以我的问题是,如何在不保存的情况下使用iTextSharp生成PDF并将其发送给用户?

2 个答案:

答案 0 :(得分:5)

您可以使用MemoryStream,而不是使用FileStream,然后使用Response.Write()输出流内容。

答案 1 :(得分:4)

如果您不想将其保存为文件,则可以将任何Stream(例如MemoryStream)用于中间PDF(在当前名为newFileStream的代码中) - 有关示例代码,请参阅http://www.developerfusion.com/code/6623/dynamically-generating-pdfs-in-net/http://forums.asp.net/t/1093198.aspx/1

请记住在将Position = 0传送到客户端之前(例如MemoryStreamResponse.Write)将CopyTo (Response.OutputStream)设置为{{1}} ...