2009-04-21 14 views
0

Ich erstelle dynamisch eine PDF-Datei. Nach dem Erstellen möchte ich die PDF-Datei öffnen. Dafür habe ich diesen Code verwende:C# Prozessobjekt nicht geöffnet 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; 
    } 

Wenn dieser Code ausgeführt wird, passiert nichts, und ich don t Fehler bekommen. Was mache ich falsch?

Antwort

2

UPDATE:

Da es sich um eine ASP.NET-Anwendung , dieser Code wird nicht funktionieren. Es kann nicht mit dem Desktop des Servers interagieren, der ASP.NET hostet.

Wenn die PDF für die Benutzer angezeigt werden soll, die über einen Browser zugreifen, ist der Code dafür völlig anders.

+0

CreatePDF() gibt den vollständigen Pfad zu meinem Projekt einschließlich des Dateinamens zurück: C: \\ Pfad \ zu \\ Datei.pdf. Es ist eine ASP.NET-App. – Martijn

+0

Dies funktioniert in einer ASP.NET-App nicht, da sie mit dem Desktop des Servers interagieren muss, um die PDF-Datei anzuzeigen. –

+0

Also, was schlägst du vor? Wann kann ich Process verwenden, um meine PDF-Datei zu öffnen? – Martijn

2

Asp.net? Was ich tun würde, ist der Speicher-Stream zu nehmen und es in den Antwortstream schreiben wie folgt:

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

Für Windows Forms ich stattdessen einen Blick auf mit Foxit Reader nehmen würde. Ich habe eine blog post über den Druck direkt von Foxit. Sie können ähnlich öffnen.

EDIT: eine Anlage erstellen Sie einen Verweis auf System.Net.Mail hinzufügen und wie etwas tun:

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

Ich habe das auch versucht und das funktioniert in der Tat. Aber ich möchte auch eine E-Mail mit dem PDF als Anhang senden – Martijn

+0

Dann erstellen Sie einen Anhang aus der Datei Bytes. – mhenrixon

0

Es ist mir nicht klar, ob dies eine ASP.NET-App oder Winforms ist. Wenn Winforms dann ...

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

... wird gut funktionieren.

Wenn die ASP.NET MVC, dann sollten Sie den Fileresult Typen betrachten und die Datei-Methode der Steuerung ...

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

... da dies genau das, was dies für ist.

+0

Es ist eine asp.net Webformular App. – Martijn

+0

edit: und ich verwende nicht das mvc-Muster – Martijn

+0

ok. cool. Es kann also sinnvoll sein, die Frage zu aktualisieren, um den von Ihnen verwendeten Stack anzugeben. Ich bin mir nicht sicher, ob die Antwort, die du wählst, auch die beste ist. Ich hätte gedacht, dass Catz Ihnen besser antwortet, da es Ihnen zeigt, wie man das in ASP.NET macht. –

Verwandte Themen