c#使用Adobe Reader打印PDF并关闭

时间:2019-01-28 13:54:35

标签: c# pdf printing adobe

我没有找到使用Acrobat并关闭Acrobat Reader打印PDF(例如,从服务器上的“热”文件夹(FileSystemWatcher)获得)的好(免费)简单解决方案。所以我写了自己的书,希望对别人有帮助。 (是的,您可以使用旧的免费Foxit Reader版本,但是我们遇到了太多麻烦,有时卡在内存中而不进行打印)

要点是,打印后,必须将文件移至存档目录,但Adobe并未关闭。所以我从不知道什么时候完成,或者等待30秒钟以上然后杀死(如果服务器需要更长的时间并且花费很多时间,那还不是很好)。

1 个答案:

答案 0 :(得分:0)

在这里,我运行解决方案,然后等待直到Adobe Process的子过程之一显示最近打开的Window。

感谢mtijn的“ Process Searcher”解决方案https://stackoverflow.com/a/7189381/480982

var prz = Process.Start("C:\\Program Files (x86)\\Adobe\\Acrobat Reader DC\\Reader\\AcroRd32.exe", "/h /t \"" + YOURPDFFILE + "\" \"" + YOURPRINTER + "\"");

            bool loop = true;
            while (loop)
            {
//u can use Thread.Sleep(x) too;
                prz.WaitForExit(500);

                ManagementObjectSearcher searcher = new ManagementObjectSearcher(
       "SELECT * " +
       "FROM Win32_Process " +
       "WHERE ParentProcessId=" + prz.Id);
                ManagementObjectCollection collection = searcher.Get();
                if (collection.Count > 0)
                {

                    foreach (var item in collection)
                    {
                        UInt32 childProcessId = (UInt32)item["ProcessId"];
                        if ((int)childProcessId != Process.GetCurrentProcess().Id)
                        {

                            Process childProcess = Process.GetProcessById((int)childProcessId);

//If a File is open the Title begins with "Filename - Adobe ...", but after print/closing the recent window starts with "Adobe Acr..."
           if(childProcess.MainWindowTitle.StartsWith("Adobe Acrobat"))
                                {
                                loop = false;
                                break;
                            }


                        }
                    }
                }


            }



           //"Recent" Window found, lets kill the Process
            prz.Kill();


// Now here u can move or Delete the pdf file