使用 Web 浏览器打印列表框中的文档

本文关键字:文档 列表 Web 浏览器 打印 使用 | 更新日期: 2023-09-27 17:55:54

本质上,我希望我的程序将列表加载到ListBox中,并允许用户单击"打印",这会将WebBrowser导航到列表中的每个页面,将它们全部单独打印出来。

但是,它只打印出 2 页(在我的示例中,列表框中有 4 页),然后停止,没有完成循环。(很可能是由于WebBrowser控件仍然繁忙)

我觉得我在这里犯了一个简单的错误。任何关于导致这种情况的原因的见解都非常感谢!

我的代码:

private void Form1_Load(object sender, EventArgs e)
{
    DirSearch(Application.StartupPath);
}
void DirSearch(string sDir)
{
    try
    {
        foreach (string d in Directory.GetDirectories(sDir))
        {
            foreach (string f in Directory.GetFiles(d).Select(Path.GetFileName))
            {
                listBox1.Items.Add(f);
            }
            DirSearch(d);
        }
    }
    catch (System.Exception excpt)
    {
        Console.WriteLine(excpt.Message);
    }
}
private void button1_Click(object sender, EventArgs e)
{
    WebBrowser webBrowserForPrinting = new WebBrowser();
    webBrowserForPrinting.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(PrintDocument);
    foreach (string s in listBox1.Items)
    {
        try
        {
            webBrowserForPrinting.Url = new Uri(Application.StartupPath + "''COAForms''" + s);
        }
        catch (Exception)
        {
        }
    }
}
private void PrintDocument(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // Print the document now that it is fully loaded.
    ((WebBrowser)sender).Print();
}

使用 Web 浏览器打印列表框中的文档

Web 浏览器控件的一个常见错误是尝试在传统的for循环中使用它,就像您在这里所做的那样。

Web 浏览器页面加载是一个异步操作。 这就是为什么有一个文档完成事件。 您需要在循环中考虑这一点。 完成文档(例如。 PrintDocument ) 处理程序加载下一个位置,而不是使用传统的 for 循环。