如何用web 服务打印 HTML 文档?

我想从 c # web 服务打印 HTML。 网页浏览器控制不太好,在服务环境中不能很好地运行,在安全约束非常严格的系统中也不能很好地运行。 有没有什么免费的.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();}

当从 UI-type线程调用时,这种方法管用,但是当从服务类型线程调用时,并没有什么卵用。将 Print()更改为ShowPrintPreviewDialog()会产生以下 IE 脚本错误:
Error: dialogArguments.___IE_PrintType is null or not an object.
URL: res://ieframe.dll/preview.dlg

您可以使用以下命令行打印:
rundll32.exe %WINDIR%\System32\mshtml.dll,PrintHTML "%1"
Rundll32.exe% windr% 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及以上版本。

我知道 Visual Studio 本身(至少在2003年版本中)直接引用 IE dll 来呈现“设计视图”。这也许值得深入研究。否则,除了 Web 浏览器的control,我想不出别的东西。

小菜一碟! 把你的问题分成两个简单的部分:
1. 将 HTML 转换为 PDF 格式
2. 列印 PDF 文件(SumatraPDF)
• -print-to-default $file.pdf prints a PDF file on a default
• -print-to $printer_name $file.pdf prints a PDF on a given

如果你的预算是3000美元,看这个PrinceXML

它可以将 HTML 转换为 PDF 格式,在服务环境中运行良好,并且支持高级特性,比如不会在表格单元格中间破坏页面(目前很多浏览器都不支持)。