Webブラウザ

2008/01/24

Webブラウザで選択した範囲のみプレビューして印刷してみる(bookmarklet)

 散々あちこちで言われてますが、ブラウザの印刷機能って、端っこが切れちゃったり、思ったように印刷されないことが多いじゃないですか?
 あと、やたらべたべた貼られてる広告とかを取り除いて、「ここだけ印刷したいのに~」っていう場合が、よくあると思います。
 無駄な部分を印刷するのは、インクと紙の無駄使いですしね。

 という訳で、選択範囲を切り出して印刷したり、さらに細かく要素を足したり削ったりしたい場合は、編集モードに切り替えて、好きなようにいじくってから印刷できるソフトを、C#でお手軽に作ってみました。

 と、作ってから気付いたんですが、IEの印刷ダイアログの「ページ範囲」で、「選択した部分」を選べるようになってますね。

 1部分だけ印刷したい場合は、これを利用すればいいんじゃん。無駄なことをしましたw

 でも、印刷ダイアログの「ページ範囲」で「選択した部分」を選ぶことはできるんですが、実際にどのように印刷されるのかプレビューを表示することができません(多分。IE7は知らん)。

 そこで、現在Webブラウザ上に表示されているページの選択部分を切り出すbookmarkletを作ってみました。
 切り出した後に印刷プレビューを表示すれば、部分印刷のプレビューみたいなことができます。

 うぅん、イメージ無いと、分かり辛いかなぁ。
 例えば、こんな風にYahooのスポーツニュースを開いてですね。

 記事部分だけ印刷したい!という場合は、そこだけ選択して、右クリックメニュー(bookmarklet の場合は、ブックマークまたはお気に入り)から「選択範囲を切り出し」を選ぶ訳です。

 すると、めでたく選択した部分だけ切り出されます。

 この状態で「印刷プレビュー」を表示すれば、選択した部分のプレビューになります。

 ちなみに、普通に印刷した場合は、こんな感じ。ロゴやら広告やらフッタやらで、全部で2ページになってしまいますですね(上で切り出した場合は、1ページ内に収まってます)。

 とゆう具合に、部分印刷のプレビューみたいなことが行えるとゆう訳です。

 で、以下がソース。
 何か問題が起こっても責任取れないので、自己責任で利用してください。


追記:
 最初はIE限定、vbs + レジストリいじってコンテキストメニューに追加、とかやってまして、上のイメージもそれに則したモノになってるんですけど、よく考えたら、こんなの bookmarklet で充分でした(今どき bookmarklet ってどうなのよ、とかゆうのは置いといて。私も最初、すっかり存在を忘れてましたが)。
 しかも、bookmarklet ならマルチブラウザ対応もできるし。
 ということで、上のイメージの右クリックメニューは、ブックマーク(お気に入り)に置き換えてご覧下さい(^^ゞ

 以下、IE(6), FireFox(2), Opera(9)対応の bookmarklet です。
 名前を「選択範囲を切り出し」、アドレス(URL)を以下のスクリプトにして、新しくブックマークを登録してください。
 ただし、FireFoxとOperaに関しては、あんまり精度がよくないです。nodeで範囲選択するから、選択した文字列だけを厳密に切り出しません(自分で全部選択する必要が無いので、場合によっては便利かも)。
 あと、面倒なのでフレームに対応してません。なので、切り出せないことがママあるかと思いますが、成功したらラッキーくらいの感じでどうぞw

 選択範囲を切り出し(ブックマークへのD&D用リンク。IEはうまくD&Dできないかも)
 
 ついでに、選択範囲の切り出しだけじゃなくて、もっと細かく要素を追加したり削除したりしたい場合は、編集モードにする方法があります。
 IE(6), FireFox(2), Opera(9) 共通の bookmarklet は以下になります。
 1回実行すると編集モードになり、もう1回実行すると参照モードに戻ります。
 ただし、FireFoxの場合は編集モードから参照モードに戻せないので、いまいち使い勝手が悪いかも。

 ページを編集(ブックマークへのD&D用リンク。IEはうまくD&Dできないかも)

 編集モードと選択範囲の切り出しを合わせてつかえば、かなり細かい調整が行えるんじゃないかと。


 


 
 ここから下は、IEのコンテキストメニューに追加する為の方法です。
 bookmarklet で充分っぽいので、必要無いと思いますけど、いちおう残しておきます。
 
<SCRIPT LANGUAGE="VBScript">
    Dim strSelHtmlText
    Dim exDoc

    Set exDoc = external.menuArguments.document

    '選択部分の HTML を取得
    strSelHtmlText = exDoc.selection.createRange().htmlText

    '選択部分が存在する場合、切り出しを行う
    If Len(strSelHtmlText) Then
        exDoc.body.innerHTML = strSelHtmlText
        exDoc.body.style.textAlign = "left"

        '以下のコメントを外すと、文字サイズが小さめに
        '固定されるので、紙資源の節約になるかも?
        'とか、適当に編集するといいんじゃないかと思います。
        'exDoc.body.style.fontSize = "10pt"

    End If

    Set exDoc = Nothing
</SCRIPT>

(※なんか、この記事を切り出したら、スタイルシートとの兼ね合いでセンタリングされちゃったので、青字部分を追加。というか、無理矢理切り出してるので、レイアウトが崩れる可能性は大いにあります。気になる方は、ソースを適当に直してくださいませ。あとは、コメントアウトしてある緑字部分みたいに、フォントサイズを小さめに固定して、紙資源を節約するとか)
(※2横幅が記事内に収まるように改変しました)

 どこか適当なフォルダに適当な名前(CropSelection.vbsとか)でファイルを作って、上のソースをコピペします。
 適当なフォルダが思いつかない場合は、マイドキュメントの下にフォルダ作って、そこに置けばいいんじゃないでしょうか。
 あと、ファイル名は適当で構いませんが、拡張子は vbs にした方がいいと思います。

 で、次にレジストリを編集して、IEのコンテキストメニューに「選択範囲を切り出し」というメニューを追加します。
 レジストリを直接自分でいじるのがめんどい人は、フリーのソフトが色々あるので、そちらをどうぞ。

1.スタートメニューの「ファイル名を指定して実行...」などから「RegEdit.exe」を起動

2.「HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt」を開く

3.「MenuExt」を右クリックして、「新規」→「キー」を選択

4.「MenuExt」直下に「New Key #1」みたいな項目が追加されるので、名前を「選択範囲を切り出し」に変更

5.4で作った「選択範囲を切り出し」キーを開いて、「標準」をダブルクリック

6.「値のデータ」に、上で保存した vbs ファイルのフルパスを入力して「OK」を押す

7.「標準」の少し下辺りを右クリックして、「新規」→「DWORD値」を選択

8.「New Value #1」みたいな項目が追加されるので、名前を「contexts」に変更

9.「contexts」をダブルクリックして、「データの値」に「10」を入力。「ベース」は「16進」を選択

10.IEを再起動して、適当なページを開いて文字列を選択して、右クリックメニューから「選択範囲を切り出し」を実行してみる

注意:contexts の値が0x10の場合、選択された文字列の上で右クリックしないと「選択範囲を切り出し」がコンテキストメニューに表示されません。選択された文字列の上であっても、その文字列がリンクの一部だったりした場合は表示されないので、あくまでプレーンなテキストの上で右クリックしましょう。
 
 つか、こういうのって、説明の方が手間かかるよね。。。ソース、あんなに短いのに。

 

| | コメント (2) | トラックバック (0)