連続して印刷を行う場合、印刷範囲に“すべて”を指定しても1ページ目から印刷されない場合がある

文書番号 : 38357     文書種別 : 不具合     登録日 : 2015/04/30     最終更新日 : 2016/01/13
文書を印刷する
対象製品
ActiveReports for .NET 7.0J
発生環境
以下のいずれかのService Packを適用している場合に発生します。

・Service Pack 3(v7.3.7964.1)
・Service Pack 4(v7.4.8100.1)
・Service Pack 5(v7.5.8161.1)
状況
修正済み
詳細
※この現象はセクションレポートおよびページレポートの両方で発生します。

Viewerの印刷ボタンなどから連続して印刷を行う場合、印刷範囲に“すべて”のオプションを指定しても、1ページ目から印刷されずに、直前に行った印刷の印刷範囲の開始ページから印刷されてしまう場合があります。

この事象は、以下の条件を全て満たす場合に発生いたします。
  • Viewerの印刷ボタンなどから連続して印刷を行う
  • 最初の印刷では印刷範囲の指定を行い、かつ開始ページに"1ページ目"以外を指定して印刷を行う
  • 2回目の印刷では印刷範囲に“すべて”を指定して印刷を行う
以下に事象が発生する場合としない場合の一例を示します。

■事象発生する
1) 10ページのレポートに対して、印刷範囲4-8で印刷を行う
   ⇒指定した印刷範囲のとおり、4~8ページが印刷されます。
2) 連続で印刷を行い、印刷範囲を”すべて”に指定して印刷を行う
   ⇒4~10ページしか印刷されない
    ※1)で指定した開始ページ(4ページ目)から最終ページまでが印刷されてしまう。

■事象発生しない
1) 10ページのレポートに対して、印刷範囲1-5で印刷
   ⇒指定した印刷範囲のとおり、1~5ページが印刷されます。
2) 連続で印刷を行い、印刷範囲を”すべて”に指定して印刷を行う
   ⇒指定したとおり、すべてのページ(1~10ページ)が印刷されます。
    ※1)で指定した開始ページが1ページ目であるため、結果的に意図した範囲が印刷される。
回避方法
この問題はService Pack 6(v7.6.8201.1)で修正されました。
不具合を修正した最新のサービスパックをご使用ください。

SP6を使用しない場合の回避方法は以下のとおりです。

.NET標準の印刷設定ダイアログ(System.Windows.Forms.PrintDialog)を使用し、コードから印刷範囲をリセットする方法が考えられます。

詳細については、以下のKB文書にある「2. .NET標準の印刷設定ダイアログ(System.Windows.Forms.PrintDialog)を使用する方法」のコードをご覧ください。

Windowsフォームアプリでレポートを印刷する際、印刷ダイアログ上で押されたボタンを判断する方法は?

上記の印刷設定ダイアログを実装後、タイマーが経過した時に呼び出されるイベント内に、印刷範囲の設定をリセットする処理を組み込みます。

◆サンプルコード(VB.NET)
Private Sub myTimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs)
  myTimer.Stop()
  If (pd.ShowDialog() = DialogResult.OK) Then
    ' 印刷範囲に"すべて"が指定された場合、印刷範囲の設定をリセットします。
    If pd.PrinterSettings.PrintRange = Printing.PrintRange.AllPages Then
      pd.PrinterSettings.FromPage = 1
      pd.PrinterSettings.ToPage = 10000
    End If
    Me.Viewer1.Print(False, True, False)
  End If
End Sub

◆サンプルコード(C#)
private void myTimer_Tick(object sender, System.EventArgs e)
{
  myTimer.Stop();
  if ((pd.ShowDialog() == DialogResult.OK)) {
    // 印刷範囲に"すべて"が指定された場合、印刷範囲の設定をリセットします。
    if (pd.PrinterSettings.PrintRange == System.Drawing.Printing.PrintRange.AllPages) {
      pd.PrinterSettings.FromPage = 1;
      pd.PrinterSettings.ToPage = 10000;
    }
    this.Viewer1.Print(false, true, false);
  }
}

ただし、この方法の場合、ActiveReportsが独自に提供する[ページ設定]ダイアログ(印刷時に複数ページを1枚の用紙に出力する設定やマージン指定、ウォーターマークの出力指定ができる機能)は利用できません。プリンター固有のオプションをご利用ください。

ページ設定ダイアログの詳細については、製品ヘルプの以下のトピックをご覧ください。
PowerTools ActiveReports for .NET 7.0J
 - ActiveReportsユーザーガイド
  - 基本操作
   - 印刷の詳細設定
キーワード
11109