IEでメニューがなかったり右クリックができなくて印刷できないページを印刷してみるプログラム
2016/06/09
Webページのキャプチャで縦スクロールバーが入らないようにした。
2016/06/08
一応正式版扱い。Webページのキャプチャ機能を追加。
ダウンロード
今日は counter_today人がこのページを訪れました。
昨日は counter_yesterday人がこのページを訪れました。
doprintie.zip - .NET Framework 4 以降で動作します
doprintie-1.1.zip - うまくキャプチャできないときはこちらを試してみてください。
これはなに?
どういう理由かわからないけど、メニュー無し新規ウインドウ+コンテキストメニュー禁止、の組み合わせで起動する社内システムがあります。
職場で大変お世話になっているKK25様のタスクに、この社内システムのWebページを印刷しなければならないものがありまして、ヘルプ要請があったのですが、その場では解決できませんでした。
社内システムはIE専用だったので、FirefoxやChromeの拡張で何とかする、という事ができないし、JavaScriptを無効にすると描画自体が行われなくなってしまうためです。
そんな状態を何とか打破してKK25様をお助けするために作られたのがこのプログラムになります。
doPrintIE.exe の説明
ブラウザのメニューから印刷が選択できなかったり、右クリックでコンテキストメニューが表示されないWebページを印刷するために使えます。
出来の悪いタブブラウザみたいなものと考えてください。
URLを入力してから、「新規タブを開く」ボタンを押すと、Webページが表示されます。
表示が行われた状態で、
- 「印刷」ボタンを押すと印刷ダイアログが表示され印刷が可能になります。
- 「キャプチャ画面取得」もしくは「キャプチャ画面取得2」ボタンを押すとクリップボードにWebページ全体のキャプチャがコピーされます。ペイントやMS-WORD、MS-Excelに貼り付けができるようになります。
- 「タブ削除」ボタンを押すと現在Webページを表示しているタブが削除されます。
注意
「キャプチャ画面取得」ボタンで取得できるWebページ全体のキャプチャ画像ですが、表示するWebページによっては右端1ピクセル分が欠けたようになります。
そのWebページの構造上対処が難しいです。もう少し調べてはみますが…
1.1のナンバリングのものは、どうしても右端最下部で数ドット欠けてしまう場合があります。対処方法がわからないのです…
その他
- Visual Studio 2015 のWindows Form アプリケーションで利用できる WebBrowser コンポーネントを使っています。こちらはIEを呼び出してWebページを表示します。
このコンポーネントにページを表示させ、ブラウザの外から印刷ダイアログ表示メソッドを呼び出して印刷を行わせています。
- WebBrowserコンポーネントは残念な事に、新規ウインドウを生成すると、外部プログラム(別のIE)を起動してしまいます。
普通に利用しているIEのイベントにはNewWindow2イベントがあり、これを使う事で回避ができるのですが、これまた残念な事にWebBrowserコンポーネントはNewWindow2イベントをサポートしていません。
検索エンジンを使うと、たくさんの方が解決策としてWebBrowserコンポーネントの拡張を行ってそのソースを公開していらっしゃいます。これをありがたく使わさせていただく事にしました。
今回参照参考にしたのは AGRIMO.JP(アグリモ)- c# webBrowser.NewWindow2 の作り方で、ここで公開されている WebBrowserEx.cs をカスタムコントロールとして使用しています。
- Webページキャプチャには OleDraw()を利用しています。control.DrawToBitmap()はWebページの作りによってキャプチャできない場合があるためです。
NonSoft - WEBページをビットマップ保存するサンプル(C#.NET)を参考にしてOleDraw()の呼び出しのコードを記述しました。
- WebBrowserコンポーネントのScriptErrorsSuppressedでスクリプトエラーを抑止すると、認証などで表示されるダイアログも出なくなってしまいます。
スクリプトエラーを抑止しつつ必要なダイアログ表示を可能にする方法を WebBrowserコントロールでスクリプトエラーの警告を抑制する を参考にしてカスタムコントロールに取り込みしています。