作成日: 2021/07/01 最終更新日: 2021/07/01
文書種別
不具合
状況
回避方法あり
詳細
Printメソッドの第1引数(showPrintDialog)をFalseにして印刷設定ダイアログを表示せずに印刷すると、スプールの開始から完了までに、ダイアログを表示したときと比べて時間が掛かります。
レポートのレイアウトや実行環境に依存しますが、数倍の時間が掛かる場合があります。
レポートのレイアウトや実行環境に依存しますが、数倍の時間が掛かる場合があります。
回避方法
Printメソッドを実行する前に、DEVMODEW構造体の取得と設定を行うことでスプール速度を改善できます。
◆サンプルコード (C#)
private void PrintSetHdevmode() { var rpt = new SectionReport1(); var pd = rpt.Document.Printer; pd.PrinterName = "プリンタ名"; IntPtr hDevMode = IntPtr.Zero; IntPtr hDevNames = IntPtr.Zero; try { hDevMode = pd.PrinterSettings.GetHdevmode(); hDevNames = pd.PrinterSettings.GetHdevnames(); pd.DefaultPageSettings.SetHdevmode(hDevMode); pd.PrinterSettings.SetHdevmode(hDevMode); pd.PrinterSettings.SetHdevnames(hDevNames); // ※用紙サイズが初期化されるため、Run()は設定後に呼び出してください rpt.Run(); rpt.Document.Print(false, true, false); } finally { GlobalFree(hDevMode); GlobalFree(hDevNames); } } [DllImport("kernel32.dll")] private static extern IntPtr GlobalFree(IntPtr hMem);
◆サンプルコード (VB.NET)
Private Sub PrintSetHdevmode() Dim rpt As New SectionReport1() Dim pd As System.Drawing.Printing.PrintDocument = rpt.Document.Printer pd.PrinterSettings.PrinterName = "プリンタ名" Dim hDevMode As IntPtr = IntPtr.Zero Dim hDevNames As IntPtr = IntPtr.Zero Try hDevMode = pd.PrinterSettings.GetHdevmode() hDevNames = pd.PrinterSettings.GetHdevnames() pd.DefaultPageSettings.SetHdevmode(hDevMode) pd.PrinterSettings.SetHdevmode(hDevMode) pd.PrinterSettings.SetHdevnames(hDevNames) ' ※用紙サイズが初期化されるため、Run()は設定後に呼び出してください rpt.Run() rpt.Document.Print(False, True, False) Finally GlobalFree(hDevMode) GlobalFree(hDevNames) End Try End Sub <DllImport("kernel32.dll")> Private Shared Function GlobalFree(ByVal hMem As IntPtr) As IntPtr End Function