3

私の Windows アプリケーションの 1 つで、印刷中のページのカバレッジを検出するモジュールが必要です。

現在、印刷ジョブ イベントを検出するためにPrint Queue Watchライブラリを使用しています。

しかし、ページのどの部分が印刷されているかを検出する方法はありますか?

前もって感謝します。

4

2 に答える 2

2

WinForms を使用して C# でアプリケーションをプログラムしたので、PrintDocument を使用し、印刷PrintPagePrintPageEventArgs.Graphics.

この場合、別のメソッドに出力するコードを屈折させることが可能である必要があります。このメソッドは、のインスタンスをGraphicsパラメーター (およびおそらくページ サイズなどの追加のパラメーター) として受け取ります。

次に、十分なサイズ (および用紙と同じ縦横比) の (白い)Bitmapオブジェクトを作成し、上記のメソッドに提供します。次に、色付けされたピクセルを数えて、プリンターが印刷したページのパーセンテージを計算できます。

印刷領域の周囲の余白と、計算のためのさまざまな用紙サイズを考慮する必要があることに注意してください。

コードの屈折が重いことが判明した場合は、Graphicsオブジェクトのラッパーを作成し、印刷中にすべての描画呼び出しを「複製」してからBitmap、ピクセルのカウントを続行できます。

(この回答は、システム上の他のアプリケーションではなく、アプリケーションを監視することを前提としています)

于 2013-09-13T18:48:10.960 に答える
2

私はそれを行う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

これが役立つことを願っています。

于 2013-09-23T17:38:20.700 に答える