Dans une application ASP.NET, j'utilise iTextSharp (PdfStamper, surtout) pour remplir un certain contenu sur un PDF et l'envoyer à l'utilisateur. Le code suivant est à l'intérieur d'un événement OnClick:Response.Stream sortie (un PDF) perdu par Adobe Reader
PdfReader r = new PdfReader(
new RandomAccessFileOrArray(Request.MapPath(compatiblePdf)), null
);
ps = new PdfStamper(r, Response.OutputStream);
AcroFields af = ps.AcroFields;
af.SetField("ContactInfo[0]", o.mallName);
af.SetField("ClientName", string.Format("{0} {1}", c.firstName, c.lastName));
af.SetField("ClientEmail", c.emailAddress);
ps.FormFlattening = true;
Response.ContentType = "application/pdf";
Response.AddHeader("Content-Disposition", "attachment; filename=Form.pdf");
ps.Close();
Response.End();
Donc, en gros, PdfReader obtient le fichier, PdfStamper prend le PdfReader comme argument, et poussera son PDF fini à Response.OutputStream.
Le problème est que, avec IE et Adobe Reader, si vous sélectionnez "Ouvrir" dans la boîte de dialogue, Adobe Reader affiche une erreur indiquant "Impossible de trouver le fichier". Les utilisateurs peuvent "enregistrer" le fichier tout à fait bien, et même commencer le téléchargement à nouveau (en cliquant sur "Ouvrir" à nouveau lorsque demandé) semble fonctionner. Mais sur une nouvelle machine qui n'a jamais téléchargé le fichier, Adobe Reader semble égarer le fichier entre celui-ci allant vers les fichiers temporaires ou tout ce que fait IE.
Je ne peux imaginer qu'une seule chose en ce moment: Response.End()
, devrait, peut-être, être Response.Close()
à la place, ou peut-être le tout devrait avoir Response.Flush()
avant. Mais je ne sais pas avec certitude que cela ne va pas aggraver le problème, et j'ai du mal à tester (parce que, une fois que vous avez téléchargé le fichier une fois, l'erreur n'est pas renvoyée).
Cela peut-il résoudre le problème? Est-ce que j'ai quelque chose de mal dans les en-têtes? Ou y a-t-il autre chose que je devrais faire avec les objets Response/PdfStamper?
Une raison pour laquelle cela doit être fait? Cela fonctionne mais n'importe quelle raison spécifique? – tHeSiD
J'ai mis à jour le post avec ce que je pouvais me rappeler ou déterrer. –