Je cherche à faire ce qui suit:Pièce jointe Corrupt PDF
- récupérer un pdf généré à partir d'une page Web
- Créer un message électronique
- Fixez le pdf au message
- Envoyer le message Je peux récupérer le pdf de la page Web et envoyer le message avec lui comme pièce jointe.
Toutefois, lorsque j'essaie d'ouvrir la pièce jointe, je suis redouté "Adobe Reader n'a pas pu ouvrir 'filename.pdf' car il ne s'agit pas d'un type de fichier pris en charge ou parce que le fichier a été endommagé".
Le fichier pdf est généré par une page MVC3 en utilisant un objet ActionResult personnalisé pour renvoyer le fichier pdf. On dirait que cette
public class EnrollmentExpectationsPdfResult : FileResult
{
IList<AdminRepEnrollmentExpectationViewModel> adminreps;
public EnrollmentExpectationsPdfResult(IList<AdminRepEnrollmentExpectationViewModel> adminrep)
: this("application/pdf", adminrep)
{ }
public EnrollmentExpectationsPdfResult(string contentType, IList<AdminRepEnrollmentExpectationViewModel> adminrep)
: base(contentType)
{
adminreps = adminrep;
}
protected override void WriteFile(HttpResponseBase response)
{
var cd = new ContentDisposition
{
Inline = true,
FileName = "MyPDF.pdf"
};
response.AppendHeader("Content-Disposition", cd.ToString());
//Skip a bunch of boring font stuff
...
var writer = PdfWriter.GetInstance(doc, response.OutputStream);
writer.PageEvent = new EnrollmentExpectationPDFPageEvent();
doc.Open();
//Skip the doc writing stuff
...
doc.Close();
}
}
La méthode du contrôleur est ici
public ActionResult EnrollmentExpectationsPDF()
{
//skip a bunch a database stuff
...
return new EnrollmentExpectationsPdfResult(adminList);
}
Voici le code au cœur du problème ...
//Get PDF
CredentialCache cc = new CredentialCache();
cc.Add(
new Uri("http://myserver/mypdfgeneratingpage"),
"NTLM",
new NetworkCredential("myusername", "mypassword"));
var webRequestObject = (HttpWebRequest)WebRequest.Create("http://iapps.national.edu/erp/Reports/EnrollmentExpectationsPDF");
webRequestObject.Credentials = cc;
var response = webRequestObject.GetResponse();
var webStream = response.GetResponseStream();
//Create Mail
System.Net.Mail.MailMessage eMail = ...
//Skipping to attachment stuff
ContentType ct = new ContentType()
{
MediaType = MediaTypeNames.Application.Pdf,
Name = "EnrollmentExpecations_2.pdf"
};
Attachment a = new Attachment(webStream, ct);
eMail.Attachments.Add(a);
//Send Message
....
A titre d'expérience, j'essayé d'écrire le fichier téléchargé sur le disque
MemoryStream ms = new MemoryStream();
var fileStream = File.Create("C:\\MyPDF.pdf");
webStream.CopyTo(fileStream);
Alto, je suis capable d'ouvrir le fichier à partir du disque sans problème.
Qu'est-ce qui me manque pour rendre la pièce jointe lisible?
Quelle est la taille PDF ? –
Il est environ 27KB – seanicus
ah ... ok, je pensais que c'était peut-être trop gros pour le courrier électronique.Maintenant, je dois lire le code plus près haha –