Массовая печать HTML на принтере по умолчанию проблема
Я пытаюсь массово печатать HTML-отчеты на своем принтере по умолчанию, который является настройкой PDF Creator для автоматического сохранения. У меня есть HTML-файлы, загружающиеся через Internet Explorer, и оттуда я буду печатать без приглашения пользователя.
Проблема, с которой я сталкиваюсь, заключается в том, что когда моя программа проходит через печать списка HTML-файлов, она обнаружила, что некоторые документы не катятся и не печатаются. Я действительно читал в сети, что это можно решить с помощью цикл while и Приложение.Метода dowork(). Когда я реализовывал это время от времени, все мои документы печатались, что было улучшением, однако это было только иногда и не было уверенным исправлением.
Может быть, моя проблема заключается в том, что каждый поток закрывается до того, как он закончил свою обработку?
Если да, то как я могу заставить потоки работать независимо, чтобы они не закрывались во время обработки?
Ниже приведен код, который я использую для печати документов на принтере по умолчанию:
foreach (var x in fileList) { // Printing files through IE on default printer. Console.WriteLine("{0}", x); SHDocVw.InternetExplorer IE = new SHDocVw.InternetExplorer(); IE.DocumentComplete += new SHDocVw.DWebBrowserEvents2_DocumentCompleteEventHandler(IE_DocumentComplete); IE.PrintTemplateTeardown += new SHDocVw.DWebBrowserEvents2_PrintTemplateTeardownEventHandler(IE_PrintTemplateTeardown); IE.Visible = true; IE.Navigate2(x); while (IE.ReadyState != SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE) { System.Windows.Forms.Application.DoEvents(); } } } } } static void IE_PrintTemplateTeardown(object pDisp) { if (pDisp is SHDocVw.InternetExplorer) { SHDocVw.InternetExplorer IE = (SHDocVw.InternetExplorer)pDisp; IE.Quit(); System.Environment.Exit(0); } } static void IE_DocumentComplete(object pDisp, ref object URL) { if (pDisp is SHDocVw.InternetExplorer) { SHDocVw.InternetExplorer IE = (SHDocVw.InternetExplorer)pDisp; IE.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, 2); } }
Adam R Harris
Пробовали ли вы приостановить свой поток, чтобы позволить IE отправить страницу на принтер?
может быть, попробуйте приостановить свою нить на несколько миллисекунд после отправки ее на принтер, чтобы дать ей время намотать ее и все такое интересное.
bikerben
Привет, адам, да, я пробовал совать нить, спать там, используя различные длины от миллисекунд до нескольких секунд. В настоящее время я изменил код, поэтому метод IE_PrintTemplateTeardown не вызывается, вместо этого, как только приложение завершит обработку всех файлов, оно закроет все экземпляры IE, которые открыты в фоновом режиме. Его грязный я знаю, но на данный момент он будет делать, так как приложение имеет желаемый эффект. Я вернусь к этому вопросу позже с новыми глазами.
Adam R Harris
Рад слышать, что вы, по крайней мере, получил это работает. Как вы сказали, это может быть не очень красиво, но это работает, и я уверен, что это все, что волнует клиента. Если вы в конечном итоге найдете лучшее решение, мне было бы интересно узнать, что это было, поэтому, пожалуйста, откопайте старую нить и дайте нам обновленную информацию, если и когда вы соберетесь ее очистить.