- - PR -
ASP.NETでクライアントの利用するプリンタの設定を変更したい
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-05-14 15:43
こんにちは。教えてください。
ASPで帳票を作成しています。 印刷はクライアントサイドでJavaScriptのwindow.print()で行っているのですが、プリンタの設定をサーバーで操作したいのです。 クライアントが利用するプリンタは、サーバーからアクセスできるように共有設定してあるので、プリンタへのアクセスはできるのですが、Webで適当に探して設定しているのですが、いまいち設定の変更の仕方がわかりません。 とりあえず以下はデフォルトのプリンタの用紙の向きを変更しているつもりですが、うまくいきません。 Public Class PrinterSetting <StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _ Public Structure DEVMODE <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> _ Public dmDeviceName As String Public dmSpecVersion As Short Public dmDriverVersion As Short Public dmSize As Short Public dmDriverExtra As Short Public dmFields As Integer Public dmOrientation As Short Public dmPaperSize As Short Public dmPaperLength As Short Public dmPaperWidth As Short Public dmScale As Short Public dmCopies As Short Public dmDefaultSource As Short Public dmPrintQuality As Short Public dmColor As Short Public dmDuplex As Short Public dmYResolution As Short Public dmTTOption As Short Public dmCollate As Short <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32 )> _ Public dmFormName As Short Public dmLogPixels As Short Public dmBitsPerPel As Short Public dmPelsWidth As Integer Public dmPelsHeight As Integer Public dmDisplayFlags As Integer Public dmDisplayFrequency As Integer Public dmICMMethod As Integer Public dmICMent As Integer Public dmMediaType As Integer Public dmDitherType As Integer Public dmReserved1 As Integer Public dmReserved2 As Integer Public dmPanningWidth As Integer Public dmPanningHeight As Integer End Structure <DllImport("kernel32.dll")> _ Shared Function GlobalFree(ByVal hMem As IntPtr) As IntPtr End Function <DllImport("kernel32.dll")> _ Shared Function GlobalLock(ByVal hMem As IntPtr) As IntPtr End Function <DllImport("kernel32.dll")> _ Shared Function GlobalUnlock(ByVal hMem As IntPtr) As Boolean End Function Public Sub New() Dim PP As New Printing.PrinterSettings Dim Mem As IntPtr = PP.DefaultPageSettings.PrinterSettings.GetHdevnames Dim DevMem As IntPtr = PrinterSetting.GlobalLock(Mem) Dim Dev As DEVMODE = CType(Marshal.PtrToStructure(DevMem, GetType(PrinterSetting.DEVMODE)), DEVMODE) Dev.dmOrientation = 2''これで横向きになるんでないの????? Marshal.StructureToPtr(Dev, DevMem, True) PrinterSetting.GlobalUnlock(Mem) PP.DefaultPageSettings.PrinterSettings.SetHdevmode(Mem) PrinterSetting.GlobalFree(Mem) End Sub End Class お分かりになる方、どうぞ教えてください。よろしくお願いします。 |
|
投稿日時: 2008-05-14 18:01
そのコードは、いつ、何処で動いて、どこにあるプリンタの設定を変更しているのでしょう?
ってのを、よーく考えると、何故変更されないか、分かります。 で、目的のことは、まず出来ません。そのコードを active X として配布し、スクリプトから操作すれば、出来るようになります。 その他の方法として、CSS でなんとか出来ると思います。これが正攻法でしょう。 |
|
投稿日時: 2008-05-14 18:22
返信ありがとうございます。
ご指摘のことは、サーバーとクライアントについてのことかと思うのですが、サーバーからアクセスできるようにしたプリンタもだめなのでしょうか?できるような気がしてしまいましたが、違うのかな。またはもっと別のところのご指摘なのでしょうか? また、サーバー、クライアントに限らず、現状のコードはちゃんと動作しません。う〜ん、問題がいっぱいです。 でもCSSでできるんですね、知りませんでした。こっちは調べてみます。ありがとうございます(でも、引き続きご指摘をいただけると助かります。。。すみません)。 よろしくお願いします。 |
|
投稿日時: 2008-05-15 00:00
cssでの印刷時のスタイル設定はこんな感じです。
http://allabout.co.jp/internet/hpcreate/closeup/CU20050728A/ |
|
投稿日時: 2008-05-15 22:18
サーバのプリンタに設定できないのは、dmFields を設定していないから、ではないかな?
プリンタから設定を引っ張ってきて、dmOrientation だけ変えていますが、これは union の中にあります。ここをどう解釈するかを、dmFields で指定してあげないといけないのでは? (ざっと見ると、union の箇所を一つしか定義していないので、union がどういうものか理解されていると判断しました。) 「サーバーからアクセスできるようにした」から、なぜ変えられると思ったのでしょう? ああ、「サーバの設定を変えるのだから、それを参照しているクライアントも変わるのでは?」という意味ですか?確かにそうですね。 では、サーバの OS 種類はなんでしょう?そのサーバで、ASP.NET のワーカープロセスに、プリンタの設定変更権があるでしょうか。セキュリティ例外が発生していると思います。発生していないなら、なんだろ??? 今、Virtual PC からホスト上のプリンタを参照してみましたが、印刷設定は別々に持つみたいですね。1面2ページ設定しているプリンタを参照しましたが、Virtual PC では1面1ページになっています。このことから、サーバの設定を変えられても、クライアントから印刷されるものを変えられないのではないかと思います。 [ メッセージ編集済み 編集者: Jitta 編集日時 2008-05-15 22:21 ] |
|
投稿日時: 2008-05-16 12:49
べるさん、Jittaさんお返事ありがとうございます!!
返事が遅くなってしまいました(機能は別の問題で絶望しておりました)。 ○べるさん 参考のURLありがとうございます!!助かります!!CSSでできる範囲のことは、CSSでしっかりやろうと思います。ご提示のURLで勉強したいと思います! ○Jittaさん ------------------------------- サーバのプリンタに設定できないのは、dmFields を設定していないから、ではないかな? プリンタから設定を引っ張ってきて、dmOrientation だけ変えていますが、これは union の中にあります。ここをどう解釈するかを、dmFields で指定してあげないといけないのでは? (ざっと見ると、union の箇所を一つしか定義していないので、union がどういうものか理解されていると判断しました。) -------------------------------- おっしゃるとおり、全然理解してないです。すみません、自分でも調べているのですかなかなか参考になるサイトが見つかりませんで、可能であればご教授願えませんでしょうか? --------------------------------- では、サーバの OS 種類はなんでしょう?そのサーバで、ASP.NET のワーカープロセスに、プリンタの設定変更権があるでしょうか。セキュリティ例外が発生していると思います。発生していないなら、なんだろ??? ---------------------------------- 発生していないのは、デバッグでやっているからです。サーバー、クライアントの前に、プリンタの設定を変えるコードを書くところで挫折している感じでした。ちなみに、プリンタの設定変更はIUSR_コンピュータ名のユーザーではできないでしょうか。じゃあ諦めないと駄目ですね。 --------------------------------------- 今、Virtual PC からホスト上のプリンタを参照してみましたが、印刷設定は別々に持つみたいですね。1面2ページ設定しているプリンタを参照しましたが、Virtual PC では1面1ページになっています。このことから、サーバの設定を変えられても、クライアントから印刷されるものを変えられないのではないかと思います。 --------------------------------------- 今LANでつないだ二台のパソコンで、プリンタを共有していますが、1台からプリンタの設定を変更すると、もう一台のPCで印刷するときその設定が反映されています。以前試して、こういうことできるんだと思って、今回のことを思い立った感じです。 色々無知でどうしようもない感じです。 |
|
投稿日時: 2008-05-16 13:02
というか、プリンタの設定自体は、個別にセキュリティの設定でEveryoneに許可を与えてあげればOKだったりしますでしょうか?OKだったら、最高です!
|
|
投稿日時: 2008-05-16 13:18
度々すみません、今気になってプリンタの設定の変更二台のPCでやってみたら、駄目でした。アレ?この前のはなんだったんだ。すみませんでした。
|