0

私たちの VB WinForms アプリケーションは、標準の PrintDocument オブジェクトを使用して一連のレポートを印刷します。一部は複数ページです。私のクライアントは、ハード コピーのレポートが正しい順序で印刷されていないと指摘しました。コードをデバッグすると、レポートが正しい順序で生成されていることを確認できますが、印刷キューを調べると、レポートが送信された順序で表示されません。送信済み (日時) でキューを並べ替えると、レポートの正しい順序が表示されます。

複数のレポートがキューに入れられ、日時順に印刷されるように、VB.NET から印刷キューを設定する方法はありますか? それとも間違った穴で釣りをしていますか?

ティア

4

2 に答える 2

2

プリンターの印刷スプーリングをオフにして、アプリケーションがプリンターに直接印刷されるようにします。これは、プリンタのプロパティの[詳細設定]タブにあります。

ここに画像の説明を入力してください

于 2012-10-18T19:18:26.527 に答える
2

これは印刷スプールの影響です。アイテムは、スプールが完了するまで印刷キューに追加されないため、印刷された順序ではなく、スプールが完了した順序でキューに入れられます。大きなファイル (画像などを含む) は、小さなファイルよりもスプールに時間がかかるため、スプールが速くなると、後で印刷されるアイテムが最初にスプールを終了する可能性があります。印刷スプールを無効にすることもできますが (提案されているように)、すべてのアプリケーションがスプールに仕事をさせるのではなく、印刷ジョブが完了するまで印刷ジョブをブロックするため、印刷が煩雑になる可能性があります。

別の方法として、独自のアプリケーションで印刷キューを照会することもできます。スプールが終了したことを確認するまで、次の印刷ジョブを送信しないでください (スプールが使用されている場合)。これにより、ユーザーにシステム設定の変更を強制することと、他のプログラムが印刷スプールの利便性にアクセスできないようにすることの両方を強制するという不器用な解決策を回避できます。見る :

PrintQueue クラス

W̶i̶t̶h̶ ̶t̶h̶e̶ ̶a̶b̶o̶v̶e̶ ̶y̶o̶u̶ ̶c̶a̶n̶ ̶p̶r̶o̶g̶r̶a̶m̶a̶t̶i̶c̶a̶l̶l̶y̶ ̶c̶h̶a̶n̶g̶e̶ ̶t̶h̶e̶ ̶s̶p̶o̶o̶l̶/̶d̶i̶r̶e̶c̶t̶ ̶s̶e̶t̶t̶i̶n̶g̶ ̶(̶r̶a̶t̶h̶e̶r̶ ̶t̶h̶a̶n̶ ̶d̶o̶i̶n̶g̶ ̶i̶t̶ ̶v̶i̶a̶ ̶p̶r̶i̶n̶t̶e̶r̶ ̶p̶r̶o̶p̶e̶r̶t̶i̶e̶s̶ ̶m̶a̶n̶u̶a̶l̶l̶y̶)̶ ̶o̶r̶, ( Nevermind, that property is read-only. ) probably better, use something like

PrintQueue.GetPrintJobInfoCollection

印刷ジョブの送信時にキューを監視します。

上記は、Server2008 および VistaSP2 以降でサポートされています。XP 以前の場合は、次のような手順に従う必要がある場合があります。

Windows で印刷キューを照会する方法

おそらくリッスンすることによって:

WM_SPOOLERSTATUS

于 2012-10-18T19:38:23.123 に答える