1

我正在使用此代码从驱动器 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 文件。

我的路径有什么问题?提前致谢。

4

1 回答 1

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,我认为该文件不存在。

如果您想重新引入/pand/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 将尝试从服务器打印,而不是从您的计算机打印。

于 2015-08-29T10:55:38.120 回答