Internet Explorer 7では、印刷機能がだいぶ改善されている。(参考:Internet Explorer 7 の印刷機能)
といってもこれらの機能の大半はIEのネイティブコンポーネント(DLL,EXE)に対する改善の結果得られたものではなく、IE5.5から既に実装されている印刷テンプレート機能を使って実現されている(可能性が高い)。
つまり印刷テンプレートのHTML+スクリプトの改善(強化)によって実現されている(可能性が高い)。
ということは、IE7で強化された印刷テンプレート(HTML+スクリプト)を抜き出してIE6の環境に適用すれば、IE6でもIE7の新しい印刷機能の恩恵を受けることができるはずだ。
実際に以下の手順でIE6の印刷機能を強化することができた(ように見える)。
1.IE7 RC1をダウンロードする
2.ダウンロードしたIE7RC1-WindowsXP-x86-jpn.exeから、ieframe.dll、ieframe.dll.muiを抜き出す。なおこのセットアップEXEは自己解凍形式のCABなので、インストールしなくても、CABを展開できるソフトでこのexeから必要なファイルだけを抜き出すことができる。
3.リソースエディタを使って、ieframe.dll から PREVIEW.JS をエクスポートする。*1
4.リソースエディタを使って、ieframe.dll.mui から PREVIEW.DLG と、すべての *.png をエクスポートする。
5.エクスポートした PREVIEW.DLG を印刷テンプレートに指定して印刷を行う。*2
IE6では標準の印刷テンプレート(PREVIEW.DLG)は、shdoclc.dll(shdocvw.dllのリソースDLL)に含まれていたが、IE7では PREVIEW.DLG と PREVIEW.JS に別れ、格納されているDLLも ieframe.dll に変更されている。IE7には shdoclc.dll は存在しないようだ。
PREVIEW.JS には印刷テンプレートのJavaScript部分だけが格納され、ieframe.dll に入っている。このファイルは言語非依存だ。
PREVIEW.DLG には印刷テンプレートのHTML部分が格納され、ieframe.dll.mui に入っている。MUI(Multilingual User Interface)を使っていることから分かるとおり、PREVIEW.DLG は言語依存(日本語)のリソースになっている。
というわけで、IE7の新機能と言っても、こと印刷機能に関して言えばIE6でも印刷テンプレートを強化するだけで実現できそうだ。ただしIE7を入れても大丈夫なテスト環境がないので、今回の実験ではIE7はインストールしていないため、実際には印刷テンプレートを持ってきただけではIE6で実現できていない機能もあるのかもしれない。時間があれば今後検証してみたい。
マイクロソフトも、IE7を勧めるばかりでなくIE6のバージョンアップとして印刷テンプレートだけ強化してくれればよいのに。何かできない政治的な理由でもあるんだろうか?
11/8 追記
PREVIEW.JSは、XN Resource Editorを使っても取り出せなかった。記憶違いだったかな・・・
PREVIEW.JSをieframe.dllから取り出すには、以下の操作でできる。
(1)Internet Explorerを起動する(6.0でOK)
(2)アドレスバーに「res://c:\temp\IE7RC1-WindowsXP-x86-jpn\ieframe.dll/PREVIEW.JS」を入力する(赤字の部分はieframe.dllがある場所に変える)
(3)PREVIEW.JSの内容が表示されたら、【ファイル】-【名前をつけて保存】でPREVIEW.JSとして保存する
*1:ieframe.dllはリソースの一部が不完全(または新しいリソースタイプ?)らしく、Visual Studio 6.0のリソースエディタではieframe.dll読み込み時にエラーになってしまう。Platform Builder 5.0でも「グループエラー」になってしまった。今回はXN Resource Editor(日本語版)を使った。
*2:標準IE6には印刷テンプレートをユーザーが指定する機能はないため、標準IE6では結局できない。BHOを使って標準IE6を少しだけ機能拡張し、印刷テンプレートを指定した印刷に対応すればOK。または整形して印刷するだけの目的であれば、このツールを使ってもよい。