PrintDocument.Print()打印速度非常慢到网络打印机

时间:2013-07-02 20:02:17

标签: c# printing network-printers

我正在尝试从我们的网络服务器打印报告,但我遇到了一个问题,如果网络打印机没有在本地映射到服务器,那么在打印机实际开始打印之前会有相当长的延迟(20秒以上)。如果打印机已映射,则问题消失,打印作业几乎立即完成。不幸的是,由于我们公司的规模,所有可能的打印机都映射到我们的网络服务器是不可行的。

   streamToPrint = new StreamReader
          ("C:\\test.txt");
        try
        {
            printFont = new Font("Arial", 10);
            var pd = new PrintDocument();
            pd.PrintPage += pd_PrintPage;
            pd.PrintController = new StandardPrintController();
            pd.PrinterSettings.PrinterName = "networkprinternamehere";
            pd.Print();
        }
        finally
        {
            streamToPrint.Close();
        }

    private void pd_PrintPage(object sender, PrintPageEventArgs ev)
    {
        float linesPerPage = 0;
        float yPos = 0;
        int count = 0;
        float leftMargin = ev.MarginBounds.Left;
        float topMargin = ev.MarginBounds.Top;
        string line = null;

        // Calculate the number of lines per page.
        linesPerPage = ev.MarginBounds.Height /
           printFont.GetHeight(ev.Graphics);

        // Print each line of the file. 
        while (count < linesPerPage &&
           ((line = streamToPrint.ReadLine()) != null))
        {
            yPos = topMargin + (count *
               printFont.GetHeight(ev.Graphics));
            ev.Graphics.DrawString(line, printFont, Brushes.Black,
               leftMargin, yPos, new StringFormat());
            count++;
        }

        // If more lines exist, print another page. 
        if (line != null)
            ev.HasMorePages = true;
        else
            ev.HasMorePages = false;
    }

这里的示例代码非常直接来自Microsoft's documentation。我见过的所有解决方案都建议映射打印机。有没有办法可以在没有映射的情况下提高性能?似乎this问题可能与他们没有得到任何答复有关。

在代码上运行配置文件(根据建议注释)87%的时间花在PrintDocument.Print()方法上。 pd_PrintPage方法几乎没有时间,因此问题与打印引擎无关。

0 个答案:

没有答案