2010-03-08 2 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

@ Кумар: Вы ответили только на половину своих вопросов. Возможно, вам захочется проверить, достойны ли другие ответы на принятый ответ. –

ответ

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(); 
Смежные вопросы