我没有找到使用Acrobat并关闭Acrobat Reader打印PDF(例如,从服务器上的“热”文件夹(FileSystemWatcher)获得)的好(免费)简单解决方案。所以我写了自己的书,希望对别人有帮助。 (是的,您可以使用旧的免费Foxit Reader版本,但是我们遇到了太多麻烦,有时卡在内存中而不进行打印)
要点是,打印后,必须将文件移至存档目录,但Adobe并未关闭。所以我从不知道什么时候完成,或者等待30秒钟以上然后杀死(如果服务器需要更长的时间并且花费很多时间,那还不是很好)。
答案 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