作成日: 2026/03/25 最終更新日: 2026/03/25
文書種別
使用方法
詳細
印刷結果に何らかの異常(乱れ)が発生する場合には、いくつかの原因が考えられます。以下の内容についてご確認ください。
- Printメソッドの引数設定について
- Runメソッドの引数設定について
- 複数スレッドでの同時印刷について
- 「ユーザー定義のサイズ」を設定したセクションレポートについて
- イベントの実装内容について
- 実行環境のリソースについて
- プリンタの名称について
- ターミナルサービス環境について
- プリンタドライバについて
- 実行環境のOSや.NET Framework等について
Printメソッドの引数設定について
Printメソッドでレポートを印刷している場合には、第3引数にFalseを指定した上で、再度動作をお試しください。
Printメソッドの第3引数を指定なし(またはTrue)で実行している場合、印刷処理が非同期で実行されます。
非同期で実行されている印刷処理が完了する前に、次の印刷処理(Printメソッド)が実行された場合や、印刷処理が中断された場合、プリンタ(スプーラ)に出力されるデータが不正なものになり、印刷結果の乱れや、全く印刷が行われないなどの問題が発生する可能性があります。
Runメソッドの引数設定について
セクションレポートの場合、Runメソッドを呼び出すことでレポートの生成処理が実行されます。そのとき、Runメソッドの引数をTrueに設定している場合は、Falseに設定した上で、再度動作をお試しください。
Runメソッドの引数をTrueに指定して実行した場合、レポートの生成処理が非同期で行われますので、印刷を実行するタイミングによっては、生成処理が完了する前に印刷処理が実行されてしまい、不正な結果になる可能性があります。
複数スレッドでの同時印刷について
過去の事例において、複数スレッドで同時に印刷処理を行なった場合に、処理のタイミングによって印刷結果が乱れる現象が報告されております。
プリンタのような共有リソースに対する処理を行う際、印刷ジョブの開始処理がそれぞれのスレッドで同時に実行されたときに、処理の競合が発生する可能性が考えられます。
Printメソッドによる印刷処理を複数のスレッドで同時に実行する場合には、SyncLockステートメントなどを使用し、印刷処理をロックしてください。
◆サンプルコード (C#)
using GrapeCity.ActiveReports;
private readonly object lockObject = new object();
private void button1_Click(object sender, EventArgs e)
{
rptSample rpt = new rptSample();
rpt.Run(false);
lock (lockObject)
{
rpt.Document.Print(false, false, false);
}
}
◆サンプルコード (VB.NET)
Imports GrapeCity.ActiveReports
Private Shared ReadOnly syncObject As New Object
Private Sub Button1_Click(...) Handles Button1.Click
Dim rpt As New SectionReport1()
rpt.Run(False)
SyncLock syncObject
rpt.Document.Print(False, False, False)
End SyncLock
End Sub
「ユーザー定義のサイズ」を設定したセクションレポートについて
用紙サイズをユーザー定義のサイズに設定したレポートを、同一環境で同時に複数実行した場合、レポートの生成処理や印刷処理が正常に行われない場合があります。
用紙サイズの設定方法については、こちらのナレッジをご参照ください。
「ユーザー定義のサイズ」を設定した場合、レポートの実行時にARCustomFormという名前の用紙サイズ情報を、プリンタドライバに動的に登録(削除および追加)します。
そのため、「ユーザー定義のサイズ」を設定したレポートを同一環境上で同時に複数実行した場合、用紙サイズARCustomFormの登録処理で競合が生じます。(実行するレポートの用紙サイズが全く同じサイズでも発生します。)その結果、レポートの生成や印刷でエラーが発生したり、意図しない動作になる場合があります。
任意の用紙サイズのレポートを同一環境上で複数同時に実行・印刷する可能性がある場合には、レポートの用紙サイズを「ユーザー定義のサイズ」に設定せず、あらかじめプリンタドライバに登録しておいた用紙サイズを使用するようにしてください。
イベントの実装内容について
セクションレポートのイベントに実装している処理内容が適切でないとき、生成結果に問題が生じる場合があります。
イベント内に処理を実装する場合には、いくつかの注意事項が存在します。たとえば、以下のようなものが挙げられます。
- FetchDataイベントでレポート上のコントロールの値を操作してはいけない
- セクションのイベントでFieldコレクション内の値を直接参照してはいけない
- セクションのイベントで別のセクション上のコントロールなどにアクセスしてはいけない
イベントを使用する上での注意事項については、製品ヘルプの以下のトピックをご覧ください。
実行環境のリソースについて
アプリケーションを実行する環境のリソース(メモリやCPUなど)が不足している場合や、プリントスプーラの容量が不足している場合、アプリケーションの動作や印刷動作が不安定になる可能性があります。
特に、大量ページのレポートを一度に生成・印刷した場合に発生する可能性が高くなります。現象が発生したとき、このような状態になっていないかご確認ください。
プリンタの名称について
プリンタの名称が32文字以上になっている場合や、2バイト文字を含んでいる場合には、名称を変更した上で再度動作をお試しください。
Windows APIのDEVMODE構造体のdmDeviceNameメンバの仕様により、デバイス名の長さは、32文字未満に制限されています。この制限を越える長さのデバイス名を設定した場合には、何らかの問題が発生する可能性があります。
特にネットワークプリンタの場合、サーバ名などが付加されることによって、32文字以上になってしまう場合があります。プリンタのデバイス名をご確認ください。
なお、Windowsフォームアプリケーションにおいて、印刷(参照)先のプリンタを明示的に設定する場合、PrinterNameプロパティを使用します。(PrinterNameプロパティを設定しない場合、印刷先のプリンタは実行環境上の「通常使うプリンタ(デフォルトプリンタ)」になります。)
また、セクションレポートでPrinterNameプロパティに空文字(""またはString.Empty)を設定した場合、仮想プリンタの機能を使用することになります。
仮想プリンタの機能を使用した場合、レポートの実行時にプリンタドライバへのアクセスが全く行われません。Windowsフォームアプリケーションで、レポートをプリンタに印刷することを前提としている場合には、仮想プリンタ機能は基本的に使用しないことをおすすめします。
ターミナルサービス環境について
過去の事例では、Terminal Server環境やMetaFrame(メタフレーム)環境上でActiveReportsを使用した場合に、印刷動作に何らかの異常が発生するという現象が報告されています。
ActiveReportsを含む弊社製品は、Windows Terminal Server(Service)および Citrix MetaFrame/Presentation Server/XenApp環境での動作を保証しておりません。以下の資料などをご確認ください。
プリンタドライバについて
ActiveReportsの印刷処理は、ActiveReportsが直接プリンタを制御している訳ではなく、インタフェースである.NET Frameworkの印刷機能を呼び出しているのみです。その先のデバイスは意識しておりません。
それらのインタフェースに対して出力するデータも、プリンタやプリンタドライバごとに内容が変わるという訳ではなく、同一内容のデータを出力しています。
最終的な印刷結果は使用するプリンタやプリンタドライバに依存するため、それらの条件によって印刷結果や動作に差異が生じる可能性があります。
プリンタの機種に依存して発生する問題を補完するような機能は、ActiveReportsには用意されておりません。
印刷時に何らかの問題が発生する場合は、ご使用のプリンタのドライバを変更(最新のものに更新)するか、プリンタ側の設定を適宜変更することで解決できる可能性があります。こちらの方法をお試しください。
実行環境のOSや.NET Framework等について
前述の通り、ActiveReportsの印刷処理は.NET Frameworkに依存します。そのため、印刷処理を行っている環境のOSや.NET Framework側で問題が発生している場合、その影響を受ける可能性があります。
OSや.NET Frameworkなどについて、サービスパックや修正パッチなどが最新の状態に更新されているか、ご確認ください。
もし、これらが最新の状態でない場合、Windows Updateやマイクロソフト社のWebサイトで公開されている情報をご利用いただき、最新の状態に更新した上で、再度動作をご確認ください。