我正在处理需要按顺序打印图像的打印应用程序。该列表包含tif图像和xml格式的文档。我使用WebBrowser导航到xml,在DocumentComplete之后我调用WebBrowser.Print()开始打印。
问题是WebBrowser没有立即开始打印。当WebBrowser真正想要打印时,它看起来像是零星的。
以下是与我的代码类似的代码。
任何人都知道是什么触发了打印开始或远离它的工作?
public partial class Form1 : Form
{
private WebBrowser _webBrowser1 = new WebBrowser();
private List<string> _list = new List<string>();
public Form1()
{
InitializeComponent();
this._webBrowser1.Name = "webBrowser1";
this._webBrowser1.DocumentCompleted += new System.Windows.Forms.WebBrowserDocumentCompletedEventHandler(this.webBrowser1_DocumentCompleted);
this._list.Add("test1.tif");
this._list.Add("http://bing.com");
this._list.Add("test2.tif");
this._list.Add("test3.tif");
}
private void button1_Click(object sender, EventArgs e)
{
this.StartPrinting();
}
private void StartPrinting()
{
if (this._list.Count == 0)
return;
string imgPath = this._list[0];
this._list.RemoveAt(0);
if (imgPath.EndsWith(".tif") == true)
{
// Code to print tif
System.Threading.Thread.Sleep(3000);
// Print Next Image
this.StartPrinting();
}
else
{
// ex. http://test.com/mytest.xml
this._webBrowser1.Navigate(imgPath);
}
}
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
// THIS IS THE PROBLEM, it doesn't show the prompt until later in the loop
this._webBrowser1.ShowPrintDialog();
// Print Next Image
this.StartPrinting();
}
}
答案 0 :(得分:0)
WebBrowser
打印是异步的。当打印的假脱机部分完成时,底层WebBrowser ActiveX控件会触发PrintTemplateTeardown
事件。我发布了example说明如何处理它,因此可以异步打印一系列网址。
或者,您可以强制打印(假脱机)与PRINT_WAITFORCOMPLETION
标志同步完成:
const int OLECMDID_PRINT = 6;
const int OLECMDEXECOPT_DONTPROMPTUSER = 2;
const int PRINT_WAITFORCOMPLETION = 2;
dynamic webBrowserAx = webBrowser.ActiveXInstance;
webBrowserAx.ExecWB(
OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, PRINT_WAITFORCOMPLETION);
请注意,这将阻止UI线程,直到假脱机结束。
有关WebBrowser/MSHTML
打印的详情:https://stackoverflow.com/a/19172580/1768303。