【问题标题】:put generated pdf file without saving it on the server放置生成的pdf文件而不将其保存在服务器上
【发布时间】:2011-12-25 04:19:54
【问题描述】:

我有从 PDF 模板生成 PDF 文件的代码(在 .ashx 文件中)。生成的 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 而不保存并将其提供给用户?

【问题讨论】:

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


    【解决方案1】:

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

    只需记住在将MemoryStream 传输给客户端之前(例如通过Response.WriteCopyTo (Response.OutputStream) )倒带(即设置Position = 0)...

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-09-11
        • 1970-01-01
        • 1970-01-01
        • 2015-07-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多