我正在为我公司内部使用的网页编程。
它应该动态创建PDF文档,然后将它们发送到办公室打印机。
我使用的代码是:
string processFilename = Microsoft.Win32.Registry.LocalMachine
.OpenSubKey("Software")
.OpenSubKey("Microsoft")
.OpenSubKey("Windows")
.OpenSubKey("CurrentVersion")
.OpenSubKey("App Paths")
.OpenSubKey("AcroRd32.exe")
.GetValue(String.Empty).ToString();
ProcessStartInfo info = new ProcessStartInfo();
info.Verb = "open";
info.FileName = processFilename;
info.Arguments = String.Format(@"/t ""{0}"" ""{1}""", pdfFilePath, PrinterSettings.InstalledPrinters[0]);
info.CreateNoWindow = true;
info.WindowStyle = ProcessWindowStyle.Hidden;
info.UseShellExecute = false;
Process p = Process.Start(info);
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.WaitForInputIdle();
System.Threading.Thread.Sleep(6000);
if (false == p.CloseMainWindow())
{
p.Kill();
}
它通过注册表找到adobe acrobat reader所在的位置,并使用/t
的参数打开它,该参数将下一个参数pdfFilePath
直接发送到打印机。 6秒后关闭adobe acrobat reader。
在visual studio 2010中进行调试时,这在我的本地计算机上运行得很好。
但是当我使用IIS 7.5在服务器上部署它时,它根本不会打开adobe acrobat reader。
我已检查过它是AcroRd32.exe
的正确文件路径以及我试图打印的PDF文件。
我也试过这个程序的版本,用动词"Print"
打开实际的PDF文件,但adobe acrobat reader仍然无法打开。
我认为这可能是一个权限问题。
修改:我使用福昕阅读器代替Adobe Acrobat Reader测试了此代码。
string processFilename = Microsoft.Win32.Registry.LocalMachine
.OpenSubKey("Software")
.OpenSubKey("Microsoft")
.OpenSubKey("Windows")
.OpenSubKey("CurrentVersion")
.OpenSubKey("App Paths")
.OpenSubKey("foxitreader.exe")
.GetValue(String.Empty).ToString();
其余代码不变。它打开Foxit Reader并在我的本地调试环境中打印。但是当代码在服务器上运行时没有任何反应。