从虚拟路径打印 pdf 文件

Print pdf file from a virtual path

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

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

您是否尝试过用双引号将文件名括起来?

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 将尝试从服务器打印,而不是从您的计算机打印。