Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

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

Anna | 17.06.2014 | нет комментариев
Доброе время суток Каждому!
позже бесплодных попыток решить в лоб задачу программного выбора и настройки принтера при печати из компонента 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
        }

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

Спасибо за советы.

Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB