連続して印刷を行う場合、印刷範囲に“すべて”を指定しても1ページ目から印刷されない場合がある
対象製品
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)
・Service Pack 3(v7.3.7964.1)
・Service Pack 4(v7.4.8100.1)
・Service Pack 5(v7.5.8161.1)
状況
修正済み
詳細
※この現象はセクションレポートおよびページレポートの両方で発生します。
Viewerの印刷ボタンなどから連続して印刷を行う場合、印刷範囲に“すべて”のオプションを指定しても、1ページ目から印刷されずに、直前に行った印刷の印刷範囲の開始ページから印刷されてしまう場合があります。
この事象は、以下の条件を全て満たす場合に発生いたします。
■事象発生する
1) 10ページのレポートに対して、印刷範囲4-8で印刷を行う
⇒指定した印刷範囲のとおり、4~8ページが印刷されます。
2) 連続で印刷を行い、印刷範囲を”すべて”に指定して印刷を行う
⇒4~10ページしか印刷されない
※1)で指定した開始ページ(4ページ目)から最終ページまでが印刷されてしまう。
■事象発生しない
1) 10ページのレポートに対して、印刷範囲1-5で印刷
⇒指定した印刷範囲のとおり、1~5ページが印刷されます。
2) 連続で印刷を行い、印刷範囲を”すべて”に指定して印刷を行う
⇒指定したとおり、すべてのページ(1~10ページ)が印刷されます。
※1)で指定した開始ページが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)
◆サンプルコード(C#)
ただし、この方法の場合、ActiveReportsが独自に提供する[ページ設定]ダイアログ(印刷時に複数ページを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
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);
}
}
{
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