Есть ли способ передать мне структуру PrintDlg (или что-то подобное) в мой элемент управления WebBrowser (Internet Explorer / IWebBrowser2) так, чтобы он печатал на принтер, указанный в PrintDlg, без появления диалогового окна печати? Я хочу сделать это без замены принтера по умолчанию. IWebBrowser2 :: ExecWB предоставляет способ пропустить всплывающее диалоговое окно (OLECMDEXECOPT_DONTPROMPTUSER), но не способ указать принтер.
Есть две проблемы с простой заменой принтера по умолчанию: 1) он работает медленно, 2) Internet Explorer сохраняет свой текущий принтер в кэше. Когда вы печатаете на принтере по умолчанию, он будет кэшировать этот принтер. Если вы затем измените принтер по умолчанию и попросите его печатать снова, IE не будет использовать новый принтер по умолчанию, он будет использовать текущий кешированный принтер.
После IE 5.5 текущий принтер не сохраняется в реестре Windows.
В качестве альтернативы я исследовал 4 разные идеи для получения изображения из элемента управления IE и печати самостоятельно, а не для получения элемента управления для печати:
Использование IViewObject :: Draw. Я могу получить изображение, но не могу масштабировать его на бумаге так же, как при печати для IE:
RECTL rect;
rect.left = 0;
rect.top = 0;
rect.right = GetDeviceCaps (printerhdc, PHYSICALWIDTH);
rect.bottom = GetDeviceCaps (printerhdc, PHYSICALHEIGHT);
StartDoc (printerhdc, & di);
StartPage (printerhdc);
HRESULT hr = pViewObj-> Draw (DVASPECT_DOCPRINT, page, NULL, pTargetDevice, printerhdc, printerhdc, & rect, NULL, NULL, 0); // печатает слишком мало
EndPage (printerhdc); * * тысяча двадцать-две
EndDoc (printerhdc);
Отправка WM_PAINT в элемент управления IE. Я мало что сделал с этим, поскольку я читал в нити онлайн, что это не сработало так хорошо.
AxDHTMLEDLib. Очень мало документации, и я думаю, что это только для .net
Использование IHTMLElement, IHTMLElementRender-> SetDocumentPrinter, IHTMLElementRender-> DrawToDc. Microsoft прекратила поддержку IE9
Любые идеи, которые у вас могут возникнуть, будут безумно приветствоваться! Заранее спасибо!