【问题标题】:Avoid saving new file on the disk避免在磁盘上保存新文件
【发布时间】:2010-03-08 04:37:35
【问题描述】:

我正在使用带有 iTextSharp 的 ASP.NET 3.5,并且我有以下代码:

var templatePath = Server.MapPath(@"~/Templates/template1.pdf");
var newFilePath = Server.MapPath(@"~/TempFiles/new.pdf");

PdfReader pdfReader = new PdfReader(templatePath);
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(newFilePath, FileMode.Create));
AcroFields pdfFormFields = pdfStamper.AcroFields;
pdfFormFields.SetField("Box1", "007");
pdfFormFields.SetField("Box2", "123456");
pdfStamper.FormFlattening = false;
pdfStamper.Close();
Response.ClearContent();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=new.pdf"));
Response.WriteFile(newFilePath);
Response.End();

上面的代码填写一个pdf文件并将新文件保存到TempFiles文件夹。然后它会提示用户保存或打开文件。我可以在不将文件保存到 TempFiles 位置的情况下实现相同的功能吗?

【问题讨论】:

  • @Kumar:您只接受了大约一半问题的答案。您可能想查看其他人是否值得选择接受的答案。

标签: asp.net itextsharp


【解决方案1】:

是的,您可以直接写入响应的输出流。我没有用过PdfStamper,但我在生成新的 PDF 时是这样操作的:

doc = new iTextSharp.text.Document(PageSize.A4);
writer = iTextSharp.text.pdf.PdfWriter.GetInstance(doc, Response.OutputStream);
writer.SetFullCompression();
doc.Open();

看起来您将流传递给PdfStamper 构造函数,所以以下应该可以工作:

var templatePath = Server.MapPath(@"~/Templates/template1.pdf");

PdfReader pdfReader = new PdfReader(templatePath);
Response.ClearContent();
Response.Buffer = true;
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment;filename=new.pdf"));
PdfStamper pdfStamper = new PdfStamper(pdfReader, Response.OutputStream);
AcroFields pdfFormFields = pdfStamper.AcroFields;
pdfFormFields.SetField("Box1", "007");
pdfFormFields.SetField("Box2", "123456");
pdfStamper.FormFlattening = false;
pdfStamper.Close();
Response.End();

【讨论】:

    猜你喜欢
    • 2015-12-28
    • 2015-10-16
    • 1970-01-01
    • 2013-12-26
    • 2014-05-17
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 2018-09-14
    相关资源
    最近更新 更多