我正在使用此代码从驱动器D打印myDocument.pdf文件:这是有效的。
Process proc = new Process();
proc.StartInfo.Verb = "PrinTo";
proc.StartInfo.FileName = @"C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe";
proc.StartInfo.Arguments = @"/p /h D:myDocument.pdf";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
proc.WaitForInputIdle();
System.Threading.Thread.Sleep(1000);
if (false == proc.CloseMainWindow())
proc.Kill();
但我想从我项目中的文件夹打印一个文件,即Content / report / myDocument.pdf。我试图改变'proc.StartInfo.Arguments = @“/ p / h D:myDocument.pdf”;'到:
proc.StartInfo.Arguments = Server.MapPath("~/Content/report/myDocument.pdf");
proc.StartInfo.Arguments = @"Content/report/myDocument.pdf";
proc.StartInfo.Arguments "C:\Users\User\Documents\Visual Studio 2012\Projects\PDF\PDF\Content\report\myDocument.pdf";
所有这些都不起作用,adobe reader说无法找到该文件。
注意:我删除了“/ p / h”这是打印和最小化adobe reader的命令,只是尝试adobe reader会找到myDocument.pdf文件。
我的路径出了什么问题?提前谢谢。
答案 0 :(得分:1)
您是否尝试用双引号括起文件名?
proc.StartInfo.Arguments = @"""C:\Users\User\Documents\Visual Studio 2012\Projects\PDF\PDF\Content\report\Voucher.pdf""";
由于文件名包含空格,可能是Acrobat Reader试图加载名为C:\Users\User\Documents\Visual
的文件,我认为该文件不存在。
如果您想重新引入/p
和/h
开关,请尝试
proc.StartInfo.Arguments = @"/p /h ""C:\Users\User\Documents\Visual Studio 2012\Projects\PDF\PDF\Content\report\Voucher.pdf""";
如果要使用相对于Web应用程序虚拟路径的文件,请尝试
string filePath = Server.MapPath("~/Content/report/Voucher.pdf");
proc.StartInfo.Arguments = string.Format(@"/p /h ""{0}""", filePath);
但请注意,这将从您运行Web应用程序的计算机上打印出来。如果您在计算机上运行Visual Studio,则它将从您的计算机打印出来。但是,如果您已将Web应用程序发布到某个服务器上的IIS并且正在从另一台计算机上查看您的Web应用程序,则PDF将尝试从服务器而不是从您的计算机进行打印。