2010-03-08 5 views
0

J'utilise ASP.NET 3.5 avec iTextSharp et j'ai le code suivant:éviter d'enregistrer nouveau fichier sur le disque

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(); 

Le code ci-dessus remplit un fichier pdf et enregistre le nouveau fichier dans le dossier tempfiles . Il invite ensuite l'utilisateur à enregistrer ou à ouvrir le fichier. Puis-je obtenir la même fonctionnalité sans enregistrer le fichier dans l'emplacement TempFiles?

+1

@ Kumar: Vous avez seulement accepté une réponse pour environ la moitié de vos questions. Vous pourriez vouloir vérifier si d'autres sont dignes de choisir une réponse acceptée. –

Répondre

4

Oui, vous pouvez écrire directement dans le flux de sortie de la réponse. Je ne l'ai pas utilisé PdfStamper, mais voici comment je le fais lors de la création de nouveaux fichiers PDF:

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

On dirait que vous passez un flux dans le constructeur PdfStamper, donc ce qui suit devrait fonctionner:

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(); 
Questions connexes