2010-03-08 82 views
0

我使用ASP.NET 3.5与iTextSharp的,我有下面的代码保存在新的文件:避免磁盘

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位置的情况下实现相同的功能吗?

+1

@库马尔:你只接受了大约一半问题的答案。您可能想要检查其他人是否值得选择接受的答案。 – 2010-03-08 04:51:41

回答

4

是的,你可以直接写入响应的输出流。我没有使用过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();