Печать на определенный принтер с использованием элемента управления IE без замены принтера по умолчанию - PullRequest
2 голосов
/ 30 апреля 2011

Есть ли способ передать мне структуру PrintDlg (или что-то подобное) в мой элемент управления WebBrowser (Internet Explorer / IWebBrowser2) так, чтобы он печатал на принтер, указанный в PrintDlg, без появления диалогового окна печати? Я хочу сделать это без замены принтера по умолчанию. IWebBrowser2 :: ExecWB предоставляет способ пропустить всплывающее диалоговое окно (OLECMDEXECOPT_DONTPROMPTUSER), но не способ указать принтер.

Есть две проблемы с простой заменой принтера по умолчанию: 1) он работает медленно, 2) Internet Explorer сохраняет свой текущий принтер в кэше. Когда вы печатаете на принтере по умолчанию, он будет кэшировать этот принтер. Если вы затем измените принтер по умолчанию и попросите его печатать снова, IE не будет использовать новый принтер по умолчанию, он будет использовать текущий кешированный принтер.

После IE 5.5 текущий принтер не сохраняется в реестре Windows.

В качестве альтернативы я исследовал 4 разные идеи для получения изображения из элемента управления IE и печати самостоятельно, а не для получения элемента управления для печати:

  1. Использование 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);

  2. Отправка WM_PAINT в элемент управления IE. Я мало что сделал с этим, поскольку я читал в нити онлайн, что это не сработало так хорошо.

  3. AxDHTMLEDLib. Очень мало документации, и я думаю, что это только для .net

  4. Использование IHTMLElement, IHTMLElementRender-> SetDocumentPrinter, IHTMLElementRender-> DrawToDc. Microsoft прекратила поддержку IE9

Любые идеи, которые у вас могут возникнуть, будут безумно приветствоваться! Заранее спасибо!

1 Ответ

1 голос
/ 02 мая 2011

Если у вас есть некоторая гибкость в использовании принтера по умолчанию, вот еще одна идея.Это немного обыденно.

  • делает ваш принтер по умолчанию писателем PDF (например, Amyuni PDF или Adobe Distiller).Эти драйверы принтера преобразуют входящее задание в файл PDF, и вы можете настроить его для сохранения файла в каком-либо месте на диске.

  • используйте PowerShell для печати этого файла PDF на ваш целевой принтертебе нужно.Вы можете использовать либо интерфейс PrintUI DLL, либо использовать глагол «печать».http://www.eggheadcafe.com/software/aspnet/30441939/how-to-suppress-printdialog-when-using-print-verb.aspx предоставляет пример.Сделав это, вы можете выполнить все настройки очереди вашего принтера в этом сценарии и оставить принтер по умолчанию «как есть»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...