.NETアプリケーションにデータを渡す仮想プリンターを作成しようとしています。次に、プリンターと.NETアプリケーションの両方をインストールするインストーラーを作成します。すべてをC#で記述できるのは本当に素晴らしいことですが、これにはプリンタードライバーの記述がアンマネージコードである必要があると感じています。誰かがこれを行う方法のかなりきれいなチュートリアルまたは例を知っていますか?
8 に答える
http://www.printerplusplus.comにアクセスしてください。オープンソースの.NET仮想プリンターです。「プリンター データ」を処理するためのコードを記述するためのインストーラーと .NET クラスが提供されます。
Github プロジェクトを使用して、まさにあなたが求めていることを行いました: Microsoft/Windows-driver-samples/print/XPSDrvSmpl
https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl
インストーラー: http://wixtoolset.org/
アプリケーション: 内部ポートをリッスンする
フロー: 1 つのインストーラーからプリンターとアプリケーションをインストールします。アプリケーションが内部ポートをリッスンしている間、ユーザーはドライバーで何かを印刷します。データが送信されると、アプリケーションがそれを受け取ります。これは XPS 用で、PDF に変換できますが、何を印刷する場合でも流れは同じです。他に何か必要な場合は、GitHub の Microsoft/Windows-driver-samples/print/ またはニーズに固有のその他のソースを確認してください。
アップデート:
ドライバーを機能させる方法について多くの質問があるため、簡単な例を次に示します。
まだインストールしていない場合は、まず Windows Driver Kit (WDK) をダウンロードします。インストール時に、最終ステップで Visual Studio の拡張機能も追加することを選択します。Visual Studio 2017 のインストールDesktop development with C++
では、適切な SDK が必要です。持っていない場合は、追加方法について以下の anser を参照してください。
Visual Studio 2017 に機能を追加するにはどうすればよいですか?
https://developer.microsoft.com/en-us/windows/hardware/windows-driver-kit
次に.zip
、Windows-driver-samples マスターのファイルをダウンロードします。
https://github.com/Microsoft/Windows-driver-samples/archive/master.zip
フォルダーに移動し、Visual Studio<UnzipFolder>\print\XPSDrvSmpl
で開きます。XPSDrvSmpl.sln
次に、GitHub の Microsoft 独自のガイドに従ってください。ご覧のとおり、Visual Studio 2015 用ですが、2017 でも同じだと思います (まだテストされていません)。
Windows Driver Kit (WDK) 10 と Visual Studio 2015 を使用してドライバー ソリューションをビルドするには、次の手順を実行します。
- Visual Studio 2015 でソリューション ファイルを開きます。
- すべての非バイナリ ファイル (通常、サンプルの \install ディレクトリにあります) をパッケージ プロジェクトに追加します。a. Solution Explorer で、Driver Files を右クリックします。c. [追加] を選択し、[既存のアイテム] をクリックします。サンプルをダウンロードした場所に移動し、インストール ディレクトリ内のすべてのファイル、または INF、INI、GPD、PPD ファイルなどの同等の非バイナリ ファイル セットを選択します。[追加] をクリックします
- これらのファイルをドライバー パッケージに追加するように構成します。ソリューション エクスプローラーでソリューションを右クリックし、[追加] > [新しいプロジェクト] を選択します。Visual C++/Windows Driver/Package の下にある Driver Install Package を選択します。b. ソリューション エクスプローラーで、パッケージ プロジェクトを右クリックし、[プロパティ] を選択します。c. 左側のペインで、[構成プロパティ] > [ドライバーのインストール] > [パッケージ ファイル] をクリックします。d. 右側のウィンドウで、省略記号ボタン (...) を使用して、ドライバー パッケージに追加する必要がある一連のファイルを参照します。手順 2-c で追加したすべてのデータ ファイル (INF ファイルを除く) を追加する必要があります。この構成はアーキテクチャごとであるため、構築するアーキテクチャごとにこの構成を繰り返す必要があります。e. [OK] をクリックします。
- INF ファイルを開き、ビルドされた出力と一致するように編集します。a. INF ファイルを開きます。b. [バージョン] セクションで、CatalogFile=XpsDrvSmpl.cat のようなカタログ ファイルへの参照を追加します。c. SourceDisksFiles セクションで、ビルドする DLL ファイルの場所を =1 に変更します。これは、このドライバにアーキテクチャ固有のディレクトリがないことを示しています。複数のアーキテクチャを同時に出荷する場合は、ドライバー INF を手動で照合する必要があります。
この時点で、Visual Studio 2015 はドライバー パッケージをビルドし、ファイルをディスクに出力できるようになります。ドライバーの署名と展開を構成するには、「ドライバーの開発、テスト、および展開」を参照してください。
https://github.com/Microsoft/Windows-driver-samples/tree/master/print/XPSDrvSmpl#build-the-sample
WinAPIラッピングをたくさんしなければならないと思います。あなたがしなければならないことを見つけるためにWindowsDriverDevelopmentKitの研究を始めてください。
また、この商用プリンタードライバーリソースツールキットfor.NETを見つけました...
LPD タイプのプリンターやモニター ポート 9100 のようにアプリ自体を公開するだけで済みます。その後、任意の印刷ドライバーをインストールして、それをアプリに指定することができます。
同様の質問に対する回答を探していたところ、ウィキペディアでこのリンクを見つけました - http://www.colorpilot.com/emfprinterpilot.html (異なる言語で仮想プリンターを作成できます)
別のアプローチの使用を検討してみませんか。自由に利用できる Print-to-PDF アプリケーションなど、中間の既製の印刷プログラムを使用するようなものです。次に必要なのは、車輪を再発明するために頭を割る代わりに、サードパーティのライブラリ (無料およびオープンソースの差異もあります) を使用して PDF をデコードすることだけです。他にも Print-to-XXX アプリケーションがあり、適切なフォーマットに応じて検討することができます。
PDFのアプローチを解釈することも良いことではありません。やりたいことをやりたい理由がわからない。おそらく、独自の PDF プリンターを作成しようとしているのでしょう。
Windows Driver Development のことを実際に見てみる必要があると思います。プリンター ドライバーを開発する場合は、C++ で作成する必要があると思います。
幸運を。
私の記憶が正しければ、Microsoft はプリンター ドライバーの開発において .NET をサポートしていません。私は、純粋な .NET プリンター ドライバーをまだ見つけていません。そうすることで、あなたは非常に勇敢な男になるでしょう!Web サイト「Printer Driver Resource Toolkit」には、ドライバーが .NET で記述されているとは記載されていません。