我正在动态创建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;
}
执行此代码时,没有任何反应,我没有收到任何错误。我做错了什么?
答案 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");
}
......因为这正是它的用途。