2009-04-21 4 views
0

Je crée dynamiquement un fichier PDF. Après avoir créé je veux ouvrir le fichier pdf. Pour que je suis en utilisant ce code:C# L'objet de processus ne s'ouvre pas PDF

System.Diagnostics.Process p = new System.Diagnostics.Process(); 
    p = new System.Diagnostics.Process(); 

    p.StartInfo.FileName = CreatePDF(); // method that creats my pdf and returns the full path 

    try 
    { 
     if (!p.Start()) 
      Controller.Error = "Opening acrobat failed.."; 
    } 
    catch(Exception ex) 
    { 
     Controller.Error = "Create PDF::" + ex.Message; 
    } 

Lors de l'exécution de ce code, rien ne se passe et je ne t obtenir aucune erreur. Qu'est-ce que je fais mal?

Répondre

2

MISE À JOUR:

Depuis c'est une application ASP.NET , ce code ne fonctionnera pas. Il ne peut pas interagir avec le bureau du serveur hébergeant ASP.NET.

Si l'intention est d'afficher le PDF pour les utilisateurs accédant à partir d'un navigateur, alors le code pour cela est complètement différent.

+0

CreatePDF() renvoie le chemin d'accès complet à mon projet, y compris le nom de fichier: C: \\ path \ to \\ file.pdf. C'est une application ASP.NET. – Martijn

+0

Cela ne fonctionnerait pas dans une application ASP.NET car elle doit interagir avec le bureau du serveur pour afficher le fichier PDF. –

+0

Alors, que suggérez-vous? Quand puis-je utiliser Process pour ouvrir mon fichier PDF? – Martijn

2

Asp.net? Ce que je voudrais faire est de prendre le courant de la mémoire et l'écrire dans le flux de réponse comme suit:

Response.ContentType = "application/pdf"; 
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", file.FileName)); 
Response.BinaryWrite(file.FileBytes); 
Response.Flush(); 
Response.End(); 

Pour Windows Forms je prendrais un coup d'œil à l'aide d'Foxit Reader à la place. J'ai un blog post sur l'impression directement à partir de Foxit. Vous pouvez ouvrir de la même manière.

EDIT: Pour créer une pièce jointe que vous ajoutez une référence à System.Net.Mail et faire quelque chose comme:

var stream = GetTheFileAsStream(); 
var attachment = new Attachment(stream); 
+0

J'ai aussi essayé ceci et cela fonctionne en effet. Mais je veux également envoyer un e-mail avec le pdf en pièce jointe – Martijn

+0

Ensuite, vous créez une pièce jointe à partir du fichier octets. – mhenrixon

0

Il n'est pas clair pour moi s'il s'agit d'une application ASP.NET ou Winforms. Si Winforms alors ...

using (Process p = new Process()) 
{ 
    p.StartInfo.RedirectStandardOutput = false; 
    p.StartInfo.FileName = @"C:\foo.pdf"; 
    p.StartInfo.UseShellExecute = true; 
    p.Start(); 
    p.WaitForExit();    
} 

... fonctionnera correctement.

Si cela est ASP.NET MVC, alors vous devriez regarder le type de FileResult et la méthode du fichier du contrôleur ...

public ActionResult GetFile() 
{ 
    return File("foo.pdf", "application/pdf"); 
} 

... car cela est exactement ce que cela est pour.

+0

Il s'agit d'une application web asp.net. – Martijn

+0

modifier: et je n'utilise pas le modèle mvc – Martijn

+0

ok. cool. Il peut donc être utile de mettre à jour la question pour indiquer la pile que vous utilisez. Je ne suis pas sûr que la réponse que vous avez choisie est la meilleure non plus. J'aurais pensé que celui de Catz vous répondrait mieux car il vous montre comment faire cela dans ASP.NET. –

Questions connexes