我在IIS上有一个Web应用程序,我将打印一个文件pdf。
我使用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”);进程AcroRd32.exe运行时使用用户名'IIS APPPOOL \ NameAP'使用Visual Studio进行调试此代码可以正常运行。
我在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,请检查传递的参数。
我刚刚测试了它,它为我打印。
问题可能是您的打印机名称:"....\file.pdf"
。这应该是Windows控制面板中“设备和打印机”中显示的打印机名称。如果您不提供打印机名称,则使用默认打印机。
修复后,如果仍然无法打印,可能是应用程序池标识无法访问您的打印机?打开打印机属性时,有一个“安全”选项卡。 Mine显示默认情况下“Everyone”存在,所以这可能不是问题,但您可以尝试添加应用程序池组(IIS_IUSRS)并查看它是否有所作为。
在我的测试中,Reader在打印后确实保持打开状态。显然,这种行为无法改变。来自Adobe forums:
使用Reader不可能做到这一点。
您可以使用单独的命令来终止Reader进程,但问题是您不能告诉它等到发送打印命令,因此它不太可能工作。
但我确实发现这个程序只是为了解决这个问题:http://www.biopdf.com/acrowrap/close_adobe_reader.php