C#Process对象无法打开PDF

时间:2009-04-21 09:30:34

标签: c# pdf

我正在动态创建PDF文件。创建后我想打开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;
    }

执行此代码时,没有任何反应,我没有收到任何错误。我做错了什么?

3 个答案:

答案 0 :(得分:2)

Asp.net?我要做的是获取内存流并将其写入响应流,如下所示:

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

对于Windows窗体,我会先看一下使用福昕阅读器。我有一个关于直接从foxit打印的blog post。你可以打开类似的。

编辑:要创建附件,请添加对System.Net.Mail的引用,并执行以下操作:

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

答案 1 :(得分:2)

<强>更新

由于这是一个ASP.NET应用程序,因此该代码不起作用。它无法与托管ASP.NET的服务器的桌面交互。

如果打算为从浏览器访问的用户显示PDF,那么代码就完全不同了。

答案 2 :(得分:0)

我不清楚这是ASP.NET应用还是Winforms。如果Winforms那么......

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

...会正常工作。

如果这是ASP.NET MVC,那么您应该查看FileResult类型和Controller的File方法......

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

......因为这正是它的用途。