レポートの印刷時、文字の出力位置がずれたり、一部のページしか印刷されないなどの問題が発生する場合があります。
対象製品
ActiveReports for .NET 6.0J Professional
詳細
印刷結果に何らかの異常(乱れ)が発生する場合には、いくつかの原因が考えられます。
- Printメソッドでレポートを印刷している場合には、メソッドの第3引数にFalseを指定した上で、再度動作をお試しください。
Printメソッドの第3引数を、指定なし(またはTrue)で実行している場合、印刷処理が非同期で実行されます。
非同期で実行されている印刷処理が完了する前に、次の印刷処理(Printメソッド)が実行された場合や、印刷処理が中断された場合、プリンタ(スプーラ)に出力されるデータが不正なものになり、結果的に印刷結果の乱れや、全く印刷が行われないなどの問題が発生する可能性があります。 - 過去の事例において、複数スレッドで同時に印刷処理を行なった場合に、処理のタイミングによって印刷結果が乱れる現象が報告されております。
プリンタのような共有リソースに対する処理を行う際、印刷ジョブの開始処理がそれぞれのスレッドで同時に実行されたときに、処理の競合が発生する可能性が考えられます。
Printメソッドによる印刷処理を複数のスレッドで同時に実行する場合には、SyncLockステートメントなどを使用し、印刷処理をロックしてください。
◆サンプルコード(VB.NET)
Private Shared ReadOnly syncObject As New Object
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim rpt As New rptSample()
rpt.Run(False)
SyncLock syncObject
rpt.Document.Print(False, False, False)
End SyncLock
End Sub
◆サンプルコード(C#)
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);
}
} - Runメソッドの引数を"True"に設定している場合は、"False"に設定した上で、再度動作をお試しください。
Runメソッドの引数を"True"に指定して実行した場合、レポートの生成処理が非同期で行われますので、印刷を実行するタイミングによっては、生成処理が完了する前に印刷処理が実行されてしまい、不正な結果になる可能性がございます。 - ご指摘の事象が発生するレポートは、ActiveReports のイベントにおいて、何らかの処理を行われておりますでしょうか。
ActiveReports のイベント内に処理を実装する場合には、いくつかの注意事項がございます。
例えば、「FetchDataイベント内でレポート上のコントロールの値を操作してはいけない」、「セクションの Formatイベント内から Fieldコレクション内の値を直接参照してはいけない」などの処理が該当します。
イベントを使用する上での注意事項については、製品ヘルプの以下のトピックをご覧ください。
PowerTools ActiveReports for .NET 6.0J
- ActiveReports for .NETユーザーガイド
- ActiveReports for .NETの概要
- アーキテクチャと概念
- イベント
- よくある質問
- イベント - 実行環境のリソース不足や、プリンタスプーラの容量不足等が考えられます。これらは特に、大量のレポートを一度に印刷した場合に発生する可能性が高いです。現象発生時、このような状態になっていないかどうかをご確認ください。
- プリンタ名に32文字以上の名称を指定している場合や、2バイト文字を含んでいる場合には、プリンタ名を変更した上で再度動作をお試しください。
Windows APIのDEVMODE構造体のdmDeviceNameメンバの仕様により、デバイス名の長さは、32文字未満に制限されております。この制限を越える長さのデバイス名を設定した場合には、何らかの問題が発生する可能性がございます。
特にネットワークプリンタなどの場合、サーバ名などが付加されることによって32文字以上になってしまう場合がございますので、プリンタのデバイス名をご確認ください。
[INFO: Working with Long Printer Names]
http://support.microsoft.com/kb/240082/en
- 過去の事例では、Terminal Server環境やMetaFrame(メタフレーム)環境上でActiveReportsを使用した場合に、印刷動作に何らかの異常が発生するという現象が報告されております。
誠に恐れ入りますが、ActiveReportsを含む弊社製品は、Windows Terminal Server(Service)および Citrix MetaFrame/Presentation Server/XenApp環境での動作を保証しておりません。
[その他の環境 - .NET 製品の対応環境 | GrapeCity Developer Tools]
http://www.grapecity.com/tools/support/technical/environment/dotnet/others.htm
動作保証外の環境上でのご使用に関しましては、十分に検証された上でご判断くださいますようお願いいたします。
また、プリンタメーカによっては、MetaFrameやTerminal Service専用のプリンタドライバを提供している場合があります。プリンタドライバを変更することで、問題を解決できる可能性がございますので、こちらの方法をお試しください。 - ActiveReportsの印刷処理は、ActiveReportsが直接プリンタを制御している訳ではなく、インタフェースである.NET Frameworkの印刷機能を呼び出しているのみです。その先のデバイスは意識しておりません。
それらのインタフェースに対して出力するデータも、プリンタやプリンタドライバごとに内容が変わるという訳ではなく、同一内容のデータを出力しています。
しかしながら、最終的な印刷結果は、使用するプリンタやプリンタドライバに依存しますので、それらの条件によって印刷結果や動作に差異が生じる可能性がございます。
申し訳ございませんが、プリンタの機種に依存して発生する問題を補完するような機能は、ActiveReportsには用意されておりません。
印刷時に何らかの問題が発生する場合は、ご使用のプリンタのプリンタドライバを変更(最新のものに更新)するか、プリンタ側の設定を適宜変更することで解決できる場合もございます。こちらの方法をお試しください。
また、マイクロソフト社の以下のWebサイトで公開されている情報につきましても、参考までにご覧ください。
[印刷スプーラ オプションを設定する]
http://technet.microsoft.com/ja-jp/library/cc739118(WS.10).aspx
[印刷のトラブルシューティング]
http://technet.microsoft.com/ja-jp/library/cc728119(WS.10).aspx
[プリンターに関する問題のトラブルシューティング]
http://windows.microsoft.com/ja-JP/windows-vista/Troubleshoot-printer-problems
[印刷イベントのログを有効または無効にする]
http://technet.microsoft.com/ja-jp/library/cc784896(WS.10).aspx
[スプール フォルダの場所を変更する]
http://technet.microsoft.com/ja-jp/library/cc736979(WS.10).aspx
[[NT] ページング ファイルおよびスプール ファイルを移動させる]
http://support.microsoft.com/kb/123747/ja
[[NT] LPR プリンタでのデータ化けおよびデータ抜けについて]
http://support.microsoft.com/kb/411224/ja
[スプールされる順番と印刷される順番が異なる]
http://support.microsoft.com/kb/891594/ja
関連情報
- Printメソッドなどで印刷処理を実行した後、メソッド呼び出し元のモジュールが終了すると、その時点で印刷処理も終了してしまいます。
- 対応プリンタにはどんなものがありますか?
- レポートを印刷すると、ブルースクリーン画面が表示される場合や、OSが再起動する場合がある
- レポート作成時のメモリ使用量を軽減させる方法について
キーワード
問題 印刷・プレビュー
この文書は、以前は次のFAQ IDで公開されていました : 11943