我想从C#Web服务打印HTML。 Web浏览器控件过于苛刻,在服务环境中无法正常运行,也无法在安全性受到严格限制的系统上正常运行。 是否有任何类型的免费.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类型的线程调用时,这很好,但从服务类型的线程调用时没有任何反应。 Print()更改为ShowPrintPreviewDialog()产生以下IE脚本错误:

错误: dialogArguments.___IE_PrintType为null或不是对象。

URL: res://ieframe.dll/preview.dlg

并出现一个小的空打印预览对话框。

===============>>#1 票数:31

您可以使用以下命令从命令行进行打印:

rundll32.exe%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及以上版本。

===============>>#2 票数:4

简单! 将您的问题分成两个更简单的部分:

  1. 将HTML呈现为PDF
  2. 打印PDF( SumatraPDF
  • -print-to-default $file.pdf在默认打印机上打印PDF文件
  • -print-to $printer_name $file.pdf在给定的打印机上打印PDF

===============>>#3 票数:4

我知道Visual Studio本身(至少在2003版本中)直接引用IE dll来呈现“设计视图”。

可能值得研究一下。

否则,我无法想到Web浏览器控件之外的任何内容。

===============>>#4 票数:3

如果您已经预算好了(〜$ 3000),请查看PrinceXML

它将HTML呈现为PDF,在服务环境中运行良好,并支持高级功能,例如不会破坏表格单元格中的页面(许多浏览器目前不支持)。

===============>>#5 票数:0

也许这会有所帮助。 http://www.codeproject.com/KB/printing/printhml.aspx也不确定你试图从哪个线程访问浏览器控件,但它需要是STA

注 - 链接中引用的项目允许您导航到页面并执行打印而不显示打印对话框。

===============>>#6 票数:0

我的工具非常适合HiQPdf。 https://www.hiqpdf.com/

价格合理(起价245美元),它可以将HTML呈现为PDF,还可以直接管理PDF文件的打印。

===============>>#7 票数:-1

我不知道具体的工具,但有一些实用程序记录/重播点击。 换句话说,您可以在打印对话框上自动“单击”。 (我知道这是一个黑客攻击,但是当其他一切都失败了......)

  ask by Chris Marasti-Georg translate from so

未解决问题?本站智能推荐:

关注微信公众号