如何在确认打印成功的情况下从web服务器打印格式化文本
本文关键字:打印 web 服务器 文本 格式化 情况下 确认 成功 | 更新日期: 2023-09-27 18:28:47
我正在尝试构建一个系统,该系统将从web服务器下载格式化文本,打印格式化文本,确认打印作业成功完成,然后响应web服务器,让它知道文本已打印。全部无需用户输入。
我已经成功地使用Web浏览器控件下载HTML,然后在不需要用户输入的情况下打印它。然而,这在确认打印的能力上是不够的。
在System.Printing中,您可以访问PrintServer和PrintQueue,并使用它们启动打印作业,还可以查找打印作业的状态。
我还无法确认打印作业,但我已经能够启动简单的打印。但是,它不包含来自web服务器的任何HTML格式。我不局限于HTML,但它必须是一些可以由web服务器生成的格式,这样它就可以在不需要更新客户端应用程序的情况下进行更改。
如何打印web服务器的输出,正确格式化,并知道打印作业是成功还是失败?
我假设您愿意使用WebBrowser控件。这是一个确认打印的解决方案。基本上,您需要处理PrintTemplateTeardown事件来等待打印作业完成。
以下是从中的答案中提取的示例代码:从Windows服务打印html文档而不打印对话框
using System.Reflection;
using System.Threading;
using SHDocVw;
namespace HTMLPrinting
{
public class HTMLPrinter
{
private bool documentLoaded;
private bool documentPrinted;
private void ie_DocumentComplete(object pDisp, ref object URL)
{
documentLoaded = true;
}
private void ie_PrintTemplateTeardown(object pDisp)
{
documentPrinted = true;
}
public void Print(string htmlFilename)
{
documentLoaded = false;
documentPrinted = false;
InternetExplorer ie = new InternetExplorerClass();
ie.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete);
ie.PrintTemplateTeardown += new DWebBrowserEvents2_PrintTemplateTeardownEventHandler(ie_PrintTemplateTeardown);
object missing = Missing.Value;
ie.Navigate(htmlFilename, ref missing, ref missing, ref missing, ref missing);
while (!documentLoaded && ie.QueryStatusWB(OLECMDID.OLECMDID_PRINT) != OLECMDF.OLECMDF_ENABLED)
Thread.Sleep(100);
ie.ExecWB(OLECMDID.OLECMDID_PRINT, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref missing, ref missing);
while (!documentPrinted)
Thread.Sleep(100);
ie.DocumentComplete -= ie_DocumentComplete;
ie.PrintTemplateTeardown -= ie_PrintTemplateTeardown;
ie.Quit();
}
}
}
您还可以参考:https://jiangsheng.net/2021/03/24/how-to-determine-when-a-page-is-done-printing-in-webbrowser-control/
希望它能有所帮助!