有没有办法让我将 PrintDlg 结构(或类似的东西)传递给我的 WebBrowser(Internet Explorer / IWebBrowser2)控件,这样它就可以打印到 PrintDlg 中指定的打印机而不弹出打印对话框?我想在不更改默认打印机的情况下执行此操作。IWebBrowser2::ExecWB 提供了一种跳过对话框弹出(OLECMDEXECOPT_DONTPROMPTUSER)的方法,但不是一种指定打印机的方法。
仅更改默认打印机有两个问题:1) 速度很慢,2) Internet Explorer 会缓存其当前打印机。当您打印到默认打印机时,它将缓存该打印机。如果您随后更改默认打印机并告诉它再次打印,IE 将不会使用新的默认打印机,它将使用其缓存的当前打印机。
在 IE 5.5 之后,当前打印机不存储在 Windows 注册表中。
作为替代方案,我研究了 4 种不同的想法,用于从 IE 控件获取图像并自行打印,而不是让控件自行打印:
使用 IViewObject::Draw。我可以得到图像,但不能像为 IE 打印时那样将其缩放到纸张上:
矩形矩形;
rect.left = 0;
rect.top = 0;
rect.right = GetDeviceCaps(printerhdc, PHYSICALWIDTH);
rect.bottom = GetDeviceCaps(printerhdc, PHYSICALHEIGHT);StartDoc(printerhdc, &di);
起始页(printerhdc);
HRESULT hr = pViewObj->Draw(DVASPECT_DOCPRINT,页面,NULL,pTargetDevice,printerhdc,printerhdc,&rect,NULL,NULL,0);//打印太小
EndPage(printerhdc);
EndDoc(printerhdc);向 IE 控件发送 WM_PAINT。我在这个方面做得不多,因为我在网上的一个帖子中读到这并没有那么好用。
AxDHTMLED 库。文档很少,我认为这仅适用于 .net
使用 IHTMLElement、IHTMLElementRender->SetDocumentPrinter、IHTMLElementRender->DrawToDc。微软已取消对 IE9 的支持
您可能有的任何想法将不胜感激!提前致谢!