我在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&#34); 进程AcroRd32.exe正在运行用户名'IIS APPPOOL \ NameAP' 使用Visual Studio进行调试时,此代码可以正常工作。
答案 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之外,请检查传递的参数。