■72103 / ) |
Re[1]: プリンタ設定の保持方法 |
□投稿者/ Jitta (142回)-(2014/05/16(Fri) 22:17:35)
|
■No72074 (トラウザー さん) に返信
プリンタの印刷設定は、DEVMODE 構造体にあります。 http://msdn.microsoft.com/en-us/library/windows/desktop/dd183565.aspx
ここをよく読んでいただくと、「Contains the number of bytes of private driver-data that follow this structure.」と書かれているところに気がつくと思います。ここに書かれている構造体の後ろに、ドライバ(メーカーではない)独自のデータがあります。このデータを扱うためには、それぞれのメーカに仕様を公開していただくしかありません。 しかし、独自データも含めた DEVMODE 構造体を保存しておき、印刷前に設定してやれば、その設定で印刷できます。
やり方は、まずは準備です。 1番目に、プリンタ フォルダを開いて、印刷したいプリンタの印刷設定を設定します。 2番目に、PrintDocument.DefaultPageSettings.CopyToHdevmode メソッドで、DEVMODE 構造体をコピーします。 http://msdn.microsoft.com/ja-jp/library/system.drawing.printing.pagesettings.copytohdevmode.aspx 3番目に、コピーした DEVMODE 構造体を保存します。 保存するサイズは、dmSize + dmDriverExtra です。 dmSize にアクセスするためには、先頭から WCHAR * CCHDEVICENAME + WORD + WORD サイズ分、読み飛ばします。 CCHDEVICENAME は、WinGDI.h で 32 と定義されています。 dmColor ~ dmCollate で short が5つあるのですが、dmCollate と dmFormName の間にギャップがありません。 dNF で定義するときは、ここに注意が必要です。 Pinvoke.net で公開されている定義では、dmFormName 以降がずれます。 # 2バイト境界にすればいいと思うのだけど、エラーになって設定できなかった。
使用時には、 3で保存した DEVMODE 構造体を呼び出し、 PrintDocument.DefaultPageSettings.SetHdevmode メソッドで設定します。 http://msdn.microsoft.com/ja-jp/library/system.drawing.printing.pagesettings.sethdevmode.aspx
ただし、Windows Vista 以降のプリンタ ドライバには、V3 ドライバと V4 ドライバがあります。 V3 ドライバであれば、上記方法で、基本的に大丈夫です(C 言語アプリで、複数のメーカのプリンタに対して実績有り)。 V4 ドライバの場合は分かりません。
どちらのドライバかを見るには、プリント サーバのプロパティを開き、 ドライバ タブで、目的のプリンタを選択して、プロパティ ボタンをクリックします。 エクスプローラで、ドライバ パスにあるドライバ ファイルのプロパティを開きます。 ファイル バージョンが 0.3.0.0 なら、V3 ドライバです。
> エクセルの場合はファイルのシート毎に設定が残っていたりするのですが
残っていません。 プリンタを選択したときに、そのプリンタの印刷設定を、すべてのシートに適用します。 印刷ダイアログを出し、他のプリンタを選択して、印刷ダイアログを閉じずにプリンタ フォルダから印刷設定を開いて、変更します。 そして、エクセルの印刷ダイアログに戻り、プリンタを選択し直して印刷すれば、すべてのシートに同じ印刷設定が適用されます。
|
|