2013-12-17 111 views
0

我有一個需要打印圖元文件的應用程序。 Metafile是一個SSRS報告的呈現。我正在使用System.Drawing.Printing.PrintDocument類來打印報告。這是我的班正在做印刷:System.Drawing.Printing.PrintDocument很慢

public class EMFPrinter 
{ 
    private IList<Stream> m_streams; 
    private string printerName; 
    private int m_currentPageIndex; 

    public EMFPrinter(IList<Stream> reportstreams, string printer) 
    { 
     m_streams = reportstreams; 
     printerName = printer; 
     m_currentPageIndex = 0; 
    } 

    public void Print() 
    { 
     PrintDocument printDoc = new PrintDocument(); 
     printDoc.PrinterSettings.PrinterName = printerName; 
     printDoc.PrintPage += new PrintPageEventHandler(PrintPage); 
     printDoc.Print(); 
    } 

    private void PrintPage(object sender, PrintPageEventArgs ev) 
    { 
     Metafile pageImage = new Metafile(m_streams[m_currentPageIndex]); 
     ev.Graphics.DrawImage(pageImage, ev.PageBounds); 
     m_currentPageIndex++; 
     ev.HasMorePages = (m_currentPageIndex < m_streams.Count); 
    } 
} 

如果我從我的桌面(Windows 8)運行它,它運行良好。如果我嘗試從需要運行的服務器上運行它(Windows Server 2008 R2),它對於某些打印機非常有用,但是我需要打印的打印機是HP LaserJet 1536dnf,當我嘗試打印時從服務器上它真的需要大約五分鐘的時間來打印。如果我嘗試從桌面打印到同一臺打印機,則會立即打印。如果我嘗試從某個應用程序(如繪圖)的服務器打印到該打印機,則立即打印。

什麼可能導致我的代碼花費這麼長時間才能從服務器打印到此打印機?

+0

1536是否有可能不夠強大,而且您要打印的報告很複雜?你可以輸出到文件?輸出文件有多大?報告輸出效率可能非常低,並且由於處理器等原因,更多的「商業」式打印機可能會更好地處理它。 –

回答

1

這最終成爲打印驅動程序問題。經過這段時間,我下載了最新的打印驅動程序並將其安裝在服務器上。然後,我使用新的打印驅動程序將打印機安裝到服務器上,並將其設置爲具有IP地址端口的本地打印機。這解決了這個問題。