私の Windows アプリケーションの 1 つで、印刷中のページのカバレッジを検出するモジュールが必要です。
現在、印刷ジョブ イベントを検出するためにPrint Queue Watchライブラリを使用しています。
しかし、ページのどの部分が印刷されているかを検出する方法はありますか?
前もって感謝します。
私の Windows アプリケーションの 1 つで、印刷中のページのカバレッジを検出するモジュールが必要です。
現在、印刷ジョブ イベントを検出するためにPrint Queue Watchライブラリを使用しています。
しかし、ページのどの部分が印刷されているかを検出する方法はありますか?
前もって感謝します。
WinForms を使用して C# でアプリケーションをプログラムしたので、PrintDocument を使用し、印刷PrintPage
はPrintPageEventArgs.Graphics
.
この場合、別のメソッドに出力するコードを屈折させることが可能である必要があります。このメソッドは、のインスタンスをGraphics
パラメーター (およびおそらくページ サイズなどの追加のパラメーター) として受け取ります。
次に、十分なサイズ (および用紙と同じ縦横比) の (白い)Bitmap
オブジェクトを作成し、上記のメソッドに提供します。次に、色付けされたピクセルを数えて、プリンターが印刷したページのパーセンテージを計算できます。
印刷領域の周囲の余白と、計算のためのさまざまな用紙サイズを考慮する必要があることに注意してください。
コードの屈折が重いことが判明した場合は、Graphics
オブジェクトのラッパーを作成し、印刷中にすべての描画呼び出しを「複製」してからBitmap
、ピクセルのカウントを続行できます。
(この回答は、システム上の他のアプリケーションではなく、アプリケーションを監視することを前提としています)
私はそれを行う1つの方法を知っています。プリント プロセッサを作成する必要があります。プリント プロセッサは、Print Monitor に送信される前にデータを変更または読み取ることができるドライバーです (これは、独自の形式でプリンター ポートに出力するドライバーです)。
印刷アーキテクチャのグローバル ビューhttp://technet.microsoft.com/en-us/library/cc976755.aspxを参照してください。プリンター プロセッサの機能の説明は次のとおりです: https://serverfault.com/questions/304536/what-is-the-reason-for-choosing-a-different-print-processor。
PowerShell を使用してプリント プロセッサを変更する方法: http://blogs.technet.com/b/chad/archive/2012/10/31/tip-52-mixing-the-old-and-new-setting-a- printer-s-print-processor-using-powershell-wmi-and-setprinter-exe.aspx
これを行う方法 (つまり、プリント プロセッサを作成する方法) のサンプルを次に示します: http://code.msdn.microsoft.com/windowshardware/Genprint-4a71134f。
それを機能させるには、GdiPlayPageEMF をメモリ上のビットマップにリダイレクトする必要があります。その後、プリンターのハンドルに送信される前にピクセルをカウントできます。Google で GdiPlayPageEMF について検索すると、このようなことを行う方法について興味深い結果が得られます。
また、ここには印刷に関する多くの良い情報がありますhttp://www.undocprint.org/winspool/spool_files#reading_job_data。
これが役立つことを願っています。