DOBON.NET DOBON.NETプログラミング掲示板過去ログ

WebBrowserの印刷

  • 題名: WebBrowserの印刷
  • 著者: mezashi
  • 日時: 2008/12/08 15:24:58
  • ID: 23489
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[VB2005SP1 WinXPSP3]
分類:[.NET]

よろしくお願いします。

 最初はクリレポでPDFを開こうと思ったのですができないみたいなので
WebBrowserを使っています。

 WebBrowserを使ってPDFファイルを表示しています。
WebBrowser.Printからデータを印刷すると印刷ダイアログがでてきますので
印刷ダイアログなしで印刷がしたいです。
PDFファイルの内容は1ページじゃないのでイメージを取得して
印刷というのもできません。

MSDNとかも調べましたがのっていませんでした。
どなたかご教授お願いします。
■No23489に返信(mezashiさんの記事)
> 印刷ダイアログなしで印刷がしたいです。

検索結果だけで、試してません。

ダイアログを表示せずに印刷するには
WebBrowser.ExecWB OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER

http://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200305/03050020.txt

WebBrowser.ExecWB のままではVB.NETでは使えないみたいです。
VB.NET用に変換する必要があります。

WebBrowser.ActiveXInstance.ExecWB(...)

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33814&forum=36
■No23493に返信(やじゅさんの記事)
>
> WebBrowser.ExecWB のままではVB.NETでは使えないみたいです。
> VB.NET用に変換する必要があります。
>
> WebBrowser.ActiveXInstance.ExecWB(...)
>
> http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33814&forum=36

ご返答ありがとうございました。
一度そこにはいたったのですがMSDNでExecWBを調べても出てこないこと
と以下のことをやってもダイアログがでたので挫折していました。

http://homepage1.nifty.com/MADIA/vb/vb_bbs/200706/200706_07060010.html
魔界の仮面弁士さんのコメントから作成してみたんですが・・・

Const OLECMDID_PRINT = 6
Const OLECMDEXECOPT_DONTPROMPTUSER = 2
WebBrowser1.ActiveXInstance.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER)

上のコードをみてダイアログがでてしまう理由がわかりますか?
厚かましい質問で申し訳ありません。
■No23494に返信(mezashiさんの記事)
> WebBrowser1.ActiveXInstance.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER)
>
> 上のコードをみてダイアログがでてしまう理由がわかりますか?

第3引数省略時は、0を指定した時と同じ動作をします
Const PRINT_DONTBOTHERUSER = &H1
Const PRINT_WAITFORCOMPLETION = &H2
0: ダイアログ表示、非同期
1: ダイアログ無し、非同期
2: ダイアログ表示、同期
3: ダイアログ無し、同期

WebBrowser1.ActiveXInstance.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER,PRINT_DONTBOTHERUSER)

にすればいいのでは?
■No23495に返信(やじゅさんの記事)
> 第3引数省略時は、0を指定した時と同じ動作をします
> WebBrowser1.ActiveXInstance.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER,PRINT_DONTBOTHERUSER)
>
> にすればいいのでは?

たびたびありがとうございます。
やってみましたがダイアログが表示されました。

> Const PRINT_WAITFORCOMPLETION = &H2

は使用していないみたいですがよかったのでしょうか?
2008/12/08(Mon) 22:14:07 編集(投稿者)

手元の IE7 環境では、
 'http://msdn.microsoft.com/en-us/library/aa769937.aspx
 Const OLECMDID_PRINT As Integer = 6I
 Const OLECMDEXECOPT_DONTPROMPTUSER As Integer = &H2S
 Const PRINT_DONTBOTHERUSER As Short = 1S
 Const PRINT_WAITFORCOMPLETION As Short = &H2S
 Dim pvaIn As Object = CObj(PRINT_DONTBOTHERUSER Or PRINT_WAITFORCOMPLETION)
 o.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, pvaIn)
で、ダイアログ無しで印刷されました。(IE6/IE8 は未確認)

参照設定している場合は、
 Dim o As SHDocVw.IWebBrowser2
 '中略
 o.ExecWB(SHDocVw.OLECMDID.OLECMDID_PRINT, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, pvaIn)
かな。


ただ、ExecWB メソッドを呼び出すたびに、.ActiveXInstance の参照カウントが
増加してしまうようなので、解放処理に気をつけた方が良いかも。
魔界の仮面弁士さんの方法で、私も試してみました(XP2 : IE6)
通常のHTMLファイルの場合は、ダイアログが表示されませんでした。
PDFの場合ダイアログが表示されました。
(Webbrowser.Printと同じ結果です。)

ダイアログは、通常のHTMLファイル表示時にでるIE標準のものではなく、AcrobatReaderの印刷ダイアログが表示されます。
IEそのもので、PDFファイルを表示し、印刷アイコンをクリックしても同じ動作です。
AcrobatReader側の動きなのかなぁと。
あぁ、PDF でしたっけか。うっかり Web ページで試していました。

となると確かに、Acrobat Reader もとい Adobe Reader
(もしくは、それに相当する PDF ビューワー)の機能に依存しそうですね。


では WebBrowser からではなく、PDF のパスに対して ShellExecute API 等で
"print" の動作を指定してみてはどうでしょうか?
この方法だと、当方環境ではダイアログが表示されることなく印刷されました。
(ただし、Adobe Reader 9 が起動されたままになっていましたが…)
  • 題名: Re[9]: WebBrowserの印刷
  • 著者: mezashi
  • 日時: 2008/12/10 10:10:47
  • ID: 23518
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
2008/12/11(Thu) 10:22:36 編集(投稿者)


と歩さん、魔界の仮面弁士さん
ありがとうございます。

レス遅くなって申し訳ありません。
IE7がieframe.dllエラーを起こしてまったくつながらない状況だったので
火狐をインストして見れるようにしています。(IEは放置。。。)

> では WebBrowser からではなく、PDF のパスに対して ShellExecute API 等で
> "print" の動作を指定してみてはどうでしょうか?
> この方法だと、当方環境ではダイアログが表示されることなく印刷されました。

ShellExecute関数で実現できました!!
本当にみなさんありがとうございました。

> (ただし、Adobe Reader 9 が起動されたままになっていましたが…)

Adobe Reader 7 使ってますけど確かにタスクに AcroRd32が残りますね・・
killでプロセスを強制終了することにします。
特にこのソフト以外でAcroRd32使う気がないので。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板