四次元口袋 2019-07-23 15:01 采纳率: 0%
浏览 577

如何用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

  • 写回答

4条回答 默认 最新

  • weixin_38166163 2019-07-23 15:22
    关注

    您可以使用以下命令行打印:
    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及以上版本。

    评论

报告相同问题?

悬赏问题

  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?