C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: プリンタ設定の保持方法


(過去ログ 120 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■72074 / inTopicNo.1)  プリンタ設定の保持方法
  
□投稿者/ トラウザー (1回)-(2014/05/15(Thu) 06:26:32)

分類:[VB.NET/VB2005 以降] 

会社で報告書を印刷するプログラムを作っています
写真がまざるのでカラーと白黒と分けないといけません

過去ログを見るとvb.netでプリンタの設定を直接制御するのはいろいろややこしそうなので
エクセルのようにファイルに前回のプリンタ設定を覚えさせたいです


例えば下記の印刷設定ダイアログを呼び出して印刷をしたときに

http://dobon.net/vb/dotnet/graphics/printdialog.html

次回印刷のときに、このダイアログを呼び出すことなく
同じ設定で印刷したいのです

Dim pd As New System.Drawing.Printing.PrintDocument

この中にプリンタの設定が埋め込まれているのでしょうか
その設定を保存、呼び出し、設定することができるのでしょうか

引用返信 編集キー/
■72075 / inTopicNo.2)  Re[1]: プリンタ設定の保持方法
□投稿者/ オショウ (136回)-(2014/05/15(Thu) 09:00:01)
No72074 (トラウザー さん) に返信
> 会社で報告書を印刷するプログラムを作っています
> 写真がまざるのでカラーと白黒と分けないといけません

  簡単に行いたいなら、印刷に使用するプリンターをデバイス
  として複数登録し、1個はモノクロとして設定、もう1個は
  カラーとして設定しておけば、プリンターのデバイス名にて
  切り替えて印刷できるようになりますが・・・

  大量に印字するような場合、デフォルトトレイの設定を各々
  設定しておけば、プリンター名だけで、その設定された内容
  で印刷できるようになるので、プログラムが非常に簡単にな
  ります。

  プログラミングスキルを上げて、プログラム中から動的に設
  定変更して・・・と言うことがどうしてもやりたいなら、時
  間のある時に勉強しましょう。

  Win32 API の、GetPrinter,SetPrinter や、PRINTER_INFO_2
  とかの構造体情報の、DEVMODE構造体の領域外(カスタム領域)
  に、プリンターメーカーの独自情報領域が設定されているの
  で、そういうところをいじると、お望みのことが細かくでき
  るようになります。が、メーカー独自なので、非公開の場合
  動作保証はありませんので、頑張ってもらうしかありません

以上。参考まで
引用返信 編集キー/
■72081 / inTopicNo.3)  Re[2]: プリンタ設定の保持方法
□投稿者/ トラウザー (2回)-(2014/05/16(Fri) 06:49:25)
No72075 (オショウ さん) に返信
>   簡単に行いたいなら、印刷に使用するプリンターをデバイス
>   として複数登録し、1個はモノクロとして設定、もう1個は
>   カラーとして設定しておけば、プリンターのデバイス名にて
>   切り替えて印刷できるようになりますが・・・

プリンタを複数登録のやりかたが
記載されたホームページなどもしありましたら教えていただけませんでしょうか



>   Win32 API の、GetPrinter,SetPrinter や、PRINTER_INFO_2
>   とかの構造体情報の、DEVMODE構造体の領域外(カスタム領域)
>   に、プリンターメーカーの独自情報領域が設定されているの
>   で、そういうところをいじると、お望みのことが細かくでき
>   るようになります。が、メーカー独自なので、非公開の場合
>   動作保証はありませんので、頑張ってもらうしかありません

エクセルの場合はファイルのシート毎に設定が残っていたりするのですが
それはきっとウインドウズ上でうまいことやっているということなのでしょうね・・・




引用返信 編集キー/
■72088 / inTopicNo.4)  Re[3]: プリンタ設定の保持方法
□投稿者/ とおりすがり (2回)-(2014/05/16(Fri) 10:21:06)
No72081 (トラウザー さん) に返信
> プリンタを複数登録のやりかたが
> 記載されたホームページなどもしありましたら教えていただけませんでしょうか
普通にスタートメニューから「プリンタとFAX」に「プリンタの追加」をするだけでは?
同じプリンタに対して複数回。

使ってるプリンタによっては何か付属のツールを使用したりするかもしれませんね。
プリンタを買ったときにプリンタの説明書に書いてある方法でどうぞ。
引用返信 編集キー/
■72090 / inTopicNo.5)  Re[1]: プリンタ設定の保持方法
□投稿者/ tk (2回)-(2014/05/16(Fri) 10:38:07)
2014/05/16(Fri) 10:50:52 編集(投稿者)
2014/05/16(Fri) 10:50:44 編集(投稿者)

印刷設定の保存と復元なら
PrinterSettings.GetHdevmode()、PrinterSettings.SetHdevmode()
で出来ると思います。(ハンドルの開放忘れにご注意)
ドライバー固有情報を含める場合、Win32ApiのDocumentPropertiesでサイズを取得できたかと思います。
<追記>
DocumentProperties使わなくてもDEVMODE.dmDriverExtraで良さそうでした。
引用返信 編集キー/
■72103 / inTopicNo.6)  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 ドライバです。


> エクセルの場合はファイルのシート毎に設定が残っていたりするのですが

 残っていません。
プリンタを選択したときに、そのプリンタの印刷設定を、すべてのシートに適用します。
印刷ダイアログを出し、他のプリンタを選択して、印刷ダイアログを閉じずにプリンタ フォルダから印刷設定を開いて、変更します。
そして、エクセルの印刷ダイアログに戻り、プリンタを選択し直して印刷すれば、すべてのシートに同じ印刷設定が適用されます。

引用返信 編集キー/
■72126 / inTopicNo.7)  Re[2]: プリンタ設定の保持方法
□投稿者/ とおりすがり (3回)-(2014/05/20(Tue) 09:28:56)
No72103 (Jitta さん) に返信
>>エクセルの場合はファイルのシート毎に設定が残っていたりするのですが
>
>  残っていません。
エクセルが覚えていますよ。シート毎の印刷設定。プリンタは覚えていないという意味であれば正しいですが。
http://answers.microsoft.com/ja-jp/office/forum/office_2010-excel/%E8%A4%87%E6%95%B0%E3%82%B7%E3%83%BC%E3%83%88/03e40357-34ae-489d-8a66-61a78197fd39
引用返信 編集キー/
■72163 / inTopicNo.8)  Re[3]: プリンタ設定の保持方法
□投稿者/ Jitta (145回)-(2014/05/21(Wed) 21:40:55)
No72126 (とおりすがり さん) に返信
> エクセルが覚えていますよ。シート毎の印刷設定。プリンタは覚えていないという意味であれば正しいですが。

 本当ですね。
プリンタの選択を変えると、そのプリンタの設定がすべてのシートに適用されるので、
「プリンタ選択時に、すべてのシートに適用する」
だと思っていました。

 xlsx を zip に変更して展開すると、printerSettings というフォルダーが有り、
そこに printerSettings?.bin というバイナリ ファイルがありました。
シート1とシート2で設定を変えると、2つのファイルに差異がありました。
ファイルのフォーマットは、Office Open XML File Formats を見ればわかるんだろうな。。。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -