Задать вопрос
RusMikle
@RusMikle
Программист

Как сформировать поток из компонента WebBrowser для события PrintPage класса PrintDocument?

Доброе время суток Всем!
после безуспешных попыток решить в лоб задачу программного выбора и настройки принтера при печати из компонента WebBrowser (дискуссия тут). Начал решать задачу обходными путями. Главная идея заключается в том что если связать компонент WebBrowser и .net класс PrintDocument то задачу модно считать решенной т.к. последний имеет все что нужно для выборки и настройки принтера. Если судить по справке то такое связывание осуществляется через событие PrintDocument.PrintPage этого класса (в доке есть пример для случая печати простого текста. Но то что отображает WebBrowser не является простым текстом и встаёт задача формирования потока из компонента WebBrowser (внизу заготовка). Моя проблема в том что не получается сформировать подобный поток. Подозреваю что нужно использовать свойство WebBrowser.DocumentStream но все примеры которые удалось найти связаны с наполнением WebBrowser а не с чтением из него через это свойство. Подскажите, как быть? Ниже код заготовки:
        private StreamReader streamToPrint;

        public void PrintDirect(string PrinterName)
        {
            // тут oWebBrowser это объект WebBrowser на форме.
            streamToPrint = new StreamReader(oWebBrowser.DocumentStream); // не уверен что тут правильно

            PrintDocument pd = new PrintDocument();
            pd.PrintPage += new PrintPageEventHandler(pd_PrintPage); // Подцепляем вывод из потока
            pd.PrinterSettings.PrinterName = PrinterName; // переопределяем принтер
            // Set the page orientation to landscape.
            pd.DefaultPageSettings.Landscape = true;  // меняем ориентацию страницы
            pd.Print();
            streamToPrint.Close();
        }
        private void pd_PrintPage(object sender, PrintPageEventArgs ev)
        {
           // А вот тут проблемма
           // не знаю как выплюнуть из потока содержимое страницы
           // по идее что то вроде streamToPrint.ReadToEnd() а потом ev.Graphics.Draw .........
           // но так  получается, Подскажите как выплюнуть этот поток не как исходный
           // HTML  текст страницы а так как отобразил бы его WebBrowser
        }


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

Спасибо за советы.
  • Вопрос задан
  • 2913 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@noonesshadow
На входе в PrintDocument нужен RTF; задача сводится к получению потока RTF из потока WebBrowser.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы