от
Я хочу напечатать HTML-код из C веб-служб#. Управление веб-браузер-это перебор, и не хорошо функционировать в среде, и не хорошо функционировать в системе с очень жесткими ограничениями безопасности. Есть ли какие-то бесплатные библиотеки
.NET
, которые будут поддерживать печать базовая HTML-страница? Вот код у меня есть до сих пор, что не правильно работать.
public void PrintThing(string document)
{
    if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
    {
        Thread thread =
            new Thread((ThreadStart) delegate { PrintDocument(document); });
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }
    else
    {
        PrintDocument(document);
    }
}

protected void PrintDocument(string document)
{
    WebBrowser browser = new WebBrowser();
    browser.DocumentText = document;
    while (browser.ReadyState != WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
    }
    browser.Print();
}
Это отлично работает при вызове из пользовательского интерфейса-типа нитки, но ничего не происходит, когда позвонили из сервиса-тип резьбы. Изменение
Print()
в
ShowPrintPreviewDialog()
дает следующее сообщение об ошибке скрипта т. е.: Ошибка:
dialogArguments.___IE_PrintType
имеет значение null или не является объектом. Адрес:
res://ieframe.dll/preview.dlg
И появляется небольшое пустое диалоговое окно "печать ""предварительный просмотр".

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

7 Ответы

0 голосов
от
Я хочу напечатать HTML-код из C веб-служб#. Управление веб-браузер-это перебор, и не хорошо функционировать в среде, и не хорошо функционировать в системе с очень жесткими ограничениями безопасности. Есть ли какие-то бесплатные библиотеки
.NET
, которые будут поддерживать печать базовая HTML-страница? Вот код у меня есть до сих пор, что не правильно работать.
public void PrintThing(string document)
{
    if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
    {
        Thread thread =
            new Thread((ThreadStart) delegate { PrintDocument(document); });
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }
    else
    {
        PrintDocument(document);
    }
}

protected void PrintDocument(string document)
{
    WebBrowser browser = new WebBrowser();
    browser.DocumentText = document;
    while (browser.ReadyState != WebBrowserReadyState.Complete)
    {
        Application.DoEvents();
    }
    browser.Print();
}
Это отлично работает при вызове из пользовательского интерфейса-типа нитки, но ничего не происходит, когда позвонили из сервиса-тип резьбы. Изменение
Print()
в
ShowPrintPreviewDialog()
дает следующее сообщение об ошибке скрипта т. е.: Ошибка:
dialogArguments.___IE_PrintType
имеет значение null или не является объектом. Адрес:
res://ieframe.dll/preview.dlg
И появляется небольшое пустое диалоговое окно "печать ""предварительный просмотр".
0 голосов
от
Вы можете печатать из командной строки, используя следующие: программа rundll32.ехе %WINDIR%\System32\mshtml.dll,PrintHTML "%1" Где %1-Путь к файлу в HTML-файл для печати. Если вам не надо печатать из памяти (или можете себе позволить писать на диск во временный файл) можно использовать:
using (Process printProcess = new Process())
{
    string systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
    printProcess.StartInfo.FileName = systemPath   @"\rundll32.exe";
    printProcess.StartInfo.Arguments = systemPath   @"\mshtml.dll,PrintHTML """   fileToPrint   @"""";
    printProcess.Start();
}
Б. Н. это работает только в Windows 2000 и выше я думаю.
0 голосов
от
Я знаю, что сама Visual студии (по крайней мере в версии 2003 года) ссылается на т. е. DLL напрямую, чтобы представить "режиме конструктора". Может быть стоит посмотреть на это. В противном случае, я не могу думать ни о чем, не зависящим веб-браузер.
0 голосов
от
Легко! Разделить вашу проблему на две составные части: рендеринг HTML в PDF распечатать документ PDF (SumatraPDF)
 распечатать PDF-файл на принтере по умолчанию 
 распечатать PDF-файл на указанном принтере
0 голосов
от
Если вы получили его в бюджет (~$3000), проверьте PrinceXML. Он будет отображать HTML в PDF, функции наилучшим образом в среде служб, и поддерживает расширенные функции, такие как не сломать страницу в середине ячейки таблицы (в которой много браузеров в настоящее время не поддерживают).
0 голосов
от
Может быть, это поможет. http://www.codeproject.com/KB/printing/printhml.aspx Также не знаете, какую нить вы пытаетесь получить доступ к элементу управления браузера, но для этого нужно быть ста Примечание - проекта, упомянутого в ссылке можно перейти на страницу и выполнять печать без отображения диалогового окна печати.
0 голосов
от
Я не знаю конкретных инструментов, но есть некоторые утилиты, которые записывают / кликов анализировать. Другими словами, можно автоматизировать "нажмите кнопку" в диалоговом окне печати. (Я знаю, что это хак, но когда все остальное терпит неудачу...)
...