使用ASP.NET和Acrobat Reader打印PDF

时间:2018-01-17 16:59:45

标签: c# asp.net pdf iis

我在IIS上有一个Web应用程序,我将打印一个文件pdf。

  • 打印机是共享打印机,与另一台计算机物理连接。
  • 该网站具有应用程序池标识,虚拟帐户(DomainName \ NameComputer $)对打印机具有完全权限。
  • 'IIS APPPOOL \ NameAP'可以完全控制Acrobat Reader(AcroRd32.exe)
  • 操作系统:Windows Server 2008 R2

我将Process类与此代码一起使用:

ProcessStartInfo infoPrintPdf = new ProcessStartInfo();
infoPrintPdf.FileName = pathPdf;
string printerName = "\\namePC\namePrinter";
infoPrintPdf.FileName = "...\AcroRd32.exe";
infoPrintPdf.Arguments = string.Format("/t {0} \"{1}\"", 
    pathPdf, printerName);
infoPrintPdf.CreateNoWindow = true;
infoPrintPdf.UseShellExecute = false;
infoPrintPdf.WindowStyle = ProcessWindowStyle.Hidden;
Process printPdf = new Process();
printPdf.StartInfo = infoPrintPdf;
printPdf.Start();
printPdf.WaitForExit();
printPdf.Close();

进程AcroRd32.exe保持运行状态,不打印。有什么想法吗?

我尝试在服务器上打开文件pdf并且无法正常工作。提取物: 的Process.Start(@" ... \ Print.pdf&#34); 进程AcroRd32.exe正在运行用户名'IIS APPPOOL \ NameAP' 使用Visual Studio进行调试时,此代码可以正常工作。

2 个答案:

答案 0 :(得分:0)

我刚刚测试了它,它为我打印。

问题可能是您的打印机名称:"....\file.pdf"。这应该是Windows控制面板中“设备和打印机”中显示的打印机名称。如果您不提供打印机名称,则使用默认打印机。

修复后,如果仍然无法打印,可能是应用程序池标识无法访问您的打印机?打开打印机属性时,有一个“安全”选项卡。 Mine显示默认情况下“Everyone”存在,因此这可能不是问题,但您可以尝试添加应用程序池组(IIS_IUSRS)并查看它是否有所作为。

在我的测试中,Reader在打印后确实保持打开状态。显然,这种行为无法改变。来自Adobe forums

  

使用Reader无法做到这一点。

     

您可以使用单独的命令来终止Reader进程,但是   问题是你不能告诉它要等到打印命令   发送,所以它不太可能工作。

但我确实发现这个程序只是为了解决这个问题:http://www.biopdf.com/acrowrap/close_adobe_reader.php

答案 1 :(得分:0)

我在Console应用程序中进行了测试,它正在运行,修改代码并使用更好的命名:

var exePath = @"C:\Program Files (x86)\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe";
var pdfFile = @"E:\program.pdf";
var infoPrintPdf = new ProcessStartInfo
{
    FileName = exePath,
    Arguments = String.Format("/t {0} ", pdfFile),
    CreateNoWindow = true,
    UseShellExecute = false,
    WindowStyle = ProcessWindowStyle.Hidden
};

var printPdf = new Process();
printPdf.StartInfo = infoPrintPdf;
printPdf.Start();
printPdf.WaitForExit();
printPdf.Close();

除了app pool Identity之外,请检查传递的参数。